E D R , A S I H C RSS

How To Study Design Patterns


DPSCλΌ κ΅¬μž…ν•œ 뢄듀이 μ€ μžˆλŠ” κ²ƒμœΌλ‘œ 보아, DPλΌ κ³΅λΆ€ν•˜λ €λŠ” μ›€μ§μž„ 같은 게 μžˆμ§€ μ•Šμ„κΉŒ ν•˜λŠ” 생각에 "쑰금 λ¨Όμ € κ³΅λΆ€ν•œ μ‚¬λžŒ"μœΌλ‘œμ„œ λͺ‡ 가지 쑰언을 λ“œλ¦΄κΉŒ ν•©λ‹ˆλ‹€. (DPSC 이야기가 μ•ˆλ‚˜μ™”μœΌλ©΄ 이런 κΈ€ 쓰지 μ•Šμ•˜μ„ν…λ°... 이것도 인연이라면 인연이λ„μš”)

κΈ°λ³Έμ μœΌλ‘œλŠ” 제 κ΅μœ‘μ² ν•™κ³Ό μ–Έμ–΄κ΅μŠ΅λ‘ , 그리고 κ³΅λΆ€λ‘ μ—μ„œ 크게 λ²—μ–΄λ‚˜μ§€ μ•ŠμœΌλ€λ‘œ μ €λ²ˆ μ˜μ–΄(및 기타) κ°•μ˜λΌ λ“€μœΌμ…¨λ˜ 뢄듀에겐 μ΅μˆ™ν•œ 이야기가 λ§Žμ„ κ²λ‹ˆλ‹€.

기본적으둜 "κ΅μœ‘μ€ κ΅μœ‘μžκ°€ ν”Όκ΅μœ‘μžκ°€μ—κ²Œ 지식을 κ³ λŒ€λ‘œ μ „λ‹¬ν•˜λŠ” ν–‰μœ„κ°€ μ•„λ‹™λ‹ˆλ‹€. μ§„μ •ν•œ κ΅μœ‘μ€ ν”Όκ΅μœ‘μžμ˜ 개인적 μ²΄ν—˜μ— κΈ°λ°˜ν•œ 전폭적 λ™μ˜μ—μ„œ μΆœλ°œν•©λ‹ˆλ‹€. μ €λŠ” μ΄λΌ λ™μ˜μ— μ˜ν•œ ꡐ윑이라고 ν•©λ‹ˆλ‹€."

λ‚΄κ°€ μ—¬λŸ¬λΆ„μ—κ²Œ "주석문을 κ°€λŠ₯ν•˜λ©΄ 쓰지 μ•ŠλŠ” 것이 더 μ’‹λ‹€"λΌλŠ” μ΄μ•ΌκΈ°λΌ ν–ˆμ„ λ•Œ 이 λ¬Έμž₯을 ν•˜λ‚˜μ˜ μ‚¬μ‹€λ‘œ 받아듀이고 κΈ°μ–΅ν•˜λ©΄ κ·Έ μ‹œμ  λ‹Ήμž₯μ—λŠ” ν•™μŠ΅μ΄ μΌμ–΄λ‚˜μ§€ μ•ŠλŠ”λ‹€κ³  λ΄…λ‹ˆλ‹€. λŒ€μ‹  μ—¬λŸ¬λΆ„μ΄ 차후에 μ—¬λŸ¬κ°€μ§€ κ²½ν—˜μ„ ν•˜λ©΄μ„œλ„ 이 ν™”λ‘λΌ λ†“μΉ˜μ§€ μ•Šκ³  μžˆλ‹€κ°€ μ–΄λŠ μˆœκ°„μ—”κ°€, "μ•„!!! 그래 주석문을 쓰지 μ•ŠλŠ”κ²Œ μ’‹κ² κ΅¬λ‚˜!!"ν•˜κ³  μžκ°ν•˜λŠ” μˆœκ°„, λ°”λ‘œ κ·Έ μ‹œμ μ— ν•™μŠ΅μ΄, ꡐ윑이 이λ„μ§€λŠ” κ²ƒμž…λ‹ˆλ‹€. μ΄λŠ” 기본적으둜 μ»¨μŠ€νŠΈλŸ­ν‹°λΉ„μ¦˜μ΄λΌκ³  ν•˜λŠ” μ‚μ•„μ œμ™€ λΉ„κ³³μŠ€ν‚€μ˜ 철학을 λ”°λ₯΄λŠ” 것이죠. μ§€μ‹μ΄λž€ μ™ΈλΆ€μ—μ„œ μž…λ ₯λ°›λŠ” 것이 μ•„λ‹ˆκ³ , 그것에 λŒ€ν•œ λͺ¨λΈμ„ ν•™μŠ΅μž μŠ€μŠ€λ‘œκ°€ λ‚΄λΆ€μ—μ„œ μΆ•μ‘°(construct)ν•  λ•Œ νšλ“ν•  수 μžˆλŠ” κ²ƒμ΄λΌλŠ” 철학이죠.

μ œκ°€ 일전에 썼던 글을 μΈμš©ν•˜κ² μŠ΅λ‹ˆλ‹€:

''μ΅œμ†Œν•œ μ–Έμ–΄ κ΅μœ‘μ— μžˆμ–΄μ„œλŠ” ν”Όκ΅μœ‘μžμ˜ "기쁨에 μ°¬" λ™μ˜κ°€ μ—†μœΌλ©΄ λ³„λ‘œ νš¨κ³ΌλΌ λ³Ό 수 μ—†λ‹€λŠ” 게 제 μƒκ°μž…λ‹ˆλ‹€. λͺ¨λ₯΄λŠ” μ‚¬λžŒμ€ μ•„μ˜ˆ λͺ¨λ₯΄κΈ° λ•Œλ¬Έμ— 아직 곡뢀할 ν•„μš”κ°€ μ—†μœΌλ©° μ•„λŠ” μ‚¬λžŒμ€ μ΄λΈ μ•ŒκΈ° λ•Œλ¬Έμ— λ‹€μ‹œ 곡뢀할 ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€. μ•„λŠ” 것도 λͺ¨λ₯΄λŠ” 것도 μ•„λ‹ˆκ³  μ–΄μ€‘κ°„ν•œ μƒνƒœμ—μ„œ λ‚˜λ¦„μ˜ λ¬Έμ œμ˜μ‹μ„ κ°–κ³  μžˆλŠ” 경우, 이 μ‚¬λžŒμ—κ²Œ λˆ„κ΅°κ°€κ°€ "μ œλŒ€λ‘œ 된" ν•œλ‘λ§ˆλ””λ§Œ λ˜μ Έμ€˜λ„ κ·ΈλŠ” 열가지 μŠ€λ¬΄κ°€μ§€ μΌμ‚¬μ²œλ¦¬λ‘œ μ†Œν™”ν•˜κ³  μ΄ν•΄ν•˜λ©° 자발적인 ν•™μŠ΅μ„ ν•˜κ²Œ λ©λ‹ˆλ‹€.

예컨데 μžμ‹ μ˜ μ‚Άμ˜ λͺ©ν‘œμ— λŒ€ν•΄ λ¬Έμ œμ˜μ‹ 쑰차도 ν˜•μ„±λ˜μ§€ μ•Šμ€ μ‚¬λžŒμ—κ²ŒλŠ” λ°±λ‚  μ’…κ΅λ‹ˆ, μ² ν•™μ΄λ‹ˆ λ– λ“€μ–΄ 봐야 ν—›μˆ˜κ³ μž…λ‹ˆλ‹€λ§Œ, μ΄λΈ κ°œλ³„μ μ΄κ³  ꡬ체적인 μ²΄ν—˜λ“€μ„ 톡해 μžμ‹ λ§Œμ˜ λ¬Έμ œμ˜μ‹μ„ λ‚˜λ¦„λŒ€λ‘œ ν˜•μ„±ν•œ μ‚¬λžŒμ€ κ³΅λΆ€ν•˜κ³  λ‚¨μ˜ 말을 듀을 μ€λΉ„κ°€ 된 μ‚¬λžŒμž…λ‹ˆλ‹€.

아담이 μ„Έμƒμ˜ λͺ¨λ“  "것"듀을 보고 일일이 이름을 λΆ™μ˜€λ˜ 것은, λ³΄μ•˜κΈ° λ•Œλ¬Έμ— κ°€λŠ₯ν–ˆλ˜ κ²ƒμž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μš°λ¦¬λ‚˜λΌ ꡐ윑의 λŒ€λΆ€λΆ„μ€ horseλΌ λ³΄κΈ° 이전에 horseλΌλŠ” 이름을 κ°€λ₯΄μΉ˜κ³ , λ¬Έμ œμ˜μ‹μ„ μ™ΈλΆ€μ—μ„œ ν•™μƒμ—κ²Œ μ£Όμž…ν•˜λ € ν•©λ‹ˆλ‹€. κ·ΈλŸ¬ν•œ μ§€μ‹μ˜ ν•„μš”μ„±κΉŒμ§€λ„ μ•”κΈ°ν•˜κ³ , μ΄ν•΄ν•˜λ„λ‘ κ°•μš”ν•˜λŠ” κ²ƒμ΄μ§€μš”.

μ €λŠ” 후학듀이 λ‚œμƒ 처음 μ–΄λ–€ 학문을 곡뢀할 λ•Œ μ²˜μŒλΆ€ν„° 졜고의 λŒ€κ°€μ—κ²Œ κ°€μ„œ κ°•μ˜λΌ λ“£λŠ”λ‹€λ“ κ°€ ν•˜λŠ” 것을 그닀지 κΆŒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ -- κ°•μ˜μžμ™€ ν”Όκ°•μ˜μžμ˜ λ…Έλ ₯에 λΉ„ν•΄ 크게 도움이 λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 이것은 κ²°κ΅­, μŠ€μŠ€λ‘œκ°€ μžμ‹ λ§Œμ˜ λ¬Έμ œμ˜μ‹μ„ κ°–κ³  μžˆμ–΄μ•Ό ν•˜λ©°, λ˜ν•œ κ·Έ λ¬Έμ œμ˜μ‹μ€ μ² μ €νžˆ μžμ‹ μ˜ μ‚Άμ—μ„œ 우러 λ‚˜μ™€μ•Ό ν•˜λŠ” 것이기 λ•Œλ¬Έμž…λ‹ˆλ‹€. κ·Έ 이후에 ν›Œλ₯­ν•œ 선생듀을 λ§Œλ‚˜λ©΄ 정말 비약적인, 계단을 μ„œλ„ˆμΉΈ λ›°μ–΄μ˜€λ₯΄λŠ” λ°œμ „μ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

κ²°κ΅­ 제 ν›„λ°°κ°€ ν•œλ‹¬ μ •λ„λ§Œμ— κ·Έλ ‡κ²Œ κ»μ§ˆμ„ κΉ¨κ³  λ‚˜μ˜€λŠ” λ°œμ „μ„ ν•  수 μžˆμ—ˆλ˜ 것은 κ·Έ μžμ‹ μ΄ 늘 "λ°˜μ„±μ μΈ ν•™μŠ΅"을 ν•΄μ˜€λ©° 자기 μ˜μ–΄ 곡뢀에 λŒ€ν•œ λ¬Έμ œμ˜μ‹μ„ ν˜•μ„±ν–ˆκ³  ꢁ리해 μ™”κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. λ¬Όλ‘  μ ˆλŒ€μ μΈ μ˜μ–΄ κ³΅λΆ€λŸ‰(input)이 μ΄λΈ μ–΄λŠ 정도 λ˜μ–΄ μžˆμ—ˆκΈ° λ•Œλ¬Έμ΄κΈ°λ„ ν•©λ‹ˆλ‹€. 물길을 μ—΄μ–΄μ„ "μ—΄μ‡ "κ°€ ν•„μš”ν–ˆμ—ˆλ˜κ±°μ£ . μ΄λΈ λ¬Όμ€ μ–΄λŠ 정도 μ°¨ μžˆμ—ˆκ³ μš”.

......

κΆŒλ²•μ—μ„œ 주먹에 λŒ€ν•΄ λ‹¬ν†΅ν•œ 도사가 "κΆŒμ„ 내지λ₯΄λŠ” 법"에 λŒ€ν•œ κ·œμΉ™λ“€μ„ μ •λ¦¬λΌ ν•΄μ„œ μ• μ œμžμ˜ λŒ€κ°ˆν†΅ 속에 아무리 μ‘€μ…”λ„£λŠ”λ° 성곡을 ν•œλ“€ κ·Έ μ œμžκ°€ λ„μ‚¬λ§ŒνΌμ˜ 주먹이 λ‚˜κ°ˆλ¦¬λŠ” λ§Œλ¬΄ν•©λ‹ˆλ‹€. "κΆŒμ„ 내지λ₯΄λŠ” 법"을 μœ μΆ”ν•΄ λ‚΄κΈ°κΉŒμ§€ κ·Έ 슀승이 κ²ͺ은 과정을 μ œμžλŠ” μ™„μ£€νžˆ 쏙 λΉΌλ¨Ήκ³  있기 λ•Œλ¬Έμž…λ‹ˆλ‹€. μ†Œμœ„ 'λͺΈ'이 λ§Œλ“€μ–΄ 지지 μ•Šμ€ κ²ƒμ΄μ§€μš”. μ œμžλŠ” λ§ˆλ‹Ή μ“ΈκΈ°μ—μ„œλΆ€ν„° ν•΄μ„œ, λ¬Ό κΈ·κΈ°, 기타 λ“±λ“±μ˜ λͺΈμ˜ 수련의 과정을 κ²ͺμ–΄μ•Όλ§Œ ν•˜κ³ , κ·Έ μ œμžκ°€ 슀승이 μ •λ¦¬ν•œ κ·Έ κ·œμΉ™μ˜ 일련에 손뼉을 치고 좀을 μΆ”λ©° 기쁨의 λ™μ˜λΌ ν•  수 μžˆμ„ μ •λ„λ‘œ κ³Όμ •μ˜ 좕적이 이루어진 이후에야 λΉ„λ‘œμ†Œ μ§„μ •ν•œ 'κ°€λ₯΄μΉ¨'이 이λ„μ§€λŠ” 것이며, μ²­μΆœμ–΄λžŒμ˜ κ°€λŠ₯성도 생각해 λ³Ό 수 μžˆλŠ” κ²ƒμž…λ‹ˆλ‹€.

......''

이런 λ™μ˜λΌλŠ” 것은 ν•™μŠ΅μž μžμ‹ λ§Œμ˜ μ»¨ν…μŠ€νŠΈμ™€ λ¬Έμ œμ˜μ‹μ„ λ°”νƒ•μœΌλ‘œ ν•œ κ²ƒμž…λ‹ˆλ‹€. μš°λ¦¬λŠ” λ§Žμ€ 경우, μ–΄λ–€ 지식과 λ™μ‹œμ˜ κ·Έ μ§€μ‹μ˜ ν•„μš”μ„±κΉŒμ§€λ„ μ§€μ‹ν™”ν•΄μ„œ μ™ΈλΆ€μ—μ„œ μ£Όμž…μ„ λ°›μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ 진정 μ²΄ν™”λœ 지식을 μœ„ν•΄μ„œλŠ” μŠ€μŠ€λ‘œκ°€ μ΄λΈ λ¬Έμ œμ˜μ‹μ„ κ°–κ³  μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

νŒ¨ν„΄λ„ λ§ˆμ°¬κ°€μ§€μΈλ°, λŒ€λΆ€λΆ„ κ·Έ νŒ¨ν„΄μ˜ ν•„μš”μ„±μ„ μ²΄κ°ν•˜μ§€ λͺ»ν•œ 채 κ·Έλƒ₯ 도식적 κ΅¬μ‘°λΌ μ™Έμš°κΈ°μ—λ§Œ μ£Όλ ₯ν•˜λŠ” μ‚¬λžŒμ΄ λ§ŽμŠ΅λ‹ˆλ‹€λ§Œ, 사싀 κ·Έλ ‡κ²Œ 되면 μ–΄λ–€ κ²½μš°μ— 이 νŒ¨ν„΄μ΄ ν•„μš”ν•˜κ³  μ–΄λ–€ κ²½μš°μ—λŠ” μ‚¬μš©ν•˜λ©΄ μ•ˆλ˜λŠ”μ§€ 등을 μ•ŒκΈ° νž˜λ“­λ‹ˆλ‹€. μ„λ Ή 책에 λ‚˜μ˜¨ κ°€μ΄λ“œλΌ μ•”κΈ°ν–ˆλ”λΌλ„μš”. μžμ‹ μ˜ μ‚Ά μ†μ—μ„œ λ¬Έμ œμ˜μ‹μ΄ ꡬ체적으둜 μ‹€μ œ κ²½ν—˜μœΌλ‘œ ν˜•μ„±λ˜μ§€ μ•Šμ•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

DP의 μ €μž(GoF) 쀑 ν•œ λͺ…인 λž„ν”„ μ‘΄μŠ¨μ€ λ‹€μŒκ³Ό 같이 λ§ν•©λ‹ˆλ‹€:
We were not bold enough to say in print that you should avoid putting in patterns until you had enough experience to know you needed them, but we all believed that. I have always thought that patterns should appear later in the life of a program, not in your early versions.

결ꡭ은 μ–΄λ–€ νŒ¨ν„΄μ˜ ν•„μš”μ„±μ„ μžμ‹ μ˜ κ²½ν—˜ μ†μ—μ„œ "절감"ν•˜μ§€ λͺ»ν•œλ‹€λ©΄ κ·Έ νŒ¨ν„΄μ„ μ œλŒ€λ‘œ μ•„λŠ” 것이 μ•„λ‹ˆλΌκ³  말할 수 μžˆμ„ κ²λ‹ˆλ‹€.

λ”°λΌμ„œ, νŒ¨ν„΄ ν•˜λ‚˜λΌ κ³΅λΆ€ν•  λ•Œμ—λŠ” κ°€λŠ₯ν•œ ν•œ μ‹€μ œ μ˜ˆλΌ λ§Žμ΄ μ ‘ν•˜λ„λ‘ ν•΄μ•Ό ν•©λ‹ˆλ‹€. 그리고 νŒ¨ν„΄μ„ μ μš©ν•˜μ§€ μ•Šμ€ κ²½μš°μ—μ„œ κ·Έ ν•„μš”λΌ λŠλΌκ³  μ„λͺ…ν•  수 μžˆκ²Œλ” λ‹€μ–‘ν•œ μ½”λ“œλΌ μ ‘ν•΄μ•Ό ν•©λ‹ˆλ‹€.

νŒ¨ν„΄ 쀑에 보면 μ„œλ‘œ λΉ„μŠ·λΉ„μŠ·ν•œ 것듀이 μƒλ‹Ήνžˆ λ§ŽμŠ΅λ‹ˆλ‹€. κ·Έ κ΅¬μ‘°λ‘œλŠ” μ™„μ „νžˆ λ™μΌν•œ 것도 있죠 -- μ΄ˆλ³΄μžλ“€μ„ κ΄΄λ‘­νžˆλŠ” 것 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€. 이것은 μ™Έκ΅­μ–΄λΌ κ³΅λΆ€ν•  λ•Œ 문법 쀑심적인 ν•™μŠ΅μ„ ν•˜λŠ” 것과 λΉ„μŠ·ν•©λ‹ˆλ‹€. "μ£Όμ–΄+동사+λͺ©μ μ–΄"λΌλŠ” κ΅¬μ‘°λ‘œλŠ” λ™μΌν•œ 두 개의 λ¬Έμž₯, 즉 "I love you"와 "I hate you"κ°€ κ΅¬μ‘°μ μœΌλ‘œλŠ” 동일할 지라도 의λΈλ‘ μ μœΌλ‘œλŠ” μ™„μ „νžˆ λ°˜λŒ€κ°€ 될 수 μžˆλŠ” κ²λ‹ˆλ‹€. νŒ¨ν„΄μ„ 곡뢀할 λ•Œμ—λŠ” κ·Έ ꡬ쑰보닀 의λΈμ™€ μ˜λ„λΌ μš°μ„ ν•΄μ•Ό ν•˜λ©°, μ΄λŠ” λ‹€μ–‘ν•œ μ‹€λ€λΌ μΌ€μ΄μŠ€ 바이 μΌ€μ΄μŠ€λ‘œ μ ‘ν•˜λ©΄μ„œ μΆ”λ‘ ν™” 및 μžμ‹ λ§Œμ˜ λͺ¨λΈν™”λΌλŠ” μž‘μ—…μ„ 톡해 ν•˜λŠ” 것이 μ΅œμ„ μž…λ‹ˆλ‹€. 슀슀둜 문법을 λ°œκ²¬ν•˜κ³  μ²΄λ“ν•˜λŠ” 것이라고 ν• κΉŒμš”.

DPλŠ” 사전과 κ°™μŠ΅λ‹ˆλ‹€. 이 책은 μˆœμ„œλŒ€λ‘œ μ†Œμ„읽λ“이 μ½μ–΄λ‚˜κ°€λΌκ³  μ§‘ν•„λœ 것이 μ•„λ‹ˆκ³ , μΌμ’…μ˜ νŒ¨ν„΄ 레퍼런슀둜 쓰인 κ²ƒμž…λ‹ˆλ‹€.

μ—­μ‹œ GoF의 ν•œλͺ…인 μ‘΄ λΈ”λ¦¬μŠ€μ‚¬μ΄μ¦ˆλŠ” λ‹€μŒκ³Ό 같이 λ§ν•©λ‹ˆλ‹€:
''The other thing I want to underscore here is how to go about reading Design Patterns, a.k.a. the "GoF" book. Many people feel that to fully grasp its content, they need to read it sequentially. But GoF is really a reference book, not a novel. Imagine trying to learn German by reading a Deutsch-English dictionary cover-to-cover;it just won't work! If you want to master German, you have to immerse yourself in German culture. You have to live German. The same is true of design patterns: you must immerse yourself in software development before you can master them. You have to live the patterns.

Read Design Patterns like a novel if you must, but few people will become fluent that way. Put the patterns to work in the heat of a software development project. Draw on their insights as you encounter real design problems. That’s the most efficient way to make the GoF patterns your own.''

μ œκ°€ μ—¬λŸ¬λ²ˆ κ°•μ‘°ν•œ, μ–΄λ–€ 지식을 μ²΄ν™”ν•˜κΈ° μœ„ν•΄μ„  κ·Έ μ§€μ‹μœΌλ‘œ μ‚΄μ•„μ•Ό ν•œλ‹€λŠ” 말을 μ—¬κΈ°μ„œλ„ 확인할 수 μžˆκ΅°μš”. μ˜μ–΄λΌ λ°°μš°λ €λ©΄ μ˜μ–΄λ‘œ μ‚΄κ³ , DPλΌ λ°°μš°λ €λ©΄ DP둜 살아라. λ‹¨μˆœν•˜λ©΄μ„œλ„ μ•„μ£Ό κ°•λ ₯ν•œ 말 μ•„λ‹™λ‹ˆκΉŒ.

μ–΄λ–€ νŠΉμ • λ¬Έμž₯ ꡬ쑰(as much as ...λ‚˜, no more than ... 같은)λΌ ν•™μŠ΅ν•˜λŠ”λ° μ΅œμ„ μ€ κ·Έ λ¬Έμž₯ κ΅¬μ‘°λΌ μ΄μš©ν•œ μ‹€μ œ λ¬Έμž₯을 λ‚˜μ—κ²Œ 의λΈμžˆλŠ” μ‹€ μ»¨ν…μŠ€νŠΈ μ†μ—μ„œ 많이 μ ‘ν•˜κ³  슀슀둜 λ‚˜λ¦„μ˜ λͺ¨λΈμ„ ꡬ좕(constructivism)ν•˜μ—¬ κ΅κ³Όμ„œμ˜ 법칙에 "기쁨에 μ°¬ λ™μ˜"λΌ ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

μ£Όλ³€μ—μ„œ νŠΉμ • νŒ¨ν„΄μ΄ κ΅¬ν˜„λœ μ½”λ“œλΌ κ΅¬ν•˜κΈ°κ°€ νž˜λ“€λ‹€λ©΄ 이 νŒ¨ν„΄μ„ μžμ‹ μ΄ λ§Œμ§€κ³  μžˆλŠ” μ½”λ“œμ— μ μš©ν•΄ 보렀고 λ…Έλ ₯ν•΄ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λ ‡κ²Œ 해보고 μ €λ ‡κ²Œλ„ 해보고, κ·ΈλŸ¬λ‹€κ°€ 였히렀 λ³΅μž‘λ„λ§Œ μ¦κ°€ν•˜λ©΄ "μ•„ 이 κ²½μš°μ—λŠ” 이 νŒ¨ν„΄μ„ μ“°λ©΄ μ•ˆλ˜κ² κ΅¬λ‚˜"ν•˜λŠ” κ±Έ ν•™μŠ΅ν•  μˆ˜λ„ 있죠. GoFλŠ” ν•œκ²° 같이 νŒ¨ν„΄μ„ 배울 λ•Œμ—λŠ” "이 νŒ¨ν„΄μ΄ μ ν•©ν•œ 상황과 λ™μ‹œμ— 이 νŒ¨ν„΄μ΄ μ•…μš©/였용될 수 μžˆλŠ” 상황"을 ν•¨κ»˜ κ³΅λΆ€ν•˜λΌκ³  ν•©λ‹ˆλ‹€.

이런 μ‹μ˜ "μ‚¬λ€ μ€‘μ‹¬"의 κ³΅λΆ€λΌ μœ„ν•΄μ„œλŠ” μŠ€ν„°λ”” 그룹을 μ‘°μ§ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. 혼자 κ³΅λΆ€λΌ ν•˜κ±΄, 그룹으둜 ν•˜κ±΄ μ‘°μŠˆμ•„ μ»€λ¦¬ν”„μŠ€ν‚€μ˜ 유λͺ…ν•œ A Learning Guide To Design Patterns (http://www.industriallogic.com/papers/learning.html)을 κΌ­ μ°Έκ³ ν•˜μ„Έμš”. 그리고 μŠ€ν„°λ”” 그룹을 효과적으둜 κΎΈλ € λ‚˜κ°€λŠ” λ°μ—λŠ” μŠ€ν„°λ”” 그룹의 νŒ¨ν„΄ μ–Έμ–΄λΌ μ„œμˆ ν•œ Knowledge Hydrant (http://www.industriallogic.com/papers/khdraft.pdf) λΌ μ°Έκ³ ν•˜λ©΄ λ§Žμ€ 도움이 될 κ²λ‹ˆλ‹€ -- 이 λ¬Έμ„œλŠ” 뭐든지 간에 κ·Έλ£Ή μŠ€ν„°λ””λΌ ν•œλ‹€λ©΄ μ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

LG2DPμ—λŠ” λ’· 뢀뢄에 보면 DPλΌ κ³΅λΆ€ν•˜λŠ” μˆœμ„œμ™€ 각 νŒ¨ν„΄μ—μ„œ λ˜μ§ˆλ§Œν•œ 질문이 같이 μ •λ¦¬λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. DPλŠ” 순차적으둜 κ³΅λΆ€ν•΄μ•Όλ§Œ ν•˜λŠ” 것은 μ•„λ‹™λ‹ˆλ‹€. 효과적인 κ³΅λΆ€μ˜ μˆœμ„œκ°€ μžˆμŠ΅λ‹ˆλ‹€.

sorryλΌλŠ” λ‹¨μ–΄λΌ λͺ¨λ₯΄λ©΄μ„œ remorsefulμ΄λΌλŠ” λ‹¨μ–΄λΌ κ³΅λΆ€ν•˜λŠ” 학생을 연상해 λ³΄μ„Έμš”. 제 κ°•μ˜μ—μ„œλ„ κ°•μ‘°λΌ ν–ˆμ§€λ§Œ, μ™Έκ΅­μ–΄ κ³΅λΆ€μ—μ„œλŠ” 자기 λͺΈμ— κ°€κΉŒμš΄ μ‰¬μš΄ 단어뢀터 κ³΅λž΅μ„ ν•˜λŠ” 것이 ν•„μˆ˜μ μž…λ‹ˆλ‹€ -- 이런 κ±Έ Proximal learning이라고도 ν•˜μ£ . 등급별 μ–΄νœ˜ λͺ©λ‘ 같은 게 있으면 μ’‹μ£ . LG2DPμ—μ„œ μ œμ•ˆν•˜λŠ” μˆœμ„œκ°€ 그런 것 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€.

λž„ν”„μ‘΄μŠ¨μ€ 이런 "μˆœμ„œ"의 μ€‘μš”μ„±μ— κ΄€ν•΄ 이런 말을 ν–ˆμŠ΅λ‹ˆλ‹€:
...but I always teach Composite Pattern, Strategy Pattern, Template Method Pattern, and Factory Method Pattern before I teach Singleton Pattern. They are much more common, and most people are probably already using the last two. ...

그런데 사싀 GoF의 DP에 λ‚˜μ˜¨ νŒ¨ν„΄λ“€λ³΄λ‹€ 더 핡심적인 μ–΄νœ˜κ΅°μ΄ μžˆμŠ΅λ‹ˆλ‹€. λ§ˆμ΄ν¬λ‘œνŒ¨ν„΄μ΄λΌκ³ λ„ λΆˆλ¦¬λŠ” 것듀인데, delegation, double dispatch 같은 것듀을 λ§ν•©λ‹ˆλ‹€. DP에도 쑰금 μ–ΈκΈ‰λ˜μ–΄ 있긴 ν•©λ‹ˆλ‹€. 이런 λ§ˆμ΄ν¬λ‘œνŒ¨ν„΄μ€ μš°λ¦¬κ°€ μ•Œκ²Œ λͺ¨λ₯΄κ²Œ 맀일 μ‚¬μš©ν•˜λŠ” 것듀이고 κ·Έ ν™œμš©λ„κ°€ μ•„μ£Ό λ†’μŠ΅λ‹ˆλ‹€. μ‹€μ œλ‘œ 써보면 μ•Œκ² μ§€λ§Œ, DP의 νŒ¨ν„΄ ν•˜λ‚˜ μ“°λŠ” 일이 그리 ν”ν•œ 게 μ•„λ‹™λ‹ˆλ‹€. λ§ˆμ΄ν¬λ‘œνŒ¨ν„΄μ€ μΌ„νŠΈλ²‘μ˜ SBPP에 잘 λ‚˜μ™€μžˆμŠ΅λ‹ˆλ‹€. μ˜μ–΄λ‘œ 치자면 κ΄€μ‚¬λ‚˜ 쑰동사 같은 κ²ƒλ“€μž…λ‹ˆλ‹€.

그리고, 이런 λ§ˆμ΄ν¬λ‘œνŒ¨ν„΄κ³Ό ν•¨κ»˜, λ¦¬νŒ©ν† λ§μ„ κ³΅λΆ€ν•˜λŠ” 게 μ’‹μŠ΅λ‹ˆλ‹€. λ¦¬νŒ©ν† λ§μ€ νŒ¨ν„΄μ˜ ν•„μš”λΌ λŠλΌκ²Œ ν•΄μ€λ‹ˆλ‹€. (λ§ˆν‹΄ 파울러의 λ¦¬νŒ©ν† λ§μ΄λž€ 책을 μ°Έκ³ ν•˜λ©΄ λ©λ‹ˆλ‹€.)

μš°λ¦¬κ°€ κ°–κ³  μžˆλŠ” μ§€μ‹μ΄λΌλŠ” 것은 ν•œκ°€μ§€ ν‘œν˜„μ–‘μƒ(representation)으둜만 이λ„μ Έ μžˆμ§€ μ•ŠμŠ΅λ‹ˆλ‹€. "사과"λΌλŠ” λŒ€μƒμ„ μŒμ‹μœΌλ‘œλ„, 그림의 λŒ€μƒμœΌλ‘œλ„ 이해할 수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€. μ‹€μ œ νŒ¨ν„΄μ΄ 적용된 "λ‹€μ–‘ν•œ 경우"λΌ μ ‘ν•˜λ„λ‘ ν•˜λΌλŠ” 것이 이런 κ²λ‹ˆλ‹€. 동일 λŒ€μƒμ— λŒ€ν•œ λ‹€μ–‘ν•œ 접근을 μ‹œλ„ν•˜λΌλŠ” 것이죠. μžλ°”λ‘œ κ΅¬ν˜„λœ μ½”λ“œλ„ 보고, C++둜 된 것도 보고, 슀λͺ°ν† ν¬λ‘œ 된 것도 봐야 ν•©λ‹ˆλ‹€. μ„λ Ή "μ˜€λ‘œμ§€ μžλ°”μ±"(μ „ 이런 μ‚¬λžŒλ“€μ„ Javarian이라고 λΆ€λ¦…λ‹ˆλ‹€. Java와 barbarian을 ν•©μ„±ν•΄μ„œ λ§Œλ“  μ‘°μ–΄μ§€μš”. 이런 "ν•˜λ‚˜λ§Œ μ—΄λ‚˜λ¦¬ κ³΅λΆ€ν•˜λŠ” 것"의 병폐에 λŒ€ν•΄μ„œλŠ” μ‘΄ λΈ”λ¦¬μŠ€μ‚¬μ΄μ¦ˆκ°€ C++ Report에 μ“΄ DiversifyλΌλŠ” κΈ°μ‚¬λΌ μ½μ–΄λ³΄μ„Έμš” http://www.research.ibm.com/people/v/vlis/pubs/gurus-99.pdf) 이라고 ν• μ§€λΌλ„μš”. κ·Έλž˜μ•Ό λΉ„λ‘œμ†Œ μžλ°”λ‘œλ„ "상황에 λ§žλŠ”" μ œλŒ€λ‘œ 된 νŒ¨ν„΄μ„ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. νŒ¨ν„΄μ€ κ·Έ κ΅¬ν˜„(implementation)보닀 μ˜λ„(intent)κ°€ 더 μ€‘μš”ν•˜λ‹€λŠ” 사싀을 κΌ­ μžŠμ§€ 말고, μ„λͺ…을 μœ„ν•œ 방편으둜 μ±„μš©λœ ν•œκ°€μ§€ 도식에 μžμ‹ μ˜ μ‚¬κ³ λΌ κ΅¬μ†ν•˜λŠ”
μš°λΌ λ²”ν•˜μ§€ μ•ŠκΈ°λΌ λΉ•λ‹ˆλ‹€.

ν•˜κΈ΄, νŒ¨ν„΄λ„ "λ¬Έμ œν•΄κ²°"을 μœ„ν•œ ν•œκ°€μ§€ λ°©νŽΈμ— μ§€λ‚˜μ§€ μ•Šκ² κ΅°μš”. μ£Όλ³€μ—μ„œ "이 κ²½μš°μ—λŠ” 무쑰건 이 νŒ¨ν„΄μ„ 써야 ν•©λ‹ˆλ‹€"라고 μƒλ–ΌλΌ μ“°λŠ” μ‚¬λžŒμ„ 보면 μ”μ“Έν•œ 기뢄을 감좜 수 μ—†μŠ΅λ‹ˆλ‹€.

ε·₯倫 μ—΄μ‹¬νžˆ ν•˜μ„Έμš”.

--κΉ€μ°½μ€

λ””μžμΈνŒ¨ν„΄ 컀리큘럼:
  1. Design Patterns Explained by Shalloway, and Trott : 졜근 DP κ°œλ‘ μ„œλ‘œ κΈ‰λΆ€μƒν•˜κ³  μžˆλŠ” λͺ…μ €
  2. Design Patterns Java Workbook by Steven John Metsker : DPE λ‹€μŒμœΌλ‘œ λ³Όλ§Œν•œ μ±…μœΌλ‘œ, μŸμ•„μ Έ λ‚˜μ˜€λŠ” ν—ˆμ ‘ν•œ μžλ°” νŒ¨ν„΄ μ±…λ“€κ³ΌλŠ” μ—„μ—°νžˆ 닀름
  3. Refactoring by Martin Fowler : DP 곡뢀 이전에 λ΄μ„œ λ¬Έμ œμ˜μ‹ ν˜•μ„±ν•˜κΈ° (λ§μΉ˜λΌ λ“€λ©΄ λͺ¨λ“  것이 λͺ»μœΌλ‘œ λ³΄μ΄λŠ” 였λ₯˜ νƒˆν”Ό)
  4. DesignPatterns : Gang Of fourκ°€ μ €μˆ ν•œ λ””μžμΈνŒ¨ν„΄μ˜ 바이블
  5. DesignPatternSmalltalkCompanion : GoFκ°€ 였λ₯Έμͺ½ λ‚ κ°œλΌλ©΄ DPSCλŠ” μ™Όμͺ½ λ‚ κ°œ
  6. Pattern Hatching by John Vlissides : DP μ‹¬ν™”ν•™μŠ΅
  7. Smalltalk Best Practice Patterns by Kent Beck : 마이크둜 νŒ¨ν„΄. 개발자의 νƒˆλ¬΄λ“œ
  8. Pattern Languages of Program Design 1,2,3,4 : νŒ¨ν„΄ 컨퍼런슀 λ…Όλ¬Έ λͺ¨μŒμ§‘μœΌλ‘œ λŒ€λΆ€λΆ„μ€ μΈν„°λ„·μ—μ„œ ꡬ할 수 있음
  9. PatternOrientedSoftwareArchitecture 1,2 : 아킀텍좰 νŒ¨ν„΄ λͺ¨μŒ
  10. Concurrent Programming in Java by Doug Lea
  11. Patterns of Software by Richard Gabriel : νŒ¨ν„΄μ— κ΄€ν•œ μ€‘μš”ν•œ 에세이 λͺ¨μŒ.
  12. Analysis Patterns by Martin Fowler : λΉ„μ§€λ‹ˆμŠ€ 뢄석 νŒ¨ν„΄ λͺ©λ‘
  13. A Timeless Way of Building by Christopher Alexander : ν”„λ‘œκ·Έλž˜λ¨Έλ“€μ΄ κ°€μž₯ 많이 λ³Έ κ±΄μΆ•μ„œμ . νŒ¨ν„΄μ˜ 아버지
  14. A Pattern Language by Christopher Alexander : 상동
  15. Problem Frames by Michael Jackson : Beyond DP(DPλΌ λ„˜μ–΄μ„œ). 사싀 DPλŠ” 더 이상 νŠΈλžœλ””ν•˜μ§€ λͺ»ν•¨. DP의 ν•΄κ²°(solution) 지ν–₯μ‹μ˜ 문제점과 κ·Ήλ³΅λ°©μ•ˆμœΌλ‘œμ„œμ˜ 문제 지ν–₯식 방법

DPλΌ μ²˜μŒ κ³΅λΆ€ν•œλ‹€λ©΄, DPE와 DPJWλΌ RF와 ν•¨κ»˜ λ³΄λ©΄μ„œ μ•žμ„œμ˜ λ‘κΆŒμ„ RF적으둜 독해해 λ‚˜κ°€κΈ°λΌ κΆŒν•©λ‹ˆλ‹€. 이게 된 ν›„μ—λŠ” ~cpp GoF와 DPSCλΌ ν•¨κ»˜ λ³Ό 수 μžˆκ² μŠ΅λ‹ˆλ‹€. μ–‘μžλŠ” μƒν˜Έλ³΄μ™„μ μΈ 면이 κ°•ν•©λ‹ˆλ‹€. 이 μλ˜μ–΄μ„œ SBPPλΌ λ³΄λ©΄ μƒλ‹Ήνžˆ 좩격을 받을 수 μžˆμŠ΅λ‹ˆλ‹€. μŠ€μŠ€λ‘œκ°€ μƒκ°ν•˜κΈ°μ— μ½”λ”© κ²½ν—˜μ΄ λ§Žλ‹€λ©΄ λ‹€λ₯Έ DPμ±… 이전에 SBPPλΌ λ¨Όμ € 봐도 μ’‹μŠ΅λ‹ˆλ‹€.

이 μ •λ„μ˜ 책을 λ΄€λ‹€λ©΄ POSA와 PLOPD λ“±μ—μ„œ μžμ‹ μ΄ 관심이 κ°€λŠ” νŒ¨ν„΄λ“€μ„ μ°Ύμ•„ μ½λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. 그리고 λ™μ‹œμ— μ•Œλ ‰μ‚°λ”μ˜ 원저듀을 κΌ­ μ½κΈ°λΌ κΆŒν•©λ‹ˆλ‹€. μ•Œλ ‰μ‚°λ”λΌ λͺ¨λ₯΄κ³  νŒ¨ν„΄μ„ λ…Όν•˜λŠ” 것은 μΉΈνŠΈλΌ μ½μ§€ μ•Šκ³  μˆœμˆ˜μ΄μ„±μ„ λ…Όν•˜λŠ” 것과 κ°™μŠ΅λ‹ˆλ‹€. κ°€λΈŒλ¦¬μ—˜μ˜ 책이 μ•Œλ ‰μ‚°λ”μ˜ 사상 이해에 λ§Žμ€ 도움이 될 κ²ƒμž…λ‹ˆλ‹€.

--κΉ€μ°½μ€


였늘 짬이 λ‚˜μ„œ 졜근 μš°λ¦¬λ‚˜λΌμ˜ IT μž‘μ§€μ— μ—°μž¬λ˜λŠ” DesignPatterns κ°•μ’ŒλΌ ν›‘μ–΄λ΄€μŠ΅λ‹ˆλ‹€. μ†Œκ°μ€ ν•œλ§ˆλ””λ‘œ, "이건 νŒ¨ν„΄μ„ κ°€λ₯΄μΉ˜λŠ” 게 μ•„λ‹ˆλ‹€!"λΌλŠ” λŠλ‚Œμ΄μ—ˆμŠ΅λ‹ˆλ‹€.

λͺ‡κ°€μ§€ λ¬Έμ œμ μ„ μ§€μ ν•˜μžλ©΄:
  • νŒ¨ν„΄μ„ μ§€λ‚˜μΉ˜κ²Œ 싀체화, μ •ν˜•ν™”ν•΄μ„œ μ„λͺ…ν•œλ‹€.
  • μ»¨ν…μŠ€νŠΈμ™€ λ¬Έμ œμƒν™©μ— λŒ€ν•œ μ„λͺ…이 μ—†κ±°λ‚˜ λΆ€μ±ν•˜λ‹€ -- 결과적으둜 λ¬Έμ œλΌ ν•΄κ²°ν•˜κΈ° μœ„ν•΄ νŒ¨ν„΄μ΄ λ„μž…λœ 것이 μ•„λ‹ˆλΌ νŒ¨ν„΄μ„ 써먹기 μœ„ν•΄ νŒ¨ν„΄μ΄ λ„μž…λœ λŠλ‚Œμ„ μ€λ‹€.
  • λ¬Έμ œμ˜μ‹μ„ λ¨Όμ € ν˜•μ„±ν•˜κ²Œ ν•˜μ§€ μ•Šκ³  닡을 λ¨Όμ € λ³΄μ—¬μ€ λ’€ κ·Έκ±Έ 어디에 써먹을지 κ°€λ₯΄μΉœλ‹€ -- μ™œ 이걸 μ“°λŠ” 게 μ’‹μ€μ§€λŠ” μΌμ–Έλ°˜κ΅¬ 언급이 μ—†λ‹€. λ…μžλŠ” "어린아이가 λ§μΉ˜λΌ λ“€κ³ μžˆλŠ” 였λ₯˜"에 빠질 것이닀.
  • νŒ¨ν„΄μ΄ μ–΄λ–»κ²Œ μƒμ„±λ˜μ—ˆλŠ”μ§€ κ·Έ 과정을 보여주지 λͺ»ν•œλ‹€. 즉, 슀슀둜 νŒ¨ν„΄μ„ λ§Œλ“€μ–΄λ‚΄λŠ” 데에 μ „ν˜€ 도움이 μ•ˆλœλ‹€. (NoSmok:LearnHowTheyBecameMasters)
  • ν•΄λ‹Ή νŒ¨ν„΄μ΄ ν˜„μ‹€μ μœΌλ‘œ κ°€μž₯ 자주 μ“°μ΄λŠ” λ§₯락을 보여주지 λͺ»ν•œλ‹€. λŒ€λΆ€λΆ„μ΄ Toy Problemμ—μ„œ λλ‚œλ‹€.

νŒ¨ν„΄ κ°•μ’ŒλΌ μ§„ν–‰ν•˜μ‹œλŠ” 뢄듀이 μ΅œμ†Œν•œ μ•Œλ ‰μ‚°λ”μ˜ μ €μž‘ ν•œ κΆŒμ΄λΌλ„ μ œλŒ€λ‘œ 읽어봀닀면 이런 λ³‘νλŠ” 없을 것이라 μƒκ°ν•©λ‹ˆλ‹€ -- μ•Œλ ‰μ‚°λ”μ˜ μ €μž‘μ„ 접해보지 λͺ»ν•˜κ³ μ„œ νŒ¨ν„΄μ„ κ°€λ₯΄μΉ˜λŠ” μ‚¬λžŒμ€ 성경을 읽어보지 μ•Šμ€ 전도사와 같을 κ²ƒμž…λ‹ˆλ‹€.

μ•Œλ ‰μ‚°λ”κ°€ The Timeless Way of Building의 λ§ˆμ§€λ§‰μ—μ„œ 무슨 말을 ν•˜λŠ”κ°€μš”?

At this final stage, the patterns are no longer important ...

The patterns have taught you to be receptive to what is real.

--κΉ€μ°½μ€


Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:26
Processing time 0.1309 sec