β ν¨ν΄μ΄λ?
-
ν¨ν΄μ μ¬μ μ μλ―Έλ βμΌμ ν ννλ μμ λλ μ νμ΄ λ°λ³΅λλ κ²β
-
ν¨ν΄μ λ°λͺ νλ κ²μ΄ μλλΌ λ°κ²¬νλ κ²μ΄λ€.
-
곡νλΆμΌμμ μ²μμΌλ‘ ν¨ν΄μ κ°λ μ λμ ν λΆμΌλ 건μΆκ³΅ν
-
κ°λ° λΆμΌμμμ ν¨ν΄μ λ§μ μ¬λμ΄ κ²ͺμ λ¬Έμ μ κ³Ό ν΄κ²°λ°©λ²μ μ 리ν΄λ κ²μ μλ―Έ
-
μ¦, ν¨ν΄μ λ¬Έμ λ₯Ό ν΄κ²°νλ κ³Όμ μ μΌλ°νν κ²μ΄λΌκ³ λ³Ό μ μλ€
-
λμμΈ ν¨ν΄μ ꡬλ³νλ κΈ°μ€μ κ°κ°μ ν¨ν΄μ΄ μ΄λ€ κ΄μ¬μ¬λ₯Ό κ°μ§κ³ λ¬Έμ λ₯Ό ν΄κ²°νλ € νλκ° μ λν κ²μ΄λ€. ν¨ν΄μ μλμ λͺ©μ μ λ°λΌ λ¬λΌμ§λ―λ‘ μ μ ν ν¨ν΄μ μ μ©νκΈ° μν΄μλ μλμ λͺ©μ μ μ νμ νλ κ²μ΄ μ€μνλ€.
π₯ μννΈμ¨μ΄ 곡ν
μ΄λ¬ν ν¨ν΄μ μ리λ μννΈμ¨μ΄ 곡ν λΆμΌμ λμ λκΈ° μμνλ€. μννΈμ¨μ΄μ μΈ λ¬Έμ λ₯Ό μ½λλ‘ κ΅¬νν λ μ μ©νλ ν΄κ²° λ°©λ²μ ν¨ν΄ννμ¬ μ 리ν κ²μ΄λ€.
μ²μμΌλ‘ μννΈμ¨μ΄ 곡νμ λμ λ λΆλΆμ κ°μ²΄μ§ν₯ κ°λ°λ‘, μννΈμ¨μ΄ κ°λ° λ°©λ²λ‘ μ΄λ€. κ°μ²΄μ§ν₯μ ν° νλ‘μ νΈ κ°λ°κ³Ό μ μ§λ³΄μλ₯Ό λ³΄λ€ μ½κ² νκΈ° μν΄ λμ λ κ°λ° λ°©λ²λ‘ μ΄λ€. μ΅κ·Ό νλ‘κ·Έλ¨λ€μ΄ λνν, λΆμ νλλ©΄μ μ μ°¨μ§ν₯ κ°λ° λ°©λ²λ‘ μμ κ°μ²΄μ§ν₯ κ°λ° λ°©λ²λ‘ μΌλ‘ λΉ λ₯΄κ² μ΄λνκ³ μλ€. λμμΈ ν¨ν΄μ κ°μ²΄μ§ν₯ κ°λ°λ²μ΄ μΈκΈ°λ₯Ό μ»μΌλ©΄μ ν¨κ» μ£Όλͺ©μ λ°μλ€.
λ§μ νλ‘κ·Έλλ¨Έκ° μννΈμ¨μ΄ κ°λ° λΆμΌμμ νΉμ λ¬Έμ λ₯Ό μ μ¬ν μ νμΌλ‘ ν΄κ²°νλ€λ κ²μ μκ² λμκ³ , ν΄κ²°κ³Όμ μμ λ°κ²¬λ λ°©λ²λ€μ ν¨ν΄ννμ¬ κ·μ νκΈ° μμνλ€. λμμΈ ν¨ν΄μ κ°μ²΄μ§ν₯ ꡬν λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ λμ λμμΌλ©° ν΄κ²°λ°©λ²μ μ¬μ¬μ©νλ κ²μ΄λΌκ³ λ³Ό μ μλ€.
- κ°μ μΉν₯ κ°λ°μμ λμμΈ ν¨ν΄μ΄ ν΄κ²°νλ μ£Όμ λ¬Έμ λ κ°μ²΄ κ° κ΄λ‘μ μν΅μ²λ¦¬ λΆλΆμ΄λ€.
- λμμΈ ν¨ν΄μ κ°μ²΄μ§ν₯ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν μΌλ ¨μ μ½λ μ€νμΌλ‘, λμμΈ ν¨ν΄μ μ μ©νκΈ° μν΄μλ κ°μ²΄ μ§ν₯μ μΈ μ½λλ₯Ό μμ±ν μ μλ νλ‘κ·Έλλ° μΈμ΄κ° νμνλ€.
βοΈ λμμΈ ν¨ν΄ μ€κ³ μμΉ
λμμΈ ν¨ν΄ μΈμλ κ°μ²΄μ§ν₯ μ½λ κ°λ°μ κ°κΈμ μ§μΌμΌν μμΉμ΄ μλ€. μμΉλ€μ μκΈμλ₯Ό λ°μ SOLID λΌκ³ λΆλ₯΄κΈ°λ νλ€.
- λ¨μΌ μ± μμ μμΉ(Single Responsibility Principle, SRP)
- κ°λ° νμ μμΉ(Open & Closed Principle, OCP)
- 리μ€μ½ν μΉνμμΉ(Liskov Substitution Principel, LSP)
- μΈν°νμ΄μ€ λΆλ¦¬μ μμΉ(Interface Segregation Principle, ISP)
- μμ‘΄κ΄κ³ μμ μ λ²μΉ(Dependency Inversion Principle, DIP)
μ΄ μμΉλ€μ κ°μ²΄μ§ν₯ μ½λλ₯Ό μμ±νλ λ° λμμ μ£Όμ§λ§, μμ€ν μ κ³ λ €νμ§ μμ μμΉμ μ μ©ν κ²½μ° λΆνμν μΌμ΄ λ°μν μλ μλ€. λ°λΌμ κ°κ°μ μμΉλ€μ μ½λμ λͺ©μ μ λ§κ² μ μ¬μ μμ μ μ©νμ¬ μ¬μ©ν΄μΌ νλ€.
GoF
Gang of Fourμ μ½μλ‘ μλ¦ κ°λ§, 리μ²λ ν¬λ¦, λν μ‘΄μ¨, μ‘΄ λΈλ¦¬μλ°μ€μ μ μμΈ βGoFμ λμμΈ ν¨ν΄β μ κ°λ¦¬ν€λ μ©μ΄μ΄λ€. μ¦, μ²μμΌλ‘ μννΈμ¨μ΄ 곡νμμ μ¬μ©λλ ν¨ν΄μ μ 리ν μ¬λλ€μ λ³μΉμ΄λ€.
GoFλ κ°μ²΄μ§ν₯ λΆμΌμ λ¬Έμ μ μ λΆμν΄ 24κ°μ ν¨ν΄μΌλ‘ λΆλ₯νλ€. κΈ°μ‘΄μ κ°μ μΉν₯ μ€κ³ μ λ°μνλ λ¬Έμ λ€μ μΉ΄νλ‘κ·Έννμ¬ ν¨ν΄μΌλ‘ μ 리ν κ²μ΄λ€. μΉ΄νλ‘κ·Έν λ ν¨ν΄μ μμ€ν μ μ μ§ λ³΄μ λ¬Έμλ₯Ό μμ±ν λ λ§€μ° μ μ©νλ€. λν κ°μ²΄ κ° μνΈμμ©μ΄λ μ€κ³ μλ λ±λ μ½κ² νμΈν μ μλ€.
βοΈ ν¨ν΄μ μμ
24κ°λ‘ λΆλ¦¬λ λμμΈ ν¨ν΄μ 곡ν΅λ 4κ°μ§ μμλ₯Ό κ°μ§λ€
- μ΄λ¦(patrtern name) β 24μ’ λ₯μ λμμΈ ν¨ν΄μ κ°κ° κ³ μ μ μ΄λ¦μ κ°μ§κ³ μλ€. ν¨ν΄μ μ΄λ¦μ ν΅ν΄ ν¨ν΄μ μ©λλ₯Ό μ§κ΄μ μΌλ‘ μ΄ν΄ν μ μλ€.
- λ¬Έμ (problem) β κ° ν¨ν΄μ΄ ν΄κ²°νκ³ μ νλ λ¬Έμ μ΄λ€. λ¬Έμ λ€μ ν¨ν΄ μ μ©μ κ³ λ €ν΄μΌ νλ μμ μ μμνλ€. μ½λμμ ν΄κ²°ν λ¬Έμ μ μ λ°κ²¬ν ν κ·Έμ κ΄λ ¨λ λ°°κ²½μ μ 리νκ³ λ€μν μ μ© μ¬λ‘λ₯Ό μμλ³Ό μ μλ€.
- ν΄λ²(solution) β λ¬Έμ μ μ μΈμνλ€λ©΄ ν΄κ²° λ°©λ²μ μ°ΎμμΌ νλ€. μ΄λ₯Ό μν΄ κ°μ²΄ μμ κ° κ΄κ³λ₯Ό μ 리νκ³ ν¨ν΄μ ν΅ν΄ κ°μ²΄λ€μ μΆμννλ κ³Όμ μ κ±°μΉλ€. λν ν΄κ²°μ μν κ°μ²΄λ₯Ό λμ΄νλ€.
- κ²°κ³Ό(consequence) β λμμΈ ν¨ν΄μ μλ €μ§ λ¬Έμ μ λ€μ ν΄κ²°νλλ° ν¨κ³Όμ μ΄λ€. νμ§λ§ λμμΈ ν¨ν΄μ μ μ©νλ€κ³ ν΄μ λͺ¨λ λ¬Έμ λ₯Ό μλ²½νκ² μ κ±°ν μλ μλ€. ν¨ν΄μ λ§€μ° μ μ©νμ§λ§ κΌ νμν κ²½μ°λ₯Ό μκ°ν΄μ μ μ ν λΆλ°°νμ¬ μ¬μ©ν΄μΌ νλ€.
μ 리
- λμμΈ ν¨ν΄μ (μννΈμ¨μ΄ 곡νμμ) κ°μ²΄μ§ν₯ κ°λ° λ°©λ²λ‘ μμ μμ£Ό λ±μ₯νλ λ¬Έμ λ€μ ν΄κ²°νκΈ° μν΄ λμ λ μ¬μ¬μ© κ°λ₯ν μ루μ μ΄λ€.
- λμμΈ ν¨ν΄μ μ΅μν΄μ§λ€λ©΄ κ³Όκ±°μ μ½λλ μλ‘μ΄ μ½λλ₯Ό νμ΅νλ μκ°μ μ€μΌ μ μλ€. λ°λΌμ ν¨ν΄μ λ¬Έμ ν΄κ²° λ°©λ² μΈμλ κ°λ° λΉμ©κ³Ό μκ°μ μ μ½νλλ° λ§€μ° μ μ©νλ€.
- λμμΈ ν¨ν΄κ³Ό μ²λ¦¬ μ±λ₯μ λ³κ°μ λ¬Έμ μ΄λ€.
- λμμΈ ν¨ν΄μμλ μ½λμ κ°λ μ±κ³Ό μ μ§λ³΄μλ₯Ό μν΄ κ°μ²΄μ λ©μλλ₯Ό λΆλ¦¬νλ©° νΈμΆλ μμ£Ό λ°μνλ€.
- ν¨ν΄μ μ§λμΉκ² μ¬μ©νλ©΄ μ¦μ λ©μλ νΈμΆλ‘ μΈν΄ μ±λ₯μ΄ μ νλ μ μλ€.