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.0489 sec