see also DoWeHaveToStudyDesignPatterns
DPSCλ₯Ό ꡬμ
ν λΆλ€μ΄ μ’ μλ κ²μΌλ‘ 보μ, DPλ₯Ό 곡λΆνλ €λ μμ§μ κ°μ κ² μμ§ μμκΉ νλ μκ°μ "μ‘°κΈ λ¨Όμ 곡λΆν μ¬λ"μΌλ‘μ λͺ κ°μ§ μ‘°μΈμ λλ¦΄κΉ ν©λλ€. (DPSC μ΄μΌκΈ°κ° μλμμΌλ©΄ μ΄λ° κΈ μ°μ§ μμμν
λ°... μ΄κ²λ μΈμ°μ΄λΌλ©΄ μΈμ°μ΄λ€μ)
κΈ°λ³Έμ μΌλ‘λ μ κ΅μ‘μ² νκ³Ό μΈμ΄κ΅μ΅λ‘ , κ·Έλ¦¬κ³ κ³΅λΆλ‘ μμ ν¬κ² λ²μ΄λμ§ μμΌλ―λ‘ μ λ² μμ΄(λ° κΈ°ν) κ°μλ₯Ό λ€μΌμ
¨λ λΆλ€μκ² μ΅μν μ΄μΌκΈ°κ° λ§μ κ²λλ€.
κΈ°λ³Έμ μΌλ‘ "κ΅μ‘μ κ΅μ‘μκ° νΌκ΅μ‘μκ°μκ² μ§μμ κ³ λλ‘ μ λ¬νλ νμκ° μλλλ€. μ§μ ν κ΅μ‘μ νΌκ΅μ‘μμ κ°μΈμ 체νμ κΈ°λ°ν μ νμ λμμμ μΆλ°ν©λλ€. μ λ μ΄λ₯Ό λμμ μν κ΅μ‘μ΄λΌκ³ ν©λλ€."
λ΄κ° μ¬λ¬λΆμκ² "μ£Όμλ¬Έμ κ°λ₯νλ©΄ μ°μ§ μλ κ²μ΄ λ μ’λ€"λΌλ μ΄μΌκΈ°λ₯Ό νμ λ μ΄ λ¬Έμ₯μ νλμ μ¬μ€λ‘ λ°μλ€μ΄κ³ κΈ°μ΅νλ©΄ κ·Έ μμ λΉμ₯μλ νμ΅μ΄ μΌμ΄λμ§ μλλ€κ³ λ΄
λλ€. λμ μ¬λ¬λΆμ΄ μ°¨νμ μ¬λ¬κ°μ§ κ²½νμ νλ©΄μλ μ΄ νλλ₯Ό λμΉμ§ μκ³ μλ€κ° μ΄λ μκ°μκ°, "μ!!! κ·Έλ μ£Όμλ¬Έμ μ°μ§ μλκ² μ’κ² κ΅¬λ!!"νκ³ μκ°νλ μκ°, λ°λ‘ κ·Έ μμ μ νμ΅μ΄, κ΅μ‘μ΄ μ΄λ€μ§λ κ²μ
λλ€. μ΄λ κΈ°λ³Έμ μΌλ‘ 컨μ€νΈλν°λΉμ¦μ΄λΌκ³ νλ μμμ μ λΉκ³³μ€ν€μ μ² νμ λ°λ₯΄λ κ²μ΄μ£ . μ§μμ΄λ μΈλΆμμ μ
λ ₯λ°λ κ²μ΄ μλκ³ , κ·Έκ²μ λν λͺ¨λΈμ νμ΅μ μ€μ€λ‘κ° λ΄λΆμμ μΆμ‘°(construct)ν λ νλν μ μλ κ²μ΄λΌλ μ² νμ΄μ£ .
μ κ° μΌμ μ μΌλ κΈμ μΈμ©νκ² μ΅λλ€:
''μ΅μν μΈμ΄ κ΅μ‘μ μμ΄μλ νΌκ΅μ‘μμ "κΈ°μ¨μ μ°¬" λμκ° μμΌλ©΄ λ³λ‘ ν¨κ³Όλ₯Ό λ³Ό μ μλ€λ κ² μ μκ°μ
λλ€. λͺ¨λ₯΄λ μ¬λμ μμ λͺ¨λ₯΄κΈ° λλ¬Έμ μμ§ κ³΅λΆν νμκ° μμΌλ©° μλ μ¬λμ μ΄λ―Έ μκΈ° λλ¬Έμ λ€μ 곡λΆν νμκ° μμ΅λλ€. μλ κ²λ λͺ¨λ₯΄λ κ²λ μλκ³ μ΄μ€κ°ν μνμμ λλ¦μ λ¬Έμ μμμ κ°κ³ μλ κ²½μ°, μ΄ μ¬λμκ² λκ΅°κ°κ° "μ λλ‘ λ" νλλ§λλ§ λμ Έμ€λ κ·Έλ μ΄κ°μ§ μ€λ¬΄κ°μ§ μΌμ¬μ²λ¦¬λ‘ μννκ³ μ΄ν΄νλ©° μλ°μ μΈ νμ΅μ νκ² λ©λλ€.
μμ»¨λ° μμ μ μΆμ λͺ©νμ λν΄ λ¬Έμ μμ μ‘°μ°¨λ νμ±λμ§ μμ μ¬λμκ²λ λ°±λ μ’ κ΅λ, μ² νμ΄λ λ λ€μ΄ λ΄μΌ νμκ³ μ λλ€λ§, μ΄λ―Έ κ°λ³μ μ΄κ³ ꡬ체μ μΈ μ²΄νλ€μ ν΅ν΄ μμ λ§μ λ¬Έμ μμμ λλ¦λλ‘ νμ±ν μ¬λμ 곡λΆνκ³ λ¨μ λ§μ λ€μ μ€λΉκ° λ μ¬λμ λλ€.
μλ΄μ΄ μΈμμ λͺ¨λ "κ²"λ€μ λ³΄κ³ μΌμΌμ΄ μ΄λ¦μ λΆμλ κ²μ, 보μκΈ° λλ¬Έμ κ°λ₯νλ κ²μ λλ€. κ·Έλ¬λ μ°λ¦¬λλΌ κ΅μ‘μ λλΆλΆμ horseλ₯Ό 보기 μ΄μ μ horseλΌλ μ΄λ¦μ κ°λ₯΄μΉκ³ , λ¬Έμ μμμ μΈλΆμμ νμμκ² μ£Όμ νλ € ν©λλ€. κ·Έλ¬ν μ§μμ νμμ±κΉμ§λ μκΈ°νκ³ , μ΄ν΄νλλ‘ κ°μνλ κ²μ΄μ§μ.
μ λ ννλ€μ΄ λμ μ²μ μ΄λ€ νλ¬Έμ 곡λΆν λ μ²μλΆν° μ΅κ³ μ λκ°μκ² κ°μ κ°μλ₯Ό λ£λλ€λ κ° νλ κ²μ κ·Έλ€μ§ κΆνμ§ μμ΅λλ€ -- κ°μμμ νΌκ°μμμ λ Έλ ₯μ λΉν΄ ν¬κ² λμμ΄ λμ§ μμ΅λλ€. μ΄κ²μ κ²°κ΅, μ€μ€λ‘κ° μμ λ§μ λ¬Έμ μμμ κ°κ³ μμ΄μΌ νλ©°, λν κ·Έ λ¬Έμ μμμ μ² μ ν μμ μ μΆμμ μ°λ¬ λμμΌ νλ κ²μ΄κΈ° λλ¬Έμ λλ€. κ·Έ μ΄νμ νλ₯ν μ μλ€μ λ§λλ©΄ μ λ§ λΉμ½μ μΈ, κ³λ¨μ μλμΉΈ λ°μ΄μ€λ₯΄λ λ°μ μ ν μ μμ΅λλ€.
κ²°κ΅ μ νλ°°κ° νλ¬ μ λλ§μ κ·Έλ κ² κ»μ§μ κΉ¨κ³ λμ€λ λ°μ μ ν μ μμλ κ²μ κ·Έ μμ μ΄ λ "λ°μ±μ μΈ νμ΅"μ ν΄μ€λ©° μκΈ° μμ΄ κ³΅λΆμ λν λ¬Έμ μμμ νμ±νκ³ κΆλ¦¬ν΄ μκΈ° λλ¬Έμ λλ€. λ¬Όλ‘ μ λμ μΈ μμ΄ κ³΅λΆλ(input)μ΄ μ΄λ―Έ μ΄λ μ λ λμ΄ μμκΈ° λλ¬Έμ΄κΈ°λ ν©λλ€. λ¬ΌκΈΈμ μ΄μ΄μ€ "μ΄μ "κ° νμνμλκ±°μ£ . μ΄λ―Έ λ¬Όμ μ΄λ μ λ μ°¨ μμκ³ μ.
......
κΆλ²μμ μ£Όλ¨Ήμ λν΄ λ¬ν΅ν λμ¬κ° "κΆμ λ΄μ§λ₯΄λ λ²"μ λν κ·μΉλ€μ μ 리λ₯Ό ν΄μ μ μ μμ λκ°ν΅ μμ μ무리 μ€μ λ£λλ° μ±κ³΅μ νλ€ κ·Έ μ μκ° λμ¬λ§νΌμ μ£Όλ¨Ήμ΄ λκ°λ¦¬λ λ§λ¬΄ν©λλ€. "κΆμ λ΄μ§λ₯΄λ λ²"μ μ μΆν΄ λ΄κΈ°κΉμ§ κ·Έ μ€μΉμ΄ κ²ͺμ κ³Όμ μ μ μλ μμ£€ν μ λΉΌλ¨Ήκ³ μκΈ° λλ¬Έμ λλ€. μμ 'λͺΈ'μ΄ λ§λ€μ΄ μ§μ§ μμ κ²μ΄μ§μ. μ μλ λ§λΉ μΈκΈ°μμλΆν° ν΄μ, λ¬Ό κΈ·κΈ°, κΈ°ν λ±λ±μ λͺΈμ μλ ¨μ κ³Όμ μ κ²ͺμ΄μΌλ§ νκ³ , κ·Έ μ μκ° μ€μΉμ΄ μ 리ν κ·Έ κ·μΉμ μΌλ ¨μ μλΌμ μΉκ³ μΆ€μ μΆλ©° κΈ°μ¨μ λμλ₯Ό ν μ μμ μ λλ‘ κ³Όμ μ μΆμ μ΄ μ΄λ£¨μ΄μ§ μ΄νμμΌ λΉλ‘μ μ§μ ν 'κ°λ₯΄μΉ¨'μ΄ μ΄λ€μ§λ κ²μ΄λ©°, μ²μΆμ΄λμ κ°λ₯μ±λ μκ°ν΄ λ³Ό μ μλ κ²μ λλ€.
......''
μ΄λ° λμλΌλ κ²μ νμ΅μ μμ λ§μ 컨ν
μ€νΈμ λ¬Έμ μμμ λ°νμΌλ‘ ν κ²μ
λλ€. μ°λ¦¬λ λ§μ κ²½μ°, μ΄λ€ μ§μκ³Ό λμμ κ·Έ μ§μμ νμμ±κΉμ§λ μ§μνν΄μ μΈλΆμμ μ£Όμ
μ λ°μ΅λλ€. νμ§λ§ μ§μ 체νλ μ§μμ μν΄μλ μ€μ€λ‘κ° μ΄λ―Έ λ¬Έμ μμμ κ°κ³ μμ΄μΌ ν©λλ€. μμ»¨λ° μμ μ μΆμ λͺ©νμ λν΄ λ¬Έμ μμ μ‘°μ°¨λ νμ±λμ§ μμ μ¬λμκ²λ λ°±λ μ’ κ΅λ, μ² νμ΄λ λ λ€μ΄ λ΄μΌ νμκ³ μ λλ€λ§, μ΄λ―Έ κ°λ³μ μ΄κ³ ꡬ체μ μΈ μ²΄νλ€μ ν΅ν΄ μμ λ§μ λ¬Έμ μμμ λλ¦λλ‘ νμ±ν μ¬λμ 곡λΆνκ³ λ¨μ λ§μ λ€μ μ€λΉκ° λ μ¬λμ λλ€.
μλ΄μ΄ μΈμμ λͺ¨λ "κ²"λ€μ λ³΄κ³ μΌμΌμ΄ μ΄λ¦μ λΆμλ κ²μ, 보μκΈ° λλ¬Έμ κ°λ₯νλ κ²μ λλ€. κ·Έλ¬λ μ°λ¦¬λλΌ κ΅μ‘μ λλΆλΆμ 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λ‘ μ΄μλΌ. λ¨μνλ©΄μλ μμ£Ό κ°λ ₯ν λ§ μλλκΉ.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.''
μ΄λ€ νΉμ λ¬Έμ₯ ꡬ쑰(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)κ° λ μ€μνλ€λ μ¬μ€μ κΌ μμ§ λ§κ³ , μ€λͺ
μ μν λ°©νΈμΌλ‘ μ±μ©λ νκ°μ§ λμμ μμ μ μ¬κ³ λ₯Ό ꡬμνλ
μ°λ₯Ό λ²νμ§ μκΈ°λ₯Ό λΉλλ€.
μ°λ₯Ό λ²νμ§ μκΈ°λ₯Ό λΉλλ€.
νκΈ΄, ν¨ν΄λ "λ¬Έμ ν΄κ²°"μ μν νκ°μ§ λ°©νΈμ μ§λμ§ μκ² κ΅°μ. μ£Όλ³μμ "μ΄ κ²½μ°μλ 무쑰건 μ΄ ν¨ν΄μ μ¨μΌ ν©λλ€"λΌκ³ μλΌλ₯Ό μ°λ μ¬λμ 보면 μμΈν κΈ°λΆμ κ°μΆ μ μμ΅λλ€.
ε·₯倫 μ΄μ¬ν νμΈμ.
--κΉμ°½μ€
λμμΈν¨ν΄ 컀리νλΌ:
- Design Patterns Explained by Shalloway, and Trott : μ΅κ·Ό DP κ°λ‘ μλ‘ κΈλΆμνκ³ μλ λͺ
μ
- Design Patterns Java Workbook by Steven John Metsker : DPE λ€μμΌλ‘ λ³Όλ§ν μ±
μΌλ‘, μμμ Έ λμ€λ νμ ν μλ° ν¨ν΄ μ±
λ€κ³Όλ μμ°ν λ€λ¦
- Refactoring by Martin Fowler : DP κ³΅λΆ μ΄μ μ λ΄μ λ¬Έμ μμ νμ±νκΈ° (λ§μΉλ₯Ό λ€λ©΄ λͺ¨λ κ²μ΄ λͺ»μΌλ‘ 보μ΄λ μ€λ₯ ννΌ)
- DesignPatterns : Gang Of fourκ° μ μ ν λμμΈν¨ν΄μ λ°μ΄λΈ
- DesignPatternSmalltalkCompanion : GoFκ° μ€λ₯Έμͺ½ λ κ°λΌλ©΄ DPSCλ μΌμͺ½ λ κ°
- Pattern Hatching by John Vlissides : DP μ¬ννμ΅
- Smalltalk Best Practice Patterns by Kent Beck : λ§μ΄ν¬λ‘ ν¨ν΄. κ°λ°μμ ν무λ
- Pattern Languages of Program Design 1,2,3,4 : ν¨ν΄ 컨νΌλ°μ€ λ
Όλ¬Έ λͺ¨μμ§μΌλ‘ λλΆλΆμ μΈν°λ·μμ ꡬν μ μμ
- PatternOrientedSoftwareArchitecture 1,2 : μν€ν
μΆ° ν¨ν΄ λͺ¨μ
- Concurrent Programming in Java by Doug Lea
- Patterns of Software by Richard Gabriel : ν¨ν΄μ κ΄ν μ€μν μμΈμ΄ λͺ¨μ.
- Analysis Patterns by Martin Fowler : λΉμ§λμ€ λΆμ ν¨ν΄ λͺ©λ‘
- A Timeless Way of Building by Christopher Alexander : νλ‘κ·Έλλ¨Έλ€μ΄ κ°μ₯ λ§μ΄ λ³Έ 건μΆμμ . ν¨ν΄μ μλ²μ§
- A Pattern Language by Christopher Alexander : μλ
- Problem Frames by Michael Jackson : Beyond DP(DPλ₯Ό λμ΄μ). μ¬μ€ DPλ λ μ΄μ νΈλλνμ§ λͺ»ν¨. DPμ ν΄κ²°(solution) μ§ν₯μμ λ¬Έμ μ κ³Ό 극볡방μμΌλ‘μμ λ¬Έμ μ§ν₯μ λ°©λ²
~cpp GoF
μ DPSCλ₯Ό ν¨κ» λ³Ό μ μκ² μ΅λλ€. μμλ μνΈλ³΄μμ μΈ λ©΄μ΄ κ°ν©λλ€. μ΄ μ―€ λμ΄μ SBPPλ₯Ό 보면 μλΉν 좩격μ λ°μ μ μμ΅λλ€. μ€μ€λ‘κ° μκ°νκΈ°μ μ½λ© κ²½νμ΄ λ§λ€λ©΄ λ€λ₯Έ DPμ±
μ΄μ μ SBPPλ₯Ό λ¨Όμ λ΄λ μ’μ΅λλ€.μ΄ μ λμ μ±
μ λ΄€λ€λ©΄ POSAμ PLOPD λ±μμ μμ μ΄ κ΄μ¬μ΄ κ°λ ν¨ν΄λ€μ μ°Ύμ μ½λ κ²μ΄ μ’μ΅λλ€. κ·Έλ¦¬κ³ λμμ μλ μ°λμ μμ λ€μ κΌ μ½κΈ°λ₯Ό κΆν©λλ€. μλ μ°λλ₯Ό λͺ¨λ₯΄κ³ ν¨ν΄μ λ
Όνλ κ²μ μΉΈνΈλ₯Ό μ½μ§ μκ³ μμμ΄μ±μ λ
Όνλ κ²κ³Ό κ°μ΅λλ€. κ°λΈλ¦¬μμ μ±
μ΄ μλ μ°λμ μ¬μ μ΄ν΄μ λ§μ λμμ΄ λ κ²μ
λλ€.
--κΉμ°½μ€
- LearningGuideToDesignPatterns - κ°κ°μ ν¨ν΄ νμ΅μμ κ΄λ ¨ Article.
- GofStructureDiagramConsideredHarmful - κ΄λ ¨ Article.
μ€λ μ§¬μ΄ λμ μ΅κ·Ό μ°λ¦¬λλΌμ IT μ‘μ§μ μ°μ¬λλ DesignPatterns κ°μ’λ₯Ό νμ΄λ΄€μ΅λλ€. μκ°μ νλ§λλ‘, "μ΄κ±΄ ν¨ν΄μ κ°λ₯΄μΉλ κ² μλλ€!"λΌλ λλμ΄μμ΅λλ€.
λͺκ°μ§ λ¬Έμ μ μ μ§μ νμλ©΄:
- ν¨ν΄μ μ§λμΉκ² μ€μ²΄ν, μ ννν΄μ μ€λͺ
νλ€.
- 컨ν
μ€νΈμ λ¬Έμ μν©μ λν μ€λͺ
μ΄ μκ±°λ λΆμ‘±νλ€ -- κ²°κ³Όμ μΌλ‘ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ ν¨ν΄μ΄ λμ
λ κ²μ΄ μλλΌ ν¨ν΄μ μ¨λ¨ΉκΈ° μν΄ ν¨ν΄μ΄ λμ
λ λλμ μ€λ€.
- λ¬Έμ μμμ λ¨Όμ νμ±νκ² νμ§ μκ³ λ΅μ λ¨Όμ 보μ¬μ€ λ€ κ·Έκ±Έ μ΄λμ μ¨λ¨Ήμμ§ κ°λ₯΄μΉλ€ -- μ μ΄κ±Έ μ°λ κ² μ’μμ§λ μΌμΈλ°κ΅¬ μΈκΈμ΄ μλ€. λ
μλ "μ΄λ¦°μμ΄κ° λ§μΉλ₯Ό λ€κ³ μλ μ€λ₯"μ λΉ μ§ κ²μ΄λ€.
- ν¨ν΄μ΄ μ΄λ»κ² μμ±λμλμ§ κ·Έ κ³Όμ μ 보μ¬μ£Όμ§ λͺ»νλ€. μ¦, μ€μ€λ‘ ν¨ν΄μ λ§λ€μ΄λ΄λ λ°μ μ ν λμμ΄ μλλ€. (
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. |
--κΉμ°½μ€