Simple Factory Pattern
View all Design Patterns
별도의 팩토리 메서드를 활용해 객체를 생성하는 방식이다. 클라이언트는 해당 객체의 구체적인 생성 로직을 알 필요가 없다.
Before
Class Diagram
위의 경우, 객체를 호출하는 쪽이 생성자(e.g. new
)에 의존하고 있기 때문에 다음과 같이 생성해야 한다.
Code
interface Animal {
sound(): string;
}
class Duck implements Animal {
sound(): string {
return "Quack";
}
}
class Cat implements Animal {
sound(): string {
return "Meow";
}
}
// when client creates instances
const duck = new Duck();
const cat = new Cat();
console.log(`duck sounds ${duck.sound()}`);
console.log(`cat sounds ${cat.sound()}`);
하지만 이럴 경우, 다음과 같은 문제점이 발생한다.
- 클라이언트는
Duck
과Cat
이라는 특정 클래스를 알고 있어야 한다. - 클래스와 객체가 서로 의존하고 있다. (Tight Coupling)
- 생성자 코드에 변경이 있을 경우, 모든 클라이언트 코드를 변경해야 한다.
Simple Factory Pattern을 사용하면 이러한 로직을 추상화시켜줄 수 있다. Simple Factory Pattern의 최대 장점은 인스턴스 생성 로직을 한번에 관리해줄 수 있다는 점이다.
After
Class Diagram
이렇게 되면, 클라이언트는 AnimalFactory
만 바라보게 되면서 Duck
과 Cat
클래스에 의존하지 않을 수 있다.