Abstract Factory(31) ¶
ABSTRACT FACTORY(DP 87)
Intent ¶
μ°κ΄λ νΉμ μμ‘΄μ μΈ κ°μ²΄λ€μ μ§ν©μ λ§λ€κΈ° μν μΈν°νμ΄μ€λ₯Ό μ 곡νλ€. ν΄λΌμ΄μΈνΈκ° ꡬ체μ μΈ ν΄λμ€λ€μ λν ꡬ체ν
λ₯Ό νμ§ μκ³ μΆμμ μΌλ‘ μ΄λ€ μνμ μ§ν©(μ¬λ¬ μ’ λ₯μ μλμ°¨λ€)μμ μν(μλμ°¨)μ λ§λ λ€κ³ νμ.
λ₯Ό νμ§ μκ³ μΆμμ μΌλ‘ μ΄λ€ μνμ μ§ν©(μ¬λ¬ μ’ λ₯μ μλμ°¨λ€)μμ μν(μλμ°¨)μ λ§λ λ€κ³ νμ.
Structure ¶
Discussion ¶
ν¨ν΄μ μ€μ λ‘ μμ£Ό κ°λ¨νλ€. λ¬Έμ μν©μ λ§μ λΆλΆλ€μ ν¬ν¨νλ€. Abstract Factory ν¨ν΄μ΄ μ μ©λ μ μλ μμ λ₯Ό 보λλ‘
νμ.
μ°μ 첫째λ‘, μ°λ¦¬λ μ»΄ν¬λνΈμ νμ λΆλΆλ€λ‘ λΆν° λ¨κ³λ³λ‘ μν(μλμ°¨)μ λ§λ€ νμκ° μλ μμ© νλ‘κ·Έλ¨μ λ§λ€μ΄λ³΄μ.
κ·Έκ²μ λͺΈμ²΄, μμ§, λ³μμ₯μΉ, κ·Έλ¦¬κ³ μΉκ° μΉΈλ§μ ν¬ν¨νλ μλμ°¨λ₯Ό λ§λλ κ²μ΄λ€. λμ§Έλ‘, μμ© νλ‘κ·Έλ¨μ κ°μ μνμ
λΆλΆλ€μ μνλ€. μ¦ Ford μλμ°¨λ Ford μμ§κ³Ό λ³μμ₯μΉλ₯Ό κ°μ ΈμΌνλ€. μ΄κ²μ Ford Familyμμ λΆλΆλ€μ΄λ€. μ μ§Έ, μ°λ¦¬λ
μ¬λ¬ partμ familyλ€μ κ°μ§λ€.
Ford parts,Toyota parts,Porsche parts λ±λ±μ΄λ€. μ μ¬ν ν΄λμ€λ€μ΄ ν΄λμ€ κ΅¬μ‘°λ₯Ό ν΅ν΄μ νμ₯λλ€. κ°κ°μ΄ μ λΉν νμ
ꡬ쑰λ₯Ό κ°μ§κ² λλ€. κ°λ Ή CarEngine νμ ꡬ쑰μ μμ§λ€, CarBody ꡬ쑰μ body λ±λ±μ κ°μ§κ² λλ€.
(κ²°κ΅, κ°κ°μ΄ CarEngineμ Base Classλ‘ ν΄μ μμμ ν΅ν΄ Ford Engine,Toyota Engineλ±λ±μΌλ‘ νμ₯λ μ μλ€λ λ§μ΄λ€.)
λ°λΌμ, μ°λ¦¬λ λ€λ₯Έ μ§ν©μ λΆλΆλ€μ μ ννμ§ μκ³ , νλμ μ§ν©(Family)μΌλ‘λΆν° κ°κ°μ μλμ°¨ λΆλΆλ€μ μ½κ² μ»μ μ
μλ λ°©λ²μ΄ νμνλ€. (Toyota μμ§μμλ Ford μλμ°¨κ° μλν μ μλ€.)
κ·Έλ¦¬κ³ λͺ¨λ faimilyμμ κ°μ μ½λλ₯Ό μ¬μ©ν΄μ λΆλΆλ€μ(μμ§,λ³μμ₯μΉ..) μ»λ κ²μ μ¬μ©νλ€.
μ°λ¦¬λ Abstract Factory Patternμ μ΄μ©ν΄μ λκ°μ§ λͺ©νλ₯Ό μ΄λ£° μ μλ€.
(μ 리 : Abstract Factory Patternμ Factory Patternμ μΆμνμν¨ κ²μ΄λ€.Factory Patternμ λͺ©μ μ΄ Base Classλ‘λΆν° μμ
λ μ¬λ¬ μ’ λ₯μ ν΄λμ€λ€ μ€ νλλ₯Ό μ νν μ μλλ‘ ν΄μ£Όλ κ²μ μλ―Ένλ€.
Abstract Factory Patternλ μ¬λ¬ κ°μ Factoryμ€ νλλ₯Ό μ νν μ μλλ‘ ν΄μ£Όλ κ²μ μννλ€. )
μ°λ¦¬λ μλμ κ°μ μλμ°¨μ μλμ°¨ λΆλΆλ€μ ν΄λμ€λ₯Ό κ°μ§κ³ μλ€.
Vechileκ³Ό CarPartλ Object ν΄λμ€μ μλΈ ν΄λμ€μ΄λ€. λ¬Όλ‘ , μ΄ ν΄λμ€ κ΅¬μ‘°λ λ§μ λ¨κ³μμ μ 체μ μΌλ‘ λ¨μνλλ€.
μλμ°¨ νμ¬λ€(Ford)μ μλμ°¨, λͺΈμ²΄, μμ§, μ¬μ§μ΄ μμ§ μ’ λ₯(κ°μλ¦° μμ§ νΉμ λμ € μμ§)λ λͺλͺ λ€λ₯Έ λͺ¨λΈμ κ°μ§κ³ μλ€.
κ·Έλ¬λ―λ‘ μ°λ¦¬κ° μ¬κΈ°μ 보μ¬μ£Όλ κ² λ³΄λ€ νμ€ μΈκ³λ μ’λ λμ μΆμμ κ°μ§κ³ μμ κ²μ΄λ€. νμ§λ§, μ°λ¦¬μ ν¨ν΄ λ¬μ¬λ₯Ό
μ μ©νκΈ°μλ μΆ©λΆν μμ€μ μΆμμ μ 곡νκ³ μλ€.
μ°λ¦¬λ CarPartFactoryλΌλ μΆμ ν©ν 리 ν΄λμ€ μ μλ₯Ό νλ©΄μ ν¨ν΄ ꡬνμ μμνλ€. μ΄κ²μ "ꡬ체μ μΈ ν΄λμ€λ€μ λν
ꡬ체ν μμ΄ κ΄κ³λ νΉμ μμ‘΄μ μΈ κ°μ²΄ μ§ν©μ λ§λ€κΈ° μν μΈν°νμ΄μ€λ₯Ό μ 곡νλ" (Intent λΆλΆμμ μΈκΈν λ΄μ©)
ν΄λμ€μ΄λ€. κ·Έκ²μ μΆμμ μΈ μν μμ± ν¨μλ€(makeCar,makeEngine,makeBody)μ μ μνλ€. κ·Έ λ μ°λ¦¬λ μν μ§ν© λΉ
νλμ ꡬ체μ μΈ ν©ν 리 νμ ν΄λμ€λ₯Ό μ μνλ€. κ°κ°μ νμ ν΄λμ€λ€μ μ λΉν λΆλΆμ λ§λ€κ³ λ°ννκΈ° μν΄μ μν μμ±
ν¨μλ₯Ό μ¬ μ μνλ€. κ·Έλμ μ°λ¦¬λ Objectλ₯Ό μμν μλ‘μ΄ νμ ꡬ쑰λ₯Ό μΆκ°νλ€.
μλμ°¨ λΆλΆ(part) μμ± λ©μλλ₯Ό ꡬννκΈ° μν΄μ, μ°λ¦¬λ μΆμ ν©ν 리 ν΄λμ€λ‘ μμνλ€.
νμ.
μ°μ 첫째λ‘, μ°λ¦¬λ μ»΄ν¬λνΈμ νμ λΆλΆλ€λ‘ λΆν° λ¨κ³λ³λ‘ μν(μλμ°¨)μ λ§λ€ νμκ° μλ μμ© νλ‘κ·Έλ¨μ λ§λ€μ΄λ³΄μ.
κ·Έκ²μ λͺΈμ²΄, μμ§, λ³μμ₯μΉ, κ·Έλ¦¬κ³ μΉκ° μΉΈλ§μ ν¬ν¨νλ μλμ°¨λ₯Ό λ§λλ κ²μ΄λ€. λμ§Έλ‘, μμ© νλ‘κ·Έλ¨μ κ°μ μνμ
λΆλΆλ€μ μνλ€. μ¦ Ford μλμ°¨λ Ford μμ§κ³Ό λ³μμ₯μΉλ₯Ό κ°μ ΈμΌνλ€. μ΄κ²μ Ford Familyμμ λΆλΆλ€μ΄λ€. μ μ§Έ, μ°λ¦¬λ
μ¬λ¬ partμ familyλ€μ κ°μ§λ€.
Ford parts,Toyota parts,Porsche parts λ±λ±μ΄λ€. μ μ¬ν ν΄λμ€λ€μ΄ ν΄λμ€ κ΅¬μ‘°λ₯Ό ν΅ν΄μ νμ₯λλ€. κ°κ°μ΄ μ λΉν νμ
ꡬ쑰λ₯Ό κ°μ§κ² λλ€. κ°λ Ή CarEngine νμ ꡬ쑰μ μμ§λ€, CarBody ꡬ쑰μ body λ±λ±μ κ°μ§κ² λλ€.
(κ²°κ΅, κ°κ°μ΄ CarEngineμ Base Classλ‘ ν΄μ μμμ ν΅ν΄ Ford Engine,Toyota Engineλ±λ±μΌλ‘ νμ₯λ μ μλ€λ λ§μ΄λ€.)
λ°λΌμ, μ°λ¦¬λ λ€λ₯Έ μ§ν©μ λΆλΆλ€μ μ ννμ§ μκ³ , νλμ μ§ν©(Family)μΌλ‘λΆν° κ°κ°μ μλμ°¨ λΆλΆλ€μ μ½κ² μ»μ μ
μλ λ°©λ²μ΄ νμνλ€. (Toyota μμ§μμλ Ford μλμ°¨κ° μλν μ μλ€.)
κ·Έλ¦¬κ³ λͺ¨λ faimilyμμ κ°μ μ½λλ₯Ό μ¬μ©ν΄μ λΆλΆλ€μ(μμ§,λ³μμ₯μΉ..) μ»λ κ²μ μ¬μ©νλ€.
μ°λ¦¬λ Abstract Factory Patternμ μ΄μ©ν΄μ λκ°μ§ λͺ©νλ₯Ό μ΄λ£° μ μλ€.
(μ 리 : Abstract Factory Patternμ Factory Patternμ μΆμνμν¨ κ²μ΄λ€.Factory Patternμ λͺ©μ μ΄ Base Classλ‘λΆν° μμ
λ μ¬λ¬ μ’ λ₯μ ν΄λμ€λ€ μ€ νλλ₯Ό μ νν μ μλλ‘ ν΄μ£Όλ κ²μ μλ―Ένλ€.
Abstract Factory Patternλ μ¬λ¬ κ°μ Factoryμ€ νλλ₯Ό μ νν μ μλλ‘ ν΄μ£Όλ κ²μ μννλ€. )
μ°λ¦¬λ μλμ κ°μ μλμ°¨μ μλμ°¨ λΆλΆλ€μ ν΄λμ€λ₯Ό κ°μ§κ³ μλ€.
Vechileκ³Ό CarPartλ Object ν΄λμ€μ μλΈ ν΄λμ€μ΄λ€. λ¬Όλ‘ , μ΄ ν΄λμ€ κ΅¬μ‘°λ λ§μ λ¨κ³μμ μ 체μ μΌλ‘ λ¨μνλλ€.
μλμ°¨ νμ¬λ€(Ford)μ μλμ°¨, λͺΈμ²΄, μμ§, μ¬μ§μ΄ μμ§ μ’ λ₯(κ°μλ¦° μμ§ νΉμ λμ € μμ§)λ λͺλͺ λ€λ₯Έ λͺ¨λΈμ κ°μ§κ³ μλ€.
κ·Έλ¬λ―λ‘ μ°λ¦¬κ° μ¬κΈ°μ 보μ¬μ£Όλ κ² λ³΄λ€ νμ€ μΈκ³λ μ’λ λμ μΆμμ κ°μ§κ³ μμ κ²μ΄λ€. νμ§λ§, μ°λ¦¬μ ν¨ν΄ λ¬μ¬λ₯Ό
μ μ©νκΈ°μλ μΆ©λΆν μμ€μ μΆμμ μ 곡νκ³ μλ€.
μ°λ¦¬λ CarPartFactoryλΌλ μΆμ ν©ν 리 ν΄λμ€ μ μλ₯Ό νλ©΄μ ν¨ν΄ ꡬνμ μμνλ€. μ΄κ²μ "ꡬ체μ μΈ ν΄λμ€λ€μ λν
ꡬ체ν μμ΄ κ΄κ³λ νΉμ μμ‘΄μ μΈ κ°μ²΄ μ§ν©μ λ§λ€κΈ° μν μΈν°νμ΄μ€λ₯Ό μ 곡νλ" (Intent λΆλΆμμ μΈκΈν λ΄μ©)
ν΄λμ€μ΄λ€. κ·Έκ²μ μΆμμ μΈ μν μμ± ν¨μλ€(makeCar,makeEngine,makeBody)μ μ μνλ€. κ·Έ λ μ°λ¦¬λ μν μ§ν© λΉ
νλμ ꡬ체μ μΈ ν©ν 리 νμ ν΄λμ€λ₯Ό μ μνλ€. κ°κ°μ νμ ν΄λμ€λ€μ μ λΉν λΆλΆμ λ§λ€κ³ λ°ννκΈ° μν΄μ μν μμ±
ν¨μλ₯Ό μ¬ μ μνλ€. κ·Έλμ μ°λ¦¬λ Objectλ₯Ό μμν μλ‘μ΄ νμ ꡬ쑰λ₯Ό μΆκ°νλ€.
μλμ°¨ λΆλΆ(part) μμ± λ©μλλ₯Ό ꡬννκΈ° μν΄μ, μ°λ¦¬λ μΆμ ν©ν 리 ν΄λμ€λ‘ μμνλ€.
CarPartFactory>>makeCar self subclassResponsibility CarPartFactory>>makeEngine self subclassResponsibility CarPartFactory>>makeBody self subclassResponsibility
κ·Έλ¦¬κ³ μ΄ λ©μλλ₯Ό μ€λ²λΌμ΄λνλ ꡬ체μ μΈ νμ ν΄λμ€λ₯Ό μΆκ°νλ€.
FordFactory>>makeCar ^FordCar new FordFactory>>makeEngine ^FordEngine new FordFactory>>makeBody ^FordBody new ToyotaFactory>>makeCar ^ToyotaCar new ToyotaFactory>>makeEngine ^ToyotaEngine new ToyotaFactory>>makeBody ^ToyotaBody new
μ 체μ μΌλ‘, μ°λ¦¬μ ν©ν 리λ€μ μλμ κ°μ΄ 보μΈλ€.
Abstract Factoryλ‘, λΆλΆλ€μ(part) κ²°ν©μν€λ κ²μ ν©ν 리μ ν΄λΌμ΄μΈνΈκ° νλ μΌμ΄λ€. ν©ν 리λ λΆλΆλ€μ(part) νλμ μ§ν©μ (family)λ‘ λΆν° λμ¨λ€λ κ²μ 보μ₯νλ€. νμ§λ§, ν©ν 리λ λ¨μ§ λΆλΆμ(part) λ°ννλ μΌλ§ ν λΏμ΄λ€. μ΅μ’ μνμ ν©ν λ¦¬κ° μ‘°λ¦½νμ§ μλλ€. κ·Έκ²μ ν΄λΌμ΄μΈνΈμ μΌμ΄λ€. (μ°λ¦¬λ Abstract Factoryμ Builder ν¨ν΄ μ¬μ΄μ μ£Όμν μ°¨μ΄μ μ λμ€μ λ³Ό κ²μ΄λ€.)
CarAssembler κ°μ²΄κ° ν©ν 리 ν΄λΌμ΄μΈνΈλΌκ³ μΆμ ν΄λ³΄μ. κ·Έλ¦¬κ³ CarPartFactory κ°μ²΄λ₯Ό μ°Έμ‘°νλ ν©ν 리λΌκ³ μ΄λ¦μ§μ΄μ§ μΈμ€ν΄μ€ λ³μλ₯Ό κ°μ.
Abstract Factoryλ‘, λΆλΆλ€μ(part) κ²°ν©μν€λ κ²μ ν©ν 리μ ν΄λΌμ΄μΈνΈκ° νλ μΌμ΄λ€. ν©ν 리λ λΆλΆλ€μ(part) νλμ μ§ν©μ (family)λ‘ λΆν° λμ¨λ€λ κ²μ 보μ₯νλ€. νμ§λ§, ν©ν 리λ λ¨μ§ λΆλΆμ(part) λ°ννλ μΌλ§ ν λΏμ΄λ€. μ΅μ’ μνμ ν©ν λ¦¬κ° μ‘°λ¦½νμ§ μλλ€. κ·Έκ²μ ν΄λΌμ΄μΈνΈμ μΌμ΄λ€. (μ°λ¦¬λ Abstract Factoryμ Builder ν¨ν΄ μ¬μ΄μ μ£Όμν μ°¨μ΄μ μ λμ€μ λ³Ό κ²μ΄λ€.)
CarAssembler κ°μ²΄κ° ν©ν 리 ν΄λΌμ΄μΈνΈλΌκ³ μΆμ ν΄λ³΄μ. κ·Έλ¦¬κ³ CarPartFactory κ°μ²΄λ₯Ό μ°Έμ‘°νλ ν©ν 리λΌκ³ μ΄λ¦μ§μ΄μ§ μΈμ€ν΄μ€ λ³μλ₯Ό κ°μ.
CarAssembler>>assembleCar | car | "Create the top-level part, the car object which starts out having no subcomponents, and add an engine, body, etc." car := factory makeCar car addEngine: factory makeEngine; addBody: factory makeBody; ... ^car
λ§μ½, ν©ν λ¦¬κ° FordFactoryμ μΈμ€ν΄μ€μλ€λ©΄, μλμ°¨μ μΆκ°λκΈ° μν΄ μ»μ΄μ§ μμ§μ FordEngineμΌ κ²μ΄λ€. λ§μ½ ν©ν λ¦¬κ° ToyotaFactoryμλ€λ©΄, ToyotaEngineμ ν©ν 리μ makeEngineμ μν΄μ λ§λ€μ΄ μ§ κ²μ΄κ³ , κ·Έ λ μλμ°¨μ μΆκ°λ κ²μ΄λ€.
μμ§, νμ€νμ§ μλ ν λΆλΆμ΄ μλ€. CarAssemblerλ(factory ν΄λΌμ΄μΈνΈ) μ΄λ»κ² ꡬ체μ μΈ CarPartFactory νμ ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μ»μ μ μμκΉ? κ·Έκ²μ νΉλ³ν νμ ν΄λμ€ μ체λ₯Ό μλΉμμ μ νμ κΈ°μ΄ν΄μ μΈμ€ν΄μ€ν ν μ μμ κ²μ΄λ€. νΉμ μΈλΆ κ°μ²΄μ μν΄μ ν©ν 리 μΈμ€ν΄μ€λ₯Ό λ€λ£°μλ μμ κ²μ΄λ€.
νμ§λ§, λ κ²½μ°μ μλμ°¨λ₯Ό μμ±νκΈ° μν μ½λμ κ·Έκ²μ μ»΄ν¬λνΈ νμ λΆλΆμ μ¬μ ν κ°λ€. μ¦, λͺ¨λ CarPartFactory ν΄λμ€λ€μ λμΌν λ©μμ§ νλ‘ν μ½μ(λ€νμ±)μ ꡬννκΈ° λλ¬Έμ, ν©ν 리 ν΄λΌμ΄μΈνΈλ ν©ν 리 νμ μ΄ λ¬΄μμΈμ§ μκ΄νμ§ μκ³ νΈμΆμ ν μ μλ€. κ·Έκ²μ λ¨μ§ ν©ν 리 νλ‘ν μ½μ μν΄ μ 곡λλ μΌλ°μ μΈ λ©μμ§λ₯Ό μ μ‘νλ€.
λ€νμ±μ ν λλ¬Έμ, ν΄λΌμ΄μΈνΈλ μ½λ ꡬνμ νλ²λ§ νλ©΄λλ€. ABSTRACT FACTORY PATTERNμ μ¬μ©νμ§ μμ κ²½μ°, μλμ°¨ μμ± μ½λλ λ€μκ³Ό κ°μ΄ λ³΄μΌ κ²μ΄λ€.(μμ£Ό λΉν¨μ¨μ μΈ μ½λ)
μμ§, νμ€νμ§ μλ ν λΆλΆμ΄ μλ€. CarAssemblerλ(factory ν΄λΌμ΄μΈνΈ) μ΄λ»κ² ꡬ체μ μΈ CarPartFactory νμ ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μ»μ μ μμκΉ? κ·Έκ²μ νΉλ³ν νμ ν΄λμ€ μ체λ₯Ό μλΉμμ μ νμ κΈ°μ΄ν΄μ μΈμ€ν΄μ€ν ν μ μμ κ²μ΄λ€. νΉμ μΈλΆ κ°μ²΄μ μν΄μ ν©ν 리 μΈμ€ν΄μ€λ₯Ό λ€λ£°μλ μμ κ²μ΄λ€.
νμ§λ§, λ κ²½μ°μ μλμ°¨λ₯Ό μμ±νκΈ° μν μ½λμ κ·Έκ²μ μ»΄ν¬λνΈ νμ λΆλΆμ μ¬μ ν κ°λ€. μ¦, λͺ¨λ CarPartFactory ν΄λμ€λ€μ λμΌν λ©μμ§ νλ‘ν μ½μ(λ€νμ±)μ ꡬννκΈ° λλ¬Έμ, ν©ν 리 ν΄λΌμ΄μΈνΈλ ν©ν 리 νμ μ΄ λ¬΄μμΈμ§ μκ΄νμ§ μκ³ νΈμΆμ ν μ μλ€. κ·Έκ²μ λ¨μ§ ν©ν 리 νλ‘ν μ½μ μν΄ μ 곡λλ μΌλ°μ μΈ λ©μμ§λ₯Ό μ μ‘νλ€.
λ€νμ±μ ν λλ¬Έμ, ν΄λΌμ΄μΈνΈλ μ½λ ꡬνμ νλ²λ§ νλ©΄λλ€. ABSTRACT FACTORY PATTERNμ μ¬μ©νμ§ μμ κ²½μ°, μλμ°¨ μμ± μ½λλ λ€μκ³Ό κ°μ΄ λ³΄μΌ κ²μ΄λ€.(μμ£Ό λΉν¨μ¨μ μΈ μ½λ)
CarAssembler>>assembleCar "Without Abstract Factory." | car | car := (consumerChoice == #Ford ifTrue: [FordCar new] ifFalse: [consumerChoice == #Toyota ifTrue: [ToyotaCar new] ifFalse: [consumerChoice == #Porsche ifTrue: [PorscheCar new] ifFalse: [...]) car addEngine: (consumerChoice == #Ford ifTrue: [FordEngine new] ifFalse: [...]). ... ^car
λ°λΌμ, CarAssmeblerλ₯Ό λ§λ€κΈ° μν μλμ°¨ μ’
λ₯κ° λ¬΄μμ΄κ³ κ·Έ νμ λΆλΆλ€μ΄ 무μμ ν΄μΌνκ³ , κ·Έκ²μ μ€μ λΆλΆμ μΈμ€ν΄μ€κ° 무μμ μνν΄μΌ ν μ§λ₯Ό κ²°μ νλ€. ABSTRACT FACTORY ν΄κ²°μ μ°λ¦¬κ° CarAssembler κ°μ²΄ λ°μ λͺ¨λ νλλ€μ μΆμνμν¨λ€. κ·Έλ¦¬κ³ ν©ν λ¦¬λ‘ λΆλ¦¬νλ€. νΉλ³ν μλμ°¨ ν©ν λ¦¬λ‘ CarAssembler νμΈμ ν νμ, CarAssemblerλ κ°λ¨νκ² κ΅¬μ²΄μ μΈ μλμ°¨μ νμ λΆλΆμ λ§λ€κΈ° μν ν©ν 리λ₯Ό νΈμΆνλ€.
ABSTRACT FACTORY μ κ·Όμ μ’λ λͺ¨λμ μ΄κ³ , μ’λ μ½κ² νμ₯ κ°λ₯ν λμμΈμ ν μ μλ€. μμ€ν μ μλ‘μ΄ νμ μ μλμ°¨λ₯Ό μΆκ°νκΈ° μν΄μ, μ°λ¦¬λ CarPartFactoryμ μλΈ ν΄λμ€λ₯Ό
μΆκ°νκ³ κ·Έκ²μ μΈμ€ν΄μ€νκΈ° μν μ½λκ° νμν λΏμ΄λ€.
μ¬κΈ°μ ν¨κ³Όμ μΈ λ κ°μ μΆμμ΄ μλ€. 첫λ²μ§Έ, λͺ¨λ CarPartFactoryλ€μ΄ κ°μ λ©μμ§ μΈν°νμ΄μ€λ₯Ό ꡬννλ€. ν΄λΌμ΄μΈνΈκ° κ·Έλ€μ΄ λ©μμ§λ₯Ό 보λ΄κΈ° μν΄μ CarPartFactoryμ μ νν
νμ μ΄ λ¬΄μμΈμ§ μ κ²½μ°μ§ μκ³ κ°μ μμ± λ©μμ§λ₯Ό 보λ΄λ κ²μ ν©ν λ¦¬κ° μννλ€.
ABSTRACT FACTORY μ κ·Όμ μ’λ λͺ¨λμ μ΄κ³ , μ’λ μ½κ² νμ₯ κ°λ₯ν λμμΈμ ν μ μλ€. μμ€ν μ μλ‘μ΄ νμ μ μλμ°¨λ₯Ό μΆκ°νκΈ° μν΄μ, μ°λ¦¬λ CarPartFactoryμ μλΈ ν΄λμ€λ₯Ό
μΆκ°νκ³ κ·Έκ²μ μΈμ€ν΄μ€νκΈ° μν μ½λκ° νμν λΏμ΄λ€.
μ¬κΈ°μ ν¨κ³Όμ μΈ λ κ°μ μΆμμ΄ μλ€. 첫λ²μ§Έ, λͺ¨λ CarPartFactoryλ€μ΄ κ°μ λ©μμ§ μΈν°νμ΄μ€λ₯Ό ꡬννλ€. ν΄λΌμ΄μΈνΈκ° κ·Έλ€μ΄ λ©μμ§λ₯Ό 보λ΄κΈ° μν΄μ CarPartFactoryμ μ νν
νμ μ΄ λ¬΄μμΈμ§ μ κ²½μ°μ§ μκ³ κ°μ μμ± λ©μμ§λ₯Ό 보λ΄λ κ²μ ν©ν λ¦¬κ° μννλ€.