팩토리 패턴에 대해 알아보자

객체생성의 공장, 팩토리 패턴 by ZeroCho

2024-10-24 · 3분 · 조회 1

@ZeroChoTV님의 팩토리 패턴 를 보고 정리한 내용입니다.

팩토리 패턴이란?

팩토리 패턴은 객체를 생성하는 과정을 추상화하여 다양한 방식으로 객체를 생성할 수 있게 한다.

간단한 예제

function animalFactory(type) {
  if (type === 'cat') {
    return new Cat();
  } else {
    return new Dog();
  }
}
 
animalFactory('cat');
animalFactory('dog');

위와 같이 여러 객체를 생성하는 로직을 animalFactory 함수로 추상화 할 수 있는데,
이를 객체의 생성을 담당하는 팩토리로 만들어서 사용할 수 있다.

class Animal {
  factory(type) {
    if (type === 'cat') {
      return new Cat();
    } else {
      return new Dog();
    }
  }
}
 
new Animal().factory('cat');
new Animal().factory('dog');

의도를 밝혀주는 메서드 이름

직관적인 메서드 이름을 통해 코드의 가독성을 높이고 의도를 명확히 할 수 있다.

class Animal {
  createCatOrDog(type) {
    if (type === 'cat') {
      return new Cat();
    } else {
      return new Dog();
    }
  }
}
 
new Animal().createCatOrDog('cat');
new Animal().createCatOrDog('dog');

복잡한 예제

class Cat {
  constructor() {
    this.sound = '야옹';
  }
}
class Dog {
  constructor() {
    this.sound = '멍멍';
  }
}
 
class CatFactory {
  makeSound() {
    console.log('야옹');
  }
}
class DogFactory {
  makeSound() {
    console.log('멍멍');
  }
}
 
const animalList = { CatFactory, DogFactory };
 
class Animal {
  makeSound(type) {
    return new animalList[type]().makeSound();
  }
}
 
new Animal().createCatOrDog('cat').makeSound(); // 야옹
new Animal().createCatOrDog('dog').makeSound(); // 멍멍

결론

팩토리 패턴의 장점은

  • 유연성 : 객체 생성을 위한 로직을 외부에서 추상화하여 캡슐화할 수 있다.
  • 재사용성 : 동일한 객체 생성 로직을 여러 군데 사용할 수 있다.
  • 확장성 : 새로운 객체 타입을 추가할 때 기존 코드를 수정할 필요 없이 메서드를 확장할 수 있다.

이러한 장점을 통해 객체 생성에 대한 로직을 캡슐화하고, 객체 생성을 담당하는 팩토리를 통해 객체 생성을 추상화하여 사용할 수 있다.

Home
Posts
Notes