κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ° (OOP)/Design Pattern
[Design Pattern] Factory Method Pattern
loki d
2021. 9. 4. 22:47
728x90
Factory Method Pattern
ν¨ν΄μ λΆλ₯ : μμ± ν¨ν΄
ν¨ν΄μ λͺ©μ : This pattern defines an interface for creating an object, but let subclasses decide which class to instantiate. Factory method lets a class defer instantiation to the subclasses. – GoF –
ν¨ν΄μ μ μ©
- νμ₯ κ°λ₯ν νλ μμν¬λ₯Ό μ 곡νκ³ μΆμ λ μ¬μ©ν μ μμ
- ꡬν κ΄μ μμ μ΄λ€ μ’ λ₯μ κ°μ²΄λ₯Ό μμ±ν μ§ λμ€μ κ²°μ ν μ μλλ‘ ν΄μ€
- κ°μ μμ νμ μ κ°μ§λ μ¬λ¬ μ’ λ₯μ κ°μ²΄λ₯Ό μμ±ν΄μΌ νλ©°, μ΄λ€μ μ£Όλ‘ μμ νμ μ ν΅ν΄ μ’κ°ν κ²½μ°
- λΆλͺ¨ ν΄λμ€κ° μλλΌ μμ ν΄λμ€κ° μ΄λ€ μ’ λ₯μ κ°μ²΄λ₯Ό μμ±ν μ§ κ²°μ ν νμκ° μμ κ²½μ° (κ°μ²΄κ° has-aλ‘ μ μ§νλ κ²μ μ’ λ₯κ° λ€λ₯Ό μ μμ λ, κ·Έ μ’ λ₯μ κ²°μ μ νμ ν΄λμ€μκ² μμν νμκ° μμ λ)
- κ°μ²΄λ₯Ό μμ±ν΄μΌ νλ€λ κ²μ μμ§λ§ μ΄λ€ μ’ λ₯μ κ°μ²΄λ₯Ό μμ±ν μ§ λͺ¨λ₯Ό κ²½μ°
ν¨ν΄ μ μ© κ°λ₯ μλ리μ€
- μ°νΈμ λ°°μ‘μ ν곡, μ°¨λ, κΈ°μ°¨λ₯Ό μ΄μ©ν μ μλ€.
- μ°νΈκ³Ό κ΄λ ¨λ λͺ¨λ κΈ°λ₯μ΄ Mail ν΄λμ€μ μ μλμ΄ μμ λ, μ΄ ν΄λμ€λ₯Ό μμλ°λ ν곡μ°νΈ, μ§μμ°νΈμ μ μνμ¬ λ°°μ‘μ νμν κ°μ²΄ μμ±λ§ λ΄λΉνλλ‘ ν μ μμ
ν¨ν΄μ μ°Έμ¬μ
- μμ±μ(creator) : ν©ν 리 λ©μλκ° μ μΈ λ° μ μλλ μΆμ νμ
- ꡬ체μ μμ±μ(concrete creator) : ν©ν 리 λ©μλλ₯Ό μ¬μ μνμ¬ μ€μ κ°μ²΄λ₯Ό μμ±νλ ν΄λμ€
- μ ν(product) : μμ±λ κ°μ²΄λ€μ μΆμ ν΄λμ€ λλ interface
- ꡬ체μ μ ν ν΄λμ€(concrete product) : μ€μ μμ±λ κ°μ²΄μ ν΄λμ€
ν¨ν΄μ ꡬ쑰
μ°Έμ¬μκ° νλ ₯
- μμ°μ ν΄λμ€λ interfaceλ κ°μ²΄μ μμ±μ νμ ν΄λμ€μ μμν¨
- λ³΄ν΅ μν μ μ΄λ¦κ³Ό λ¬λ¦¬ κ°μ²΄μ μμ±μ΄ μμ°μμ ν΅μ¬ μν μ΄ μλ
- ꡬ체μ μμ°μλ λ§€λ² κ°μ²΄λ₯Ό μμ±ν΄μΌ νλ κ²μ μλλ©°, κ°μ²΄ νκ³Ό κ°μ΄ λ€μν μμ± λ‘μ§μ μ¬μ©ν μ μμ
ννμ ꡬν
- μμ±λ λͺ¨λ μ’ λ₯μ μ νμ΄ κ°μ μΆμ νμ (μ ν μ°Έμ¬μ)μ μ¬μ©νμ¬μΌ ν¨
ν¨ν΄μ μ₯λ¨μ
- μ₯μ
- κ°μ²΄λ₯Ό μ§μ μμ±νλ κ²λ³΄λ€ κ°μ²΄λ₯Ό μμ±νλ μΆμνλ λ©μλλ₯Ό μ΄μ©νλ κ²μ΄ λμ± μ μ°ν λ°©λ²μ΄λ©°, μ΄ ν¨ν΄λ ν©ν 리 λ©μλλΌλ κ²μ μ΄μ©νμ¬ κ°μ²΄λ₯Ό μμ±ν¨
- νμ₯ κ°λ₯ν κ°μ²΄ μμ± νλ μμν¬λ₯Ό λ§λ€ μ μμ μμ°μλ ꡬ체μ μΈ μνμ λν΄ μ νμκ° μμ(ꡬ체μ μμ°μλ ꡬ체μ μνκ³Ό λ°μ νκ² μ°κ²°λ¨)
- ꡬ체μ μμ°μμ μμ§μ±μ λ§€μ° λμ
- λ¨μ
- μλ‘μ΄ μ’ λ₯μ κ°μ²΄λ₯Ό μμ±ν΄μΌ νλ©΄ κΈ°μ‘΄ ꡬ체μ μ ν ν΄λμ€λ₯Ό μμ ν΄μΌ ν μ μμ
- μμ±λλ κ°μ²΄κ° μ ν μΆμ ν΄λμ€λ interfaceλ₯Ό ν΅ν΄ μννκ² μ¬μ©λ μ μμ§ μμΌλ©΄ ν©ν 리 λ©μλ ν¨ν΄μ μ¬μ©μ΄ ν¨κ³Όμ μ΄μ§ λͺ»ν μ μμ
- ꡬ체μ μμ°μ ν΄λμ€μ ꡬ체μ μ ν κ°μλ λ¨λ¨ν μ°κ²°μ λΆκ°νΌ