λ°μν
Creation Design Pattern (μμ± λμμΈ ν¨ν΄)
- μμ± λμμΈ ν¨ν΄μ κ°μ²΄ μμ±μ κ΄λ ¨λ λμμΈ ν¨ν΄μ λ§ν©λλ€.
- μ΄ ν¨ν΄λ€μ κ°μ²΄μ μμ± κ³Όμ μ μΊ‘μννμ¬, κ°μ²΄ μμ±μ λ μ μ°νκ² λ§λ€μ΄ μ€λλ€.
- μ£Όλ‘ κ°μ²΄ μμ± λ‘μ§μ΄ λ¨μνμ§ μκ±°λ, κ°μ²΄ μμ±κ³Ό κ΄λ ¨λ μ 보λ₯Ό μΊ‘μννμ¬, μμ€ν μ λ€λ₯Έ λΆλΆκ³Όμ μμ‘΄μ±μ μ€μ΄λ λ° μ μ©ν©λλ€.
Factory Pattern (ν©ν 리 ν¨ν΄)
ν©ν 리 ν¨ν΄μ κ°μ²΄λ₯Ό μμ±νκΈ° μν μΈν°νμ΄μ€λ₯Ό μ μνκ³ , μ΄λ€ ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μμ±ν μ§λ μλΈν΄λμ€κ° κ²°μ νκ² ν©λλ€. μ΄λ₯Ό ν΅ν΄ κ°μ²΄ μμ±μ μν μ½λμ μ¬μ©μ μν μ½λμ λΆλ¦¬κ° κ°λ₯ν΄μ§λλ€. ν©ν 리 ν¨ν΄μ ν¬κ² μΈ κ°μ§λ‘ λλ©λλ€.
Simple Factory (λ¨μ ν©ν 리)
- λ¨μ ν©ν 리λ ν©ν 리 λ©μλλ₯Ό κ°μ§ ν΄λμ€λ₯Ό ν΅ν΄ μΈμ€ν΄μ€λ₯Ό μμ±ν©λλ€. μ΄ λ°©μμ λ¨μνμ§λ§, μ μ°μ±μ΄ λ€μ λ¨μ΄μ§ μ μμ΅λλ€.
Factory Method (ν©ν 리 λ©μλ)
- ν©ν 리 λ©μλλ κ°μ²΄λ₯Ό μμ±ν λ νμν μΈν°νμ΄μ€λ₯Ό μ μνκ³ , μ΄λ€ ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μμ±ν μ§λ μλΈν΄λμ€κ° κ²°μ νκ² ν©λλ€. ν΄λΌμ΄μΈνΈμ μΈμ€ν΄μ€ μμ±μ λΆλ¦¬νμ¬ κ°κ°μ μλΈν΄λμ€μμ μ΄λ€ ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μμ±ν μ§ κ²°μ ν©λλ€.
Abstract Factory (μΆμ ν©ν 리)
- μΆμ ν©ν 리λ κ΄λ ¨λ μ¬λ¬ μ’ λ₯μ κ°μ²΄λ₯Ό μμ±νκΈ° μν μΈν°νμ΄μ€λ₯Ό μ 곡ν©λλ€. μ΄ ν¨ν΄μ μλ‘ κ΄λ ¨λ μ¬λ¬ κ°μ²΄κ΅°μ μμ±ν΄μΌ ν λ μ μ©ν©λλ€. μΆμ ν©ν 리 ν¨ν΄μ μμ€ν μ ꡬμ±νλ ν΄λμ€λ€ μ¬μ΄μ μΌκ΄μ±μ μ μ§ν μ μκ² λμμ€λλ€.
Builder Pattern (λΉλ ν¨ν΄)
- λΉλ ν¨ν΄μ 볡μ‘ν κ°μ²΄μ μμ± κ³Όμ κ³Ό νν λ°©λ²μ λΆλ¦¬ν¨μΌλ‘μ¨, λμΌν μμ± κ³Όμ μμ μλ‘ λ€λ₯Έ νν κ²°κ³Όλ₯Ό μμ±ν μ μκ² ν΄μ€λλ€.
- μ΄ ν¨ν΄μ 볡μ‘ν κ°μ²΄λ₯Ό λ¨κ³λ³λ‘ μμ±ν λ μ μ©νλ©°, μ΅μ’ μ μΌλ‘ μμ±λλ κ°μ²΄μ νμ μ κ°μ§λ§, κ΅¬μ± μμλ κ΅¬μ± λ°©λ²μ΄ λ€λ₯Ό μ μμ΅λλ€.
Singleton (μ±κΈν΄)
- μ±κΈν΄ ν¨ν΄μ ν΄λμ€μ μΈμ€ν΄μ€κ° λ¨ νλλ§ μμ±λλλ‘ λ³΄μ₯νλ ν¨ν΄μ λλ€.
- μ μ λ³μλ₯Ό μ¬μ©νμ§ μκ³ κ°μ²΄μ λν μ μ μ κ·Όμ μ μ 곡ν©λλ€.
- μ΄ ν¨ν΄μ λ‘κΉ , λλΌμ΄λ² κ°μ²΄, λ°μ΄ν°λ² μ΄μ€ μ°κ²°κ³Ό κ°μ΄ μ ν리μΌμ΄μ μ λ°μ κ±Έμ³ νλμ μΈμ€ν΄μ€λ§ νμν κ²½μ°μ μ μ©ν©λλ€.
Prototype (νλ‘ν νμ )
- νλ‘ν νμ ν¨ν΄μ μμ±ν κ°μ²΄μ νμ μ΄ νλ‘ν νμ μΌλ‘λΆν° ν΄λ‘ λμ΄μΌ νλ κ²½μ° μ¬μ©λ©λλ€.
- μ¦, μλ‘μ΄ κ°μ²΄λ₯Ό μμ±ν λλ§λ€ ν΄λμ€μμ μΈμ€ν΄μ€λ₯Ό μμ±νλ λμ , κΈ°μ‘΄ μΈμ€ν΄μ€λ₯Ό 볡μ¬νμ¬ μλ‘μ΄ μΈμ€ν΄μ€λ₯Ό μμ±ν©λλ€.
- μ΄ λ°©λ²μ 볡μ‘ν κ°μ²΄λ₯Ό μ΄κΈ°νν λ μ΄κΈ° μ€μ μ΄ λ§μ΄ νμν κ²½μ°μ ν¨κ³Όμ μ λλ€.
(Simple) Factory Pattern
- Simple Factory Patternμ κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μμ λ€λ₯Έ ν΄λμ€μ κ°μ²΄λ₯Ό μμ±νλ ν΄λμ€λ₯Ό μ§μΉν©λλ€.
- μ΄ ν¨ν΄μ κ°μ²΄μ μμ±μ λ³λμ ν΄λμ€λ‘ μΊ‘μννμ¬, κ°μ²΄ μμ± κ³Όμ μ κ°μΆκ³ ν΄λΌμ΄μΈνΈμκ²λ λ¨μν μΈν°νμ΄μ€λ₯Ό μ 곡ν©λλ€.
μ£Όμ νΉμ§
- κ°μ²΄ μμ± μΊ‘μν: Factoryλ κ°μ²΄μ μμ±μ λ³λμ ν΄λμ€λ‘ μΊ‘μνν©λλ€. μ΄λ κ°μ²΄ μμ± λ‘μ§μ λ¨μΌ μμΉμ μ§μ€μν€κ³ , ν΄λΌμ΄μΈνΈμκ²λ μΈν°νμ΄μ€λ₯Ό μ 곡νμ¬ κ°μ²΄λ₯Ό μμ²ν μ μκ² ν©λλ€.
- μΌλ°μ μΌλ‘ λ©μλλ‘ κ΅¬μ±: Factory ν΄λμ€λ μ£Όλ‘ κ°μ²΄μ κ΄λ ¨λ λ©μλλ‘ κ΅¬μ±λ©λλ€. μ΄ λ©μλλ νΉμ μΈμλ₯Ό λ°μλ€μ¬ ν΄λΉνλ κ°μ²΄λ₯Ό μμ±νκ³ λ°νν©λλ€.
- ν΄λΌμ΄μΈνΈ-ν©ν 리 μνΈμμ©: ν΄λΌμ΄μΈνΈλ νΉμ μΈμμ ν¨κ» ν©ν 리 λ©μλλ₯Ό νΈμΆνμ¬ νμν κ°μ²΄λ₯Ό μμ²ν©λλ€. μ΄ν ν©ν 리λ ν΄λΉ κ°μ²΄λ₯Ό μμ±νμ¬ λ°νν©λλ€.
Factory Pattern
Factory ν¨ν΄μ κ°μ²΄ μμ±μ μΆμννμ¬ ν΄λΌμ΄μΈνΈμκ² νΉμ κ°μ²΄μ μΈμ€ν΄μ€λ₯Ό μ§μ μμ±νλ λμ , ν©ν 리μκ² κ°μ²΄λ₯Ό μμ±νλλ‘ μμ²νλ λμμΈ ν¨ν΄μ λλ€.
Factory ν¨ν΄μ κ°μ²΄ μμ±μ μΆμννμ¬ ν΄λΌμ΄μΈνΈμκ² νΉμ κ°μ²΄μ μΈμ€ν΄μ€λ₯Ό μ§μ μμ±νλ λμ , ν©ν 리μκ² κ°μ²΄λ₯Ό μμ±νλλ‘ μμ²νλ λμμΈ ν¨ν΄μ λλ€.
- 곡μ₯μ ν¨μ λλ ν΄λμ€λ‘ λνλΌ μ μμ: Factoryλ ν¨μλ ν΄λμ€λ‘ ꡬνλ μ μμ΅λλ€. ν¨μλ‘ κ΅¬νν κ²½μ°, ν΄λΌμ΄μΈνΈκ° μμ²ν μΈμλ₯Ό λ°μλ€μ¬ ν΄λΉνλ κ°μ²΄λ₯Ό μμ±νκ³ λ°νν©λλ€.
- μνλ 물건μ λ§λ€μ΄ λ¬λΌκ³ μμ²νλ©΄ κ·Έ μ νμ λ§λ€μ΄ λΌ μ μμ: ν΄λΌμ΄μΈνΈλ ν©ν 리μκ² νΉμ κ°μ²΄μ μμ±μ μμ²ν©λλ€.
Factory Pattern Example1 - ν¨μλ‘ νν
- μ ν μ μ
class Robot:
def speak(self):
pass
class Cat(Robot):
def speak(self):
print("Meow")
class Dog(Robot):
def speak(self):
print("Bark")
- 곡μ₯
class factoryFunc(animal):
if animal_type == "cat":
return Cat()
elif animal_type == "dog":
return Dog()
- Client
cat = factoryFunc("cat")
dog = factoryFunc("dog")
cat.speak()
dog.speak()
Factory Pattern Example2 - ν¨μλ‘ νν
- μ ν μ μ
class Car:
def drive(self):
return "car driving"
class Truck:
def drive(self):
return "truck driving"
class Motorcycle:
def drive(self):
return "motorcycle zooming"
- 곡μ₯
class VehicleFactory:
def get_vehicle(self, vehicle_type):
if vehicle_type == "car":
return Car()
elif vehicle_type == "truck":
return Truck()
elif vehicle_type == "motorcycle":
return Motorcycle()
else:
return ValueError("Unknown vehicle type")
- Client μμ²
factory = VehicleFactory()
car = factory.get_vehicle("car")
print(car.drive()) # car driving
truck = factory.get_vehicle("truck")
print(truck.drive()) # truck driving
motorcycle = factory.get_vehicle("motorcycle")
print(motorcycle.drive()) # motorcycle zooming
Classλ‘ ννμ enumμ νμ©νλ©΄ νΈλ¦¬ν¨
from enum import Enum
class RobotEnum(Enum):
Cat = 0
Dog = 1
class Robot:
def speak(self):
pass
class Cat(Robot):
def speak(self):
print("Meow")
class Dog(Robot):
def speak(self):
print("Bark")
class RobotFactory:
def makeRobot(self, robot:RobotEnum):
if robot == RobotEnum.CAT:
return Cat()
elif robot == RobotEnum.DOG:
return Dog()
fac1 = RobotFactory()
dog = fac1.makeRobot(RobotEnum.DOG)
dog.speak()
cat = fac1.makeRobot(RobotEnum.CAT)
cat.speak()
UMLλ‘ νν
Factroy Pattern
- Factory ν¨ν΄μ μ¬μ©μκ° μ€λΈμ νΈμ μμ± κ³Όμ μ μ§μ λ€λ£° νμ μκ²λ ν΄μ£Όλ μ€μν λμμΈ ν¨ν΄μ
λλ€.
- μ΄λ₯Ό ν΅ν΄ 볡μ‘ν κ°μ²΄μ μμ± κ³Όμ μ μ¨κΈ°κ³ , ν΄λΌμ΄μΈνΈκ° λ¨μν "κ³ μμ΄"λ "κ°μμ§"μ κ°μ μμ²λ§μ ν μ μκ² λ©λλ€.
- μ¬κΈ°μ κ°μμ§λ κ³ μμ΄ μμλ λ¨μν μμΌ λΏμ΄λ©°, μ€μ λ‘λ κ°μ²΄ μμ± κ³Όμ μ΄ ν¨μ¬ λ 볡μ‘ν μ μμ΅λλ€.
- μλ₯Ό λ€μ΄, νΉμ ν μ’ λ₯μ λ°μ΄ν°λ² μ΄μ€ μ°κ²° κ°μ²΄λ₯Ό μμ±νκ±°λ, λ€νΈμν¬ ν΅μ μ μν μΈμ¦ κ°μ²΄λ₯Ό μμ±νλ λ±μ 볡μ‘ν μμ μΌ μ μμ΅λλ€.
- μ΄λ¬ν 볡μ‘ν μμ± κ³Όμ μ ν©ν 리 μμ μ¨κ²¨λκ³ , ν΄λΌμ΄μΈνΈκ° λ¨μν μμ²μ ν λ νμν κ°μ²΄λ§μ μμ±νμ¬ λ°ννλ κ²μ΄ ν©ν 리 ν¨ν΄μ ν΅μ¬ κ°λ
μ
λλ€.
- ν΄λΌμ΄μΈνΈλ μ€λΈμ νΈμ μμ±μ λν΄ κ±±μ ν νμ μμ΄, λ¨μν ν©ν 리μκ² νμν μ€λΈμ νΈλ₯Ό μμ²νλ©΄ λ©λλ€. ν©ν 리λ λ΄λΆμ μΌλ‘ 볡μ‘ν μμ μ μννκ³ , ν΄λΌμ΄μΈνΈμκ² μμ²ν μ€λΈμ νΈλ₯Ό λ°ννλ κ°λ μ λλ€.
Summary: Factory Patternμ Factory Method Pattern, Singleton Pattern, Builder pattern μμ μμ©μ΄ λ©λλ€.
λ°μν
'πΊοΈ Design Pattern' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Design Pattern] Abstract Factory Pattern - μΆμ ν©ν 리 ν¨ν΄ (0) | 2024.04.08 |
---|---|
[Design Pattern] Factory Method Pattern - ν©ν 리 λ©μλ ν¨ν΄ (0) | 2024.04.08 |
[Design Pattern] Object-Oriented Programming (OOP) (0) | 2024.03.28 |
[Design Pattern] Unified Modeling Language (UML) (0) | 2024.03.28 |
[Design Pattern] Solid Principles (μ리λ μμΉ) (0) | 2024.03.28 |