✏️ 팩토리 패턴
팩토리 패턴(Factory Pattern)은 객체를 사용하는 코드에서 객체 생성 부분을 떼어내 추상화한 패턴이자 상속 관계에 있는 두 클래스에서 상위 클래스가 중요한 뼈대를 결정하고, 하위 클래스에서 객체 생성에 관한 구체적인 내용을 결정하는 패턴입니다.
상위 클래스와 하위 클래스가 분리되기 때문에 느슨한 결합을 가지며, 상위 클래스에서는 인스턴스 생성 방식에 대해 전혀 알 필요가 없기 때문에 더 많은 유연성을 갖게 됩니다. 그리고 객체 생성 로직이 따로 떼어져 있기 때문에 코드를 리팩토링 하더라도 한 곳만 고칠 수 있게 되니 유지 보수성이 증가됩니다.
💡 추상화 (Abstracting)
추상화는 복잡한 시스템, 모델 , 또는 실제 상황에서 중요한 부분만을 간략화하여 표현하는 과정이나 결과를 의미합니다.
💻 자바스크립트의 팩토리 패턴
const num = new Object(42);
const str = new Object('abc');
console.log(num.constructor.name); // Number
console.log(str.constructor.name); // String
숫자로 전달하거나 문자열을 전달함에 따라 다른 타입의 객체를 생성하는 것을 확인할 수 있습니다. 즉, 전달받은 값에 따라 다른 객체를 생성하며 인스턴스의 타입 등을 정의합니다.
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 };
class CoffeFactory {
static createCoffee(type) {
const factory = factoryList[type];
return factory.createCoffee();
}
}
const order = () => {
const latte = CoffeFactory.createCoffee('LatteFactory');
console.log(latte.name); // Latte
const espresso = CoffeFactory.createCoffee('EspressoFactory');
console.log(espresso.name); // Espresso
};
order();
CoffeeFactory라는 상위 클래스가 중요한 뼈대를 결정하고 하위 클래스인 LatteFactory와 EspressoFactory가 구체적인 내용을 결정하고 있습니다.
참고로 이는 의존성 주입이라고 볼 수도 있습니다. CoffeeFactory에서 LatteFactory의 인스턴스를 생성하는 것이 아닌 LatteFactory에서 생성한 인스턴스를 CoffeeFactory에 주입하기 있기 때문입니다.
const factoryList = { LatteFactory, EspressoFactory };
class CoffeFactory {
static createCoffee(type) {
const factory = factoryList[type];
return factory.createCoffee();
}
}
const coffeFactory = new CoffeFactory();
console.log(coffeFactory.createCoffee()); // Error
또한, CoffeeFactory를 보면 static으로 createCoffee() 정적 메소드를메서드를 정의한 것을 알 수 있는데, 정적 메서드를 쓰면 클래스의 인스턴스 없이 호출이 가능하며 메모리를 절약할 수 있고 개별 인스턴스에 묶이지 않으며, 클래스 내의 함수를 정의할 수 있는 장점이 있습니다
'ComputerScience > 디자인 패턴' 카테고리의 다른 글
이터레이터 패턴 (1) | 2023.11.13 |
---|---|
프록시 패턴과 프록시 서버 (0) | 2023.11.10 |
옵저버 패턴 (0) | 2023.11.10 |
전략 패턴 (0) | 2023.11.10 |
싱글톤 패턴 (0) | 2023.11.10 |
댓글