팩토리 패턴 (Factory Pattern)
객체 생성 부분을 분리하여 추상화한 패턴
- 상속 관계에 있는 두 클래스에서 상위 클래스가 중요한 뼈대를 결정하고, 하위클래스에서 객체 생성에 관한 구체적인 내용 결정
- 객체들 간 의존관계 분리하기 위함
- 팩토리 메소드 패턴, 추상 팩토리 패턴
장점
- 상 / 하위 클래스를 분리하여 결합도를 감소시키고 유지 보수성을 증가시킨다.
- 유연성 및 확장성 증가
단점
- 객체 생성 시 새로운 클래스 필요
# 팩토리 메소드 패턴 (Factory Method Pattern)
- 객체 생성 처리를 서브 클래스로 분리하여 처리하도록 캡슐화하는 패턴
- 추상화를 통해 상위 클래스를 제공하고, 상세한 구현은 하위 클래스로 위임
- 비슷한 객체를 반복적으로 생성새야 하는 경우 사용
예제
class Coffee {
constructor(coffee) {
this.name = coffee.name;
}
createCoffee() {
return `${this.name}가 제조되었습니다.`;
}
}
class Latte extends Coffee {
constructor() {
super({ name: "라떼" });
}
}
class Espresso extends Coffee {
constructor() {
super({ name: "에스프레소" });
}
}
class CoffeeFactory {
static createCoffee(name) {
switch (name) {
case "Latte":
return new Latte();
case "Espresso":
return new Espresso();
}
}
}
class Client {
static createCoffee(name) {
const factory = CoffeeFactory.createCoffee(name);
return factory;
}
}
const latte = Client.createCoffee("Latte");
const espresso = Client.createCoffee("Espresso");
console.log(latte, espresso); // Latte { name: '라떼' } Espresso { name: '에스프레소' }
console.log(latte.createCoffee()) // 라떼가 제조되었습니다.
- Client 에서 createCoffee() 메소드 내의 변화는 신경 쓸 필요 없음 → 결합이 느슨해짐
- 다른 커피를 주문하고 싶다면 새로운 팩토리(Class)를 정의하고 호출하는 부분만 변경
- 객체를 동적으로 생성하는 메소드를 static으로 정의 → 메모리 절약
# 추상 팩토리 패턴 (Abstract Factory Pattern)
- 서로 연관되거나 의존적인 객체들의 조합을 만드는 인터페이스 제공하는 패턴
- 연관된 서브 클래스를 그룹화 (관련성 있는 여러 종류의 객체를 일관된 방식으로 생성할 때 유용)
- 새로운 종류의 제품을 추가하는 경우 그룹으로 분리된 모든 클래스에 관련된 코드를 삽입해야함
→ 서브 객체를 추가하는 것이 어려움 (모든 서브 클래스 동시에 변경)
차이점
팩토리 메소드의 경우 단일 그룹으로 제한되지만 추상 팩토리의 경우 그룹화하여 객체를 생성할 수 있다.
'STUDY > CS' 카테고리의 다른 글
[네트워크] TCP/IP 4계층 (0) | 2023.01.21 |
---|---|
[네트워크] 네트워크 토폴로지 (Network Topology) / 네트워크 분류 (2) | 2023.01.20 |
[디자인 패턴] 옵서버 패턴 (Observer Pattern) / 자바스크립트, 프록시 객체 (2) | 2023.01.10 |
[디자인 패턴] 전략 패턴 (Strategy Pattern) / 자바스크립트 (0) | 2023.01.09 |
[디자인 패턴] 싱글톤 패턴 (Singleton Pattern) / 자바스크립트 (2) | 2023.01.07 |