이 글은 면접을 위한 CS 전공지식노트의 책을 읽고 학습 후 스터디 공유를 위한 글입니다.
class Latte {
constructor() {
this.name = "latte"
}
}
class Espresso {
constructor() {
this.name = "espresso"
}
}
class LatteFactory {
// 하위 클래스 -> 구체적인 내용을결정
static createCoffee() {
return new Latte();
}
}
class EspressoFactory {
// 하위 클래스 -> 구체적인 내용을결정
static createCoffee() {
return new Espresso();
}
}
const factoryList = { LatteFactory, EspressoFactory };
// const factoryList = { LatteFactory: LatteFactory, EspressoFactory: EspressoFactory };
// ES6의 단축 속성명(Shorthand property names).
// 객체의 속성 이름과 값이 동일하므로, 속성 이름과 값을 동일하게 처리합니다.
class CoffeeFactory {
// 상위 클래스 -> 중요한 뼈대를 결정
static createCoffee(type) {
const factory = factoryList[type];
// type에 따른 팩토리 선택
return factory.createCoffee();
// 선택된 팩토리에서 인스턴스 생성해서 가져와(주입해) 스태틱 메서드의 리턴 값이 된다.
}
}
const coffee = CoffeeFactory.createCoffee("LatteFactory");
console.log(coffee.name)
팩토리 패턴은 객체 생성의 관심사를 분리(SoC, separation of concern)하여 유연성과 유지보수성을 높이는 데 도움을 준다. 하지만 프로젝트의 규모와 구조에 따라 팩토리 패턴의 적합성을 고려해야 합니다.