SICP 책을 읽닀가 abstract data와 data structure 에 λŒ€ν•œ μ„€λͺ…이 λ―Έν‘ν•œκ²ƒμ„ λ³΄μΆ©ν•˜κ³ μž μœ„ν‚€ν”Όλ””μ•„λ₯Ό μ—΄μ‹¬νžˆ μ°Ύμ•„λ΄€λŠ”λ°,Β 

abstract data type 은 ν•œκ΅­μ–΄λ‘œ 좔상 μžλ£Œν˜•μ΄κ³ , data structure λŠ” 자료ꡬ쑰 라고 λ³€μ—­λœλ‹€λŠ”κ²ƒμ„ μ•Œμ•˜λ‹€.Β 

데이터λ₯Ό 자료 라고 λ²ˆμ—­ν•œλ‹€λŠ”κ²ƒλ„ 처음 μ•”. μ•žμœΌλ‘œ μžλ£Œμ™€ 데이터λ₯Ό μ„žμ–΄ 쓰도둝 함.Β 

μ „λΆ€ μ›μ„œλ‘œ 읽고 μžˆμœΌλ‹ˆ ν•œκ΅­μ–΄λ‘œ 뭐라 λΆ€λ₯΄λŠ”μ§€ μ•Œμˆ˜κ°€ μžˆμ–΄μ•Όμ§€...Β 



μ—¬ν•˜νŠΌ,Β 

μ €λ²ˆ μ„Έμ…˜μ—μ„œλŠ” 자료의 좔상화에 λŒ€ν•΄ λ°°μ› λ‹€. 유리수 사칙연산을 κ΅¬ν˜„ν•  λ•Œ 유리수 자료의 κ΅¬ν˜„λ°©λ²•μ€ λ‚˜μ€‘μ— μƒκ°ν•˜κ³  유리수 자료의 μ‚¬μš©λ°©λ²•μ— λŒ€ν•΄μ„œλ§Œ λ¨Όμ € μƒκ°ν–ˆλ‹€.Β 

μ΄λŸ°μ‹μœΌλ‘œ 자료의 μ‚¬μš©μ„ λ¨Όμ € μƒκ°ν•˜λŠ”κ²ƒμ„ 자료의 좔상화 라고 λΆ€λ₯Έλ‹€... 라고 SICP μ—μ„œλŠ” μ„€λͺ…ν•œλ‹€.Β 

κ·Έλ ‡λ‹€λ©΄ 이 "자료"λΌλŠ”κ²ƒμ€ μ •ν™•νžˆ 무엇인가?Β 


SICPμ—μ„œ μžλ£Œλž€ μ•„λž˜μ˜ κ²ƒλ“€μ˜ 집합이라고 μ •μ˜ν•œλ‹€.Β Β 

1. constructor μƒμ„±μž

2. 자료의 정보λ₯Ό μΆ”μΆœ ν•  수 μžˆλŠ” selector

3. μ‚¬μš© λͺ©μ μ— λΆ€ν•©ν•˜κΈ° μœ„ν•œ 각쒅 쑰건듀.Β 


예λ₯Ό λ“€μ–΄μ„œ 유리수 자료λ₯Ό 처음 생각할 λ•Œ SICPλŠ” μ•„λž˜λ₯Ό λ¨Όμ € μ •μ˜ν–ˆλ‹€.Β 

1. (make-rat <n> <d>) -> μƒμ„±μž. λΆ„μžκ°€ n, λΆ„λͺ¨κ°€ d인 유리수λ₯Ό λ¦¬ν„΄ν•œλ‹€.Β 

2. (numer <x>) (denom <x>) -> μ…€λ ‰ν„°. 각각 λΆ„μžμ™€ λΆ„λͺ¨λ₯Ό λ¦¬ν„΄ν•œλ‹€.Β 

3. μž„μ˜μ˜ μ •μˆ˜ n, d에 λŒ€ν•΄μ„œ x κ°€ (make-rat n d)라면 μ•„λž˜μ˜ 식을 λ§Œμ‘±ν•΄μ•Ό ν•œλ‹€. -> 쑰건 


보면 μ•Œ 수 μžˆλ“―μ΄ κ΅¬ν˜„ 방법은 λ‚˜μ€‘μ— μƒκ°ν•˜κ³  μ–΄λ–»κ²Œ μ‚¬μš©ν•΄μ•Ό ν•˜λŠ”μ§€λ§Œμ„ μƒκ°ν•˜κ³  μžˆλ‹€.Β 

즉, SICP μ—μ„œ λ§ν•˜λŠ” "자료"λž€ μ² μ €ν•˜κ²Œ μ‚¬μš©μžμ˜ μž…μž₯μ—μ„œ μƒκ°ν•˜λ©°,Β μ–΄λ– ν•œ μ‘°κ±΄μ—μ„œ μ–΄λ–»κ²Œ μ‚¬μš© κ°€λŠ₯ν•œκ°€? 둜 μ •μ˜ λœλ‹€λŠ” 것.Β 


근데 SICPμ—μ„œ λ§ν•˜λŠ” μžλ£ŒλŠ” μœ„ν‚€ν”Όλ””μ•„μ—μ„œ 좔상 μžλ£Œν˜• (abstract data type ADT)라고 λΆ€λ₯΄λŠ” λ“― ν•˜λ‹€.Β Β 

ꡬ체적인 κ΅¬ν˜„ 방법은 μ—†λŠ”Β μ‚¬μš©μžμ˜ μž…μž₯μ—μ„œ μƒκ°ν•˜λŠ” μˆ˜ν•™μ  λͺ¨λΈμ΄λΌκ³  ν•˜λŠ”λ“―.Β 

ADTΒ μœ„ν‚€ν”Όλ””μ•„ 링크 


그리고 이 ADTλ₯Ό ꡬ체적으둜 κ΅¬ν˜„ν•˜λŠ” ν•˜λ‚˜μ˜ λ°©λ²•μœΌλ‘œ μžλ£Œκ΅¬μ‘°κ°€ μžˆλ‹€λŠ”λ“―.Β 

μžλ£Œκ΅¬μ‘°Β μœ„ν‚€ν”Όλ””μ•„ 링크


즉, μœ„ν‚€ν”Όλ””μ•„ μ‹μœΌλ‘œλ§ν•˜μžλ©΄ μ–΄λ–€ ν”„λ‘œκ·Έλž¨μ„ 섀계할 λ•ŒλŠ”Β μΆ”μƒ μžλ£Œν˜•μœΌλ‘œ 틀을 작고, κ·Έ 뒀에 자료ꡬ쑰 λ“±μœΌλ‘œ μ‹€μ œ 자료λ₯Ό κ΅¬ν˜„ν•œλ‹€. λΌλŠ”κ²ƒ.Β 

SICP μ‹μœΌλ‘œ λ§ν•˜μžλ©΄ μ–΄λ–€ ν”„λ‘œκ·Έλž¨μ„ 섀계할 λ•ŒλŠ” 자료의 좔상화λ₯Ό 톡해 틀을 작고, λ‚˜μ€‘μ— 자료의 κ΅¬ν˜„μ„ μƒκ°ν•œλ‹€. λΌλŠ”κ±°.Β 


μ‹€μ œλ‘œ 자료(μœ„ν‚€μ˜ ADT)λ₯Ό κ΅¬ν˜„ν•˜λŠ” λ°©μ‹μœΌλ‘œλŠ” λͺ‡κ°€μ§€ 방법이 μžˆλŠ”λ°,Β 

ν•˜λ‚˜λŠ” 자료ꡬ쑰λ₯Ό μ΄μš©ν•˜λŠ”κ²ƒμ΄κ³ , 또 ν•˜λ‚˜λŠ” 자료ꡬ쑰λ₯Ό μ „ν˜€ μ‚¬μš©ν•˜μ§€ μ•Šκ³  ν•¨μˆ˜λ§Œμ„ μ‚¬μš©ν•˜λŠ” 방법이 μžˆλ‹€.Β 

이전 κΈ€μ—μ„œλŠ” lisp의 νŽ˜μ–΄, 즉 2-νŠœν”Œ 자료ꡬ쑰λ₯Ό μ΄μš©ν•΄μ„œ 유리수 자료λ₯Ό κ΅¬ν˜„μ„ ν–ˆλŠ”λ°,Β 

SICPμ—μ„œλŠ” 자료ꡬ쑰λ₯Ό μ „ν˜€ μ‚¬μš©ν•˜μ§€ μ•Šκ³  ν•¨μˆ˜λ‘œλ§Œ κ΅¬ν˜„ν•˜λŠ” 방법을 μ†Œκ°œν•œλ‹€.Β 

자료λ₯Ό ν•¨μˆ˜λ§ŒμœΌλ‘œ κ΅¬ν˜„ν•˜λŠ”κ²ƒ ν”„λ‘œκ·Έλž˜λ° μŠ€νƒ€μΌμ„ message passing 이라고 λΆ€λ₯΄λŠ”λ° 챕터3μ—μ„œ λ‹€λ£¬λ‹€λŠ”λ“―.Β 


----------- μž‘μ†Œλ¦¬ ------------------

이 SICP 책은 κ°œλ…μ˜ 좔상화λ₯Ό 맀우 μ€‘μš”ν•˜κ²Œ μ—¬κΈ°λŠ” λ“― ν•˜λ‹€.Β 

ν”„λ‘œμ‹œμ €(ν•¨μˆ˜)의 μΆ”μƒν™”μ—μ„œλ„ κ°œλ…μ„ μ–΄λ–»κ²Œ 좔상화 ν•  수 μžˆλŠ”κ°€λ₯Ό κ³„μ†ν•΄μ„œ λΉŒλ“œμ—… ν–ˆμ—ˆκ³ ,Β 

자료의 좔상화 μ—μ„œλ„ κ°œλ…μ„ μ–΄λ–»κ²Œ 좔상화 ν•  것인가λ₯Ό 좔상 μžλ£Œν˜•μ„ μ‚¬μš©ν•΄μ„œ κ°•μ‘°ν•˜κ³  μžˆλ‹€.Β 

즉, SICP의 ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ˜ 이해 방법은 μ–΄λ–»κ²Œ μ‚¬λžŒμ˜ μž‘μ—…μ„ νƒ‘λ‹€μš΄ ν˜•μ‹μœΌλ‘œ 짜 λ‚΄λ €κ°ˆ 것인가에 μ§‘μ€‘ν•œλ‹€λŠ”κ²ƒ.Β 

κ°€μž₯ 큰 μž‘μ—…μ˜ κ°œλ…μ„ μ •λ¦¬ν•˜κ³ , 각각의 κ°œλ…μ„ λ‹€μ‹œ 더 μž‘μ€ κ°œλ…μœΌλ‘œ μ •λ¦¬ν•˜κ³ , λ‹€μ‹œ 그것을 λ°˜λ³΅ν•΄μ„œ 둜우레벨둜 λ‚΄λ €κ°€λŠ”κ²ƒ.Β 

그것을 ν•˜κΈ° μœ„ν•΄ ν•¨μˆ˜μ˜ 좔상화와 자료의 좔상화λ₯Ό μžμ„Έν•˜κ²Œ μ„€λͺ…ν•˜κ³  μžˆλŠ”κ²ƒμ΄ μ•„λ‹κΉŒ?Β 

μ΄λ ‡κ²Œ νƒ‘λ‹€μš΄ ν˜•μ‹μœΌλ‘œ κ°œλ…μ„ λ¨Όμ € μ •λ¦¬ν•˜κ³ , κ·Έ κ°œλ…μ—μ„œ μ‚¬μš©ν•˜κΈ° μœ„ν•œ μžλ£Œλž€ 무엇인가? λ₯Ό μƒκ°ν•˜κΈ° λ•Œλ¬Έμ— SICPμ—μ„œλŠ” 자료의 μ •μ˜λ₯Ό μ‚¬μš©μžμ˜ μž…μž₯μ—μ„œλ§Œ 내린것.Β