팩토리 패턴

김세빈·2025년 4월 24일

디자인패턴

목록 보기
3/7

팩토리 패턴(Factory Pattern)으로 유지보수성을 높이는 방법

팩토리 패턴은 객체 생성 로직을 클라이언트 코드에서 분리하여, 객체 생성과 관련된 책임을 별도의 클래스나 메서드로 위임하는 디자인 패턴입니다. 이 패턴을 사용하면 코드의 유지보수성과 확장성이 높아지며, 객체 생성 방식이 변경되더라도 기존 코드를 최소한으로 수정하면서 유연하게 대처할 수 있습니다.

특히 상속 관계에 있는 클래스들에서 상위 클래스는 객체 생성의 뼈대를 결정하고, 하위 클래스는 구체적인 객체 생성 로직을 담당하는 구조를 가질 수 있어 패턴의 응집력과 활용성이 높아집니다.

예제 코드

아래는 커피를 만드는 예제를 팩토리 패턴으로 구현한 코드입니다.

// 상위 팩토리 클래스
class CoffeeFactory {
  static createCoffee(type) {
    const factory = factoryList[type];
    return factory.createCoffee();
  }
}

// 커피 종류 클래스들
class Latte {
  constructor() {
    this.name = "Latte";
  }
}

class Espresso {
  constructor() {
    this.name = "Espresso";
  }
}

// 각 커피를 생성하는 하위 팩토리 클래스
class LatteFactory extends CoffeeFactory {
  static createCoffee() {
    return new Latte();
  }
}

class EspressoFactory extends CoffeeFactory {
  static createCoffee() {
    return new Espresso();
  }
}

// 팩토리 목록
const factoryList = {
  LatteFactory: LatteFactory,
  EspressoFactory: EspressoFactory,
};

// 실행 함수
const main = () => {
  const coffee = CoffeeFactory.createCoffee("LatteFactory");
  console.log(coffee.name); // "Latte"
};

main();

팩토리 패턴의 장점

  • 유지보수가 용이합니다
    새로운 커피 종류가 추가되거나 생성 방식이 변경되어도, 하위 클래스만 수정하면 되므로 전체 코드에 미치는 영향이 적습니다.

  • 의존성을 줄입니다
    클라이언트 코드에서는 구체적인 클래스(new Latte(), new Espresso())를 알 필요 없이, CoffeeFactory만 통해 객체를 생성할 수 있습니다.

  • 확장성이 뛰어납니다
    새로운 커피 타입을 추가할 때 기존 코드를 거의 수정하지 않고 기능을 확장할 수 있습니다.

0개의 댓글