팩토리 패턴 (Factory Pattern) for JavaScript

최은우·2023년 4월 13일
0

Design Pattern

목록 보기
3/5
post-thumbnail

팩토리 패턴

팩토리 클래스는 객체를 생성하는 과정을 캡슐화하여 객체 생성을 추상화하는 디자인 패턴입니다. 객체를 생성하는 코들르 다른 코드와 분리시킬 수 있어 유지보수성이 높아지고 코드 재사용성도 높아집니다.

팩토리 클래스

객체 생성을 담당하는 클래스
객체를 생성하는 인터페이스를 정의하고 인터페이스를 구현하는 클래스를 이용하여 객체를 생성합니다.
코드에서 직접 객체를 생성하는 부분을 제거할 수 있고 팩토리 클래스에서 객체 생성에 대한 결정을 내릴 수 있습니다.


역시 이해가 잘 가지 않으니 예시 코드를 보며 살펴봅시다.

// Product interface
class Car {
  constructor(model, year) {
    this.model = model;
    this.year = year;
  }

  getInfo() {
    return `This is a ${this.year} ${this.model}.`;
  }
}

// Factory
class CarFactory {
  createCar(model, year) {
    return new Car(model, year);
  }
}

// Usage
const carFactory = new CarFactory();
const myCar = carFactory.createCar("Tesla Model S", 2022);
console.log(myCar.getInfo()); // Output: This is a 2022 Tesla Model S.

위의 코드에서 CarFactory클래스는 상위 클래스로 중요한 뼈대를 결정하고있습니다.

CarFactory에서 createCar 메소드로 요청에 따라 적절한 제품 객체를 생성하고 반환합니다.
하지만 Car클래스는 구체적인 제품 객체를 생성하는 기능을 갖고 있지 않습니다.

//Usage 부분을 보면
myCar에 대한 정보를 알고 싶어서 객체를 생성하고 출력하는 과정에서
Car클래스는 직접적인 언급이 전혀 없는 것을 확인할 수 있습니다.


여기서 우리는 앞의 싱글톤 패턴에서 봤던 것과 유사한 점을 발견할 수 있습니다.

바로 의존성 주입입니다.

CarFactoryCar의 인스턴스를 직접 생성하는 것이 아니라, Car 클래스에서 생성한 인스턴스를 주입받아 사용하기 때문입니다. 이를 통해 CarFactoryCar 클래스와 결합도를 낮추고, 더 유연하고 확장 가능한 코드를 작성할 수 있게 됩니다.


팩토리 패턴의 장 단점에 대해 살펴봅시다.

장점

  1. 객체 생성 과정을 캡슐화하여 객체 생성 과정을 추상화 할 수 있습니다. 이로 인해 객체 생성에 대한 일관성 있는 처리가 가능해지며 유지 보수 및 코드 변경이 용이해집니다.
  2. 코드에서 객체 생성하는 부분(CarFactory)과 객체를 사용하는 부분(Car)을 분리하여 객체 생성과 사용에 대한 유연성을 높일 수 있습니다.
  3. 클라이언트는 객체의 실제 클래스를 알 필요 없이 팩토리 클래스를 사용하여 객체를 생성할 수 있으므로 코드의 의존성을 낮출 수 있습니다.
  4. 팩토리 패턴을 사용하면 객체의 생성 과정을 중앙 집중화 할 수 있으므로 객체의 생성 로직을 한 곳에서 관리하고 변경하기 쉬워집니다.

단점

  1. 팩토리 클래스를 추가로 작성해야 하므로 코드의 복잡도가 증가할 수 있습니다.
  2. 팩토리 클래스의 존재로 인해 객체 생성 로직이 복잡해질 수 있습니다. 이로 인해 팩토리 클래스의 유지 보수가 어려워 질 수 있습니다.
  3. 객체의 생성 과정이 추가로 이루어지므로 약간의 성능 손실이 발생할 수 있습니다.

0개의 댓글

Powered by GraphCDN, the GraphQL CDN