쉬운 이해를 돕기 위해 우선 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."
=> 객체 지향 원칙이 적용되어 있다!