π₯οΈ Study Note/Design Patteren
νλ‘ν νμ (ProtoType) ν¨ν΄
{ νλ‘ν νμ μ΄λ? } νλ‘ν νμ ν¨ν΄μ΄λ GoFμ μμ± ν¨ν΄ μ€ νλλ‘, μλ³Έ κ°μ²΄(νλ‘ν νμ )λ₯Ό 볡μ νμ¬ κ°μ²΄λ₯Ό μμ±νλ ν¨ν΄μ΄λ€. { κ²μ κ°λ°μμ νλ‘ν νμ νμ©νκΈ° : λͺ¬μ€ν° λλ μ€ν°νκΈ° } μ κ²μμ 보면 μλ§μ λͺ¬μ€ν°λ€μ΄ λλ μμ±λμ΄ μλ€. μ΄λ° λͺ¬μ€ν° μμ± μ½λλ₯Ό μ΄λ»κ² νλ©΄ κ°λ¨νκ² μμ±ν μ μμκΉ? λͺ¬μ€ν° μ€ν¬λμ νλ‘ν νμ μΌλ‘ μ¬μ©ν λͺ¬μ€ν° κ°μ²΄λ₯Ό λ±λ‘ν΄λκ³ λ³΅μ (Clone)νμ¬ κ²μ μλ μμ λ°°μΉ μν€λ©΄ λμ΄λ€. νλ‘ν νμ ν¨ν΄μ μλ³Έ κ°μ²΄λ₯Ό 볡μ¬ν λ νλ‘ν νμ μ ν΄λμ€ λΏλ§ μλλΌ μνλ κ°μ΄ 볡μ νλ€. μ΄ λ§μ λͺ κ°μ μμ±μ λ³κ²½νλ κ²λ§μΌλ‘λ νλμ νλ‘ν νμ μμ λ€μν μ’ λ₯μ κ°μ²΄λ₯Ό μμ±ν μ μλ€λ κ²μ΄λ€. μλ₯Ό λ€μ΄ μ λλ©μ΄μ μ λ³΄λ§ λ°κΏ λ€λ₯Έ μΈνμ κ°μ§ λͺ¬μ€..
κ΄μ°°μ(Observer) ν¨ν΄
κ΄μ°°μ ν¨ν΄μ GoF ν¨ν΄ μ€μμλ κ°μ₯ λ리 μ¬μ©λκ³ μ μλ €μ‘μ§λ§, μΈμμ λ±μ§κ³ μ΄μκ°λ κ²μ κ°λ°μμκ²λ μν μ²μ λ£λ μ΄μΌκΈ°μΌ μλ μλ€. { κ΄μ°°μ ν¨ν΄μ΄λ? } κ΄μ°°μ ν¨ν΄μ GoFμ νμ ν¨ν΄ μ€ νλλ‘, ν κ°μ²΄μ μνκ° λ³ννλ©΄ κ°μ²΄μ κ΄μ°°μλ‘ λ±λ‘λμ΄ μλ λ€λ₯Έ κ°μ²΄λ€μκ² λ³νλ μνλ₯Ό μ λ¬νλ ν¨ν΄μ΄λ€. μ£Όλ‘ λΆμ° μμ€ν κ°μ μ΄λ²€νΈλ₯Ό μ챕λ°μ(Publish)νκ³ , μ΄λ₯Ό μμ (Subscribe)ν΄μΌ ν λ μ΄μ©νλ€. κ΄μ°°μ ν¨ν΄μ MVC(Model View Controller) ꡬ쑰μ κΈ°λ°μ΄λ€. μλ°μ EventListenerλ C#μ delegateμ κ°μ΄ κ°μ λͺ¨λ OOP μΈμ΄μμλ μ체μ μΌλ‘ κ΄μ°°μ ν¨ν΄μ μ§μνλ€. { κ²μ κ°λ°μμ κ΄μ°°μ ν¨ν΄ νμ©νκΈ° : μ μ μμ€ν }..
κ²½λ(FlyWeight) ν¨ν΄
{ κ²½λ ν¨ν΄μ΄λ? } κ²½λ ν¨ν΄μ GoFμ ꡬ쑰 ν¨ν΄ μ€ νλλ‘, μΈμ€ν΄μ€κ° νμν λλ§λ€ λ§€λ² μμ±νλ κ²μ΄ μλκ³ κ°λ₯ν 곡μ ν΄μ μ¬μ©ν¨μΌλ‘μ¨ λ©λͺ¨λ¦¬λ₯Ό μ μ½νλ ν¨ν΄μ΄λ€. λ€μμ μ μ¬ κ°μ²΄λ₯Ό μμ±νκ±°λ μ‘°μν λ μ μ©νκ² μ¬μ©ν μ μλ€. λ μμΈν μ€λͺ νμλ©΄ κ²½λ ν¨ν΄μ ν κ°μ κ³ μ μνλ₯Ό λ€λ₯Έ κ°μ²΄μμ 곡μ νκ² λ§λ€μ΄ λ©λͺ¨λ¦¬ μ¬μ©λμ μ€μΈλ€. - κ³ μ μν (intrinsic state): μ μ¬ κ°μ²΄λ€μ λ°μ΄ν° κ°μ΄ κ°μμ 곡μ ν μ μλ λ°μ΄ν° - μΈλΆ μν (extrinsic state): μ μ¬ κ°μ²΄λ€μ λ°μ΄ν° κ°μ΄ μλ‘ λ¬λΌμ 곡μ ν μ μλ λ°μ΄ν° { κ²μ κ°λ°μμ κ²½λ ν¨ν΄ νμ©νκΈ° : λ무 ν΄λμ€ μ€κ³νκΈ° } κ²μ μλ μμ λ€μμ λλ¬΄κ° μλ€. κ° λ무λ€μ ꡬμ±νλ λ°μ΄ν°λ λ€μκ³Ό..
λͺ λ Ή(Command) ν¨ν΄
{ λͺ λ Ή ν¨ν΄μ΄λ? } λͺ λ Ή ν¨ν΄μ GoFμ νμ ν¨ν΄ μ€ νλλ‘, μμ²(λͺ λ Ή)μ κ°μ²΄μ ννλ‘ μΊ‘μννμ¬ μ¬μ΄μ©νκ±°λ μ·¨μν μ μλλ‘ μμ²μ νμν μ 보λ₯Ό μ μ₯νκ±°λ λ‘κ·Έμ λ¨κΈ°λ ν¨ν΄μ΄λ€. λ κ°λ¨νκ² λ©μλ νΈμΆμ κ°μ²΄λ‘ κ°μΌ ννμ΄λ€. μ½λ°±μ κ°μ²΄ μ§ν₯μ μΌλ‘ μ€κ³νλ€κ³ μκ°νλ©΄ μ’λ€. μμ²μ μ¬μ©λλ κ°μ’ λͺ λ Ήμ΄λ€μ μΆμ ν΄λμ€μ ꡬ체 ν΄λμ€λ‘ λΆλ¦¬νμ¬ λ¨μννλ€. { κ²μ κ°λ°μμ λͺ λ Ή ν¨ν΄ νμ©νκΈ° : μΊλ¦ν° μ‘°μ } κ²μ κ°λ°μ λ€μν λΆλΆμμ λͺ λ Ή ν¨ν΄μ νμ©ν μ μκ² μ§λ§, 'λͺ λ Ή' νλ©΄ κ°μ₯ λ¨Όμ μκ°λλ 컨νΈλ‘€λ¬μ μ λ ₯(λͺ λ Ή)μ λ°λΌ νλ μ΄μ΄λ₯Ό μμ§μ΄λ λ‘μ§μ λͺ λ Ή ν¨ν΄μΌλ‘ ꡬνν΄λ³΄μ. λͺ λ Ή ν¨ν΄μ μ μ©νκΈ° μ μ½λ void CInputHandler::HandleInput() { i..
λμμΈ ν¨ν΄μ΄λ?
{ λμμΈ ν¨ν΄μ΄λ? } μννΈμ¨μ΄λ₯Ό μ€κ³ν λ νΉμ λ§₯λ½μμ μμ£Ό λ°μνλ κ³ μ§μ μΈ λ¬Έμ λ€μ μ¬μ©ν ν μ μλ μ νμ ν΄κ²° λ°©μμ λ§νλ€. λμμΈ ν¨ν΄μ λ¬Έμ λ° λ°°κ²½, μ€μ μ μ© μ¬λ‘, μ¬μ¬μ©μ΄ κ°λ₯ν μν μ½λ λ±μΌλ‘ ꡬμ±λμ΄ μλ€. “λ°ν΄λ₯Ό λ€μ λ°λͺ νμ§ λ§λΌ(Don’t reinvent the wheel)” λΌλ λ§κ³Ό κ°μ΄, κ°λ° κ³Όμ μ€μμ λ¬Έμ κ° λ°μνλ©΄ μλ‘ ν΄κ²°μ± μ ꡬμνλ κ²λ³΄λ€ λ¬Έμ μ ν΄λΉνλ λμμΈ ν¨ν΄μ μ°Έκ³ νμ¬ μ μ©νλ κ²μ΄ λ ν¨μ¨μ μ΄λ€. GoFμ λμμΈ ν¨ν΄ μ νμ λ°λΌ μμ± ν¨ν΄ 5κ°, ꡬ쑰 ν¨ν΄ 7κ°, νμ ν¨ν΄ 11κ° μ΄ 23κ°μ ν¨ν΄μΌλ‘ ꡬμ±λλ€. { λμμΈ ν¨ν΄ μ₯λ¨μ } μ₯μ λ²μ©μ μΈ μ½λ© μ€νμΌλ‘ μΈν΄ ꡬ쑰 νμ μ΄ μ©μ΄νλ€. κ°μ²΄ μ§ν₯ μ€κ³ λ° κ΅¬νμ μμ°μ±μ λ..