[Design Pattern] Factory Pattern

먹보·2023년 1월 29일
0

MUK_BO's Design Pattern

목록 보기
2/9

✍ Factory Pattern 이란...

쉬운 이해를 돕기 위해 우선 Factory공장을 생각해보자, 공장에서는 설비만 갖쳐져 있고 생성 외에 공정은 외부에서 진행을 하게 되며 외부인들은 공장 내부에서 어떤 공정을 거쳐서 제품이 만들어졌는지 알지 못하게 된다. 이런 원리가 프로그래밍에서의 Factory Pattern에 적용 되었다고 보면된다.

프로그램 내에서, 상위 클래스가 중요한 뼈대를 결정하고, 하위 클래스에서 객체 생성에 관한 구체적인 내용을 결정하는 패턴이다

사실 Factory Pattern의 개념이 정립되기 이전에, 우리는 이미 많은 프로젝트 내에서 적용하고 있다는 사실을 깨달았을 수도 있다.

코드를 통해 Factory Pattern의 구조를 한 번 보고 넘어가자.

class Car {
  constructor(type) {
    this.type = type;
  }

  drive() {
    console.log(`Driving a ${this.type} car.`);
  }
}

class SportsCar extends Car {
  constructor() {
    super("sports");
    this.numWheels = 4;
  }
}

class Sedan extends Car {
  constructor() {
    super("sedan");
    this.numWheels = 4;
  }
}

class CarFactory {
  static createCar(type) {
    switch (type) {
      case "sports":
        return new SportsCar();
      case "sedan":
        return new Sedan();
      default:
        throw new Error("Invalid car type.");
    }
  }
}

const sportsCar = CarFactory.createCar("sports");
console.log(sportsCar.numWheels); // 4
console.log(sportsCar.type); // "sports"
console.log(sportsCar.drive()); // "Driving a sports car."

const sedan = CarFactory.createCar("sedan");
console.log(sedan.numWheels); // 4
console.log(sedan.type); // "sedan"
console.log(sedan.drive()); // "Driving a sedan car."

✍ Factory Pattern를 사용하는 이유

  1. 생성할 객체 타입이 정해지지 않았을 때
  2. 생성할 객체를 기술하는 책임을 서브클래스에게 정의하고자 할 때
  3. 객체 생성의 책임을 서브클래스에 위임시키고 서브클래스에 대한 정보를 은닉하고자 할 때

✍ Factory Pattern의 장점

  1. 추상화 : 상위 클래스는 뼈대만 만들어져 있기 때문에, 상대적으로 느슨한 결합을 가지게 되어 유연성이 뛰어나다.
  2. 캡슐화 : 리팩토링 시기에도 유연성이 증가되어 한 곳만 고치면 되니 유지 보수성이 증가한다.
  3. SRR (Single Resposibility Pinciple) : 객체 생성 시 역할을 분리하므로 SRR의 원칙을 따른다.
  4. 확장성이 용이하다.
  5. 재사용성이 좋다

=> 객체 지향 원칙이 적용되어 있다!

✍ Factory Pattern의 단점

  1. 객체 수의 증가에 따라 코드의 가독성이 떨어 질 수 있다.
  2. 뼈대가 있기 때문에 상속을 해야만 하위 클래스를 생성할 수 있다.
profile
🍖먹은 만큼 성장하는 개발자👩‍💻

0개의 댓글