개발 상식/디자인 패턴

[디자인 패턴] 팩토리 메서드(Factory Method) 패턴

kku_lurgi 2023. 11. 9. 09:58

❓팩토리 메서드 패턴?

팩토리 메서드 패턴은 팩토리 패턴에서 확장된 패턴이라 생각하시면 됩니다. 기존 팩토리 패턴은 객체의 생성을 처리하는 동작을 클래스 혹은 메서드로 분리하는 것을 말하는데요, 여기서 한 발 더 나아가 팩토리 메서드 패턴은 ‘서브 클래스’ 에서 구현하는 패턴을 말합니다.

팩토리 패턴은 여기서 자세하게 보실 수 있습니다!

 

[디자인 패턴] 팩토리(Factory) 패턴

❓팩토리 패턴 팩토리 패턴은 생성 패턴중에서도 가장 기본이 되는 패턴이라고 합니다. 객체 생성 처리를 위임하여 객체 지향의 문제점을 해결할 수 있다고 하네요. 객체 생성을 담당하는 동작

lurgi.tistory.com

❗팩토리 메서드의 예시 (JS)

// 추상 동물 클래스 (인터페이스로 간주)
class Animal {
  makeSound() {
    // 추상 메서드 (서브클래스에서 구현)
    throw new Error("This method must be overridden");
  }
}

// 각각의 동물 클래스
class Dog extends Animal {
  makeSound() {
    return "멍멍!";
  }
}

class Cat extends Animal {
  makeSound() {
    return "야옹!";
  }
}

// 동물을 생성하는 팩토리 메서드
function animalFactory(type) {
  if (type === "dog") {
    return new Dog();
  } else if (type === "cat") {
    return new Cat();
  } else {
    throw new Error("Unknown animal type");
  }
}

// 팩토리 메서드를 통해 동물 생성 및 동작 테스트
const myDog = animalFactory("dog");
const myCat = animalFactory("cat");

console.log(myDog.makeSound()); // 출력: 멍멍!
console.log(myCat.makeSound()); // 출력: 야옹!

팩토리 메서드를 이용하여 객체를 생성하는 예시입니다.

Animal 클래스는 추상 클래스로, 내부에 있는 메서드는 상속을 통해 오버라이딩 하여 동물 울음소리를 반환합니다. 이렇게 추상화, 인터페이스를 활용하여 모습을 강제합니다.

오버라이딩에 대해서 적은 글을 첨부합니다!

 

[개발 상식] 오버로딩과 오버라이딩(Overloading & Overriding)

오버로딩과 오버라이딩을 알아봅시다. 프론트엔드를 공부하기 때문에 타입스크립트를 기준으로 글을 적습니다. 우선 오버로딩과 오버라이딩을 알아보기 앞서 Call signature와 다형성(Polymorphism)

lurgi.tistory.com

이렇게 상속을 이용한 패턴으로 새로운 서브클래스가 추가될 때마다 직접 코드를 수정할 필요가 없다는 것입니다.

❓팩토리 메서드 패턴의 장점?

객체 생성을 담당하는 메서드를 서브 클래스에서 구현하도록 하여 생성한는 코드를 호출하는 코드로 부터 분리시켜, 객체 생성 시 클래스를 변경하거나 확장하기 쉽게 만들어 준다는 것!

특히 예제에서도 보았듯, 다양한 서브 클래스가 필요한 시점에서 코드를 단순화 할 수 있다는 것입니다!