Java/디자인 패턴

생성 패턴_팩토리 메서드 패턴

minquu 2025. 7. 18. 17:33
반응형

1. 🏭 팩토리 메서드 패턴이란?

Factory Method Pattern은 객체 생성 코드를 별도의 팩토리 메서드로 분리하여, 상위 클래스에서는 객체 생성 방식만 정의하고, 실제 생성은 하위 클래스에서 담당하게 하는 패턴입니다.

  • 즉, 객체 생성에 대한 책임을 서브클래스에게 위임합니다.
  • 핵심 목적: 객체 생성 코드와 객체 사용 코드를 분리

 


2. 🔧 언제 사용하나?

다음과 같은 경우에 유용합니다:

  • 객체 생성 로직이 복잡하거나 다양한 형태의 객체를 생성해야 할 때
  • 코드의 유연성(확장성) 을 높이고 싶을 때
  • 인터페이스/추상 클래스만 알고 구체 클래스를 몰라도 되는 구조가 필요할 때
  • 기존 코드를 변경하지 않고 새로운 객체를 쉽게 추가하고 싶을 때

예: 로그 기록 방식이 ConsoleLogger → FileLogger → DBLogger 등으로 다양하게 변경될 수 있는 경우

 


3. ⚖️ 장단점

장점 👍단점 👎
생성 로직과 사용 로직 분리 (SRP 준수) 클래스가 많아질 수 있음
클라이언트 코드 변경 없이 객체 확장 가능 (OCP 준수) 추상화로 인해 구조가 복잡해질 수 있음
객체 생성의 책임을 서브클래스로 위임 가능 간단한 경우에는 오히려 오버 엔지니어링 가능

 


 

4. 💡 예시 코드 (Java)

// [1] Product 인터페이스
public interface Animal {
    void speak();
}

// [2] Concrete Product들
public class Dog implements Animal {
    public void speak() {
        System.out.println("멍멍!");
    }
}

public class Cat implements Animal {
    public void speak() {
        System.out.println("야옹!");
    }
}

// [3] Creator 추상 클래스 (팩토리 역할)
public abstract class AnimalFactory {
    public abstract Animal createAnimal();  // 팩토리 메서드
}

// [4] Concrete Creator들 (팩토리 메서드 구현)
public class DogFactory extends AnimalFactory {
    public Animal createAnimal() {
        return new Dog();
    }
}

public class CatFactory extends AnimalFactory {
    public Animal createAnimal() {
        return new Cat();
    }
}

 

🎯 Concrete 클래스들의 역할

1. ✅ Concrete Product (Dog, Cat)

  • 역할: 실제 사용할 객체의 구체적인 클래스.
  • 특징: Animal 인터페이스를 구현해서, 각 타입별로 고유한 동작(speak())을 정의합니다.
  • 이점: 클라이언트는 Animal이라는 추상 타입만 알고 있으면 되고, Dog나 Cat의 내부 구현은 몰라도 됩니다.

예시:
Dog.speak()는 "멍멍!", Cat.speak()는 "야옹!"처럼 서로 다른 결과를 출력.


2. ✅ Concrete Creator (DogFactory, CatFactory)

  • 역할: 추상 팩토리(AnimalFactory)를 상속받아, 객체 생성 로직을 실제로 구현합니다.
  • 핵심 메서드: createAnimal() — 이 메서드 안에서 어떤 Animal을 만들지 결정합니다.
  • 이점: 새로운 종류의 동물을 추가할 때는 새로운 팩토리만 만들면 됩니다. 기존 코드는 수정할 필요가 없어요. (OCP — 개방-폐쇄 원칙)

예시:

  • DogFactory는 new Dog()를 리턴
  • CatFactory는 new Cat()을 리턴

🎨 비유로 이해해 보기

역할설명예시 비유
Animal (Product) 공통 인터페이스 "음식을 포장하는 규칙"
Dog, Cat (Concrete Product) 실제로 만들어지는 객체 "김밥" / "햄버거"
AnimalFactory (Creator) 공통된 공장 인터페이스 "음식 공장 설계도"
DogFactory, CatFactory (Concrete Creator) 실제 공장 구현체 "김밥공장" / "햄버거공장"
 

💡 요약

클래스역할책임
Concrete Product (Dog, Cat) 실제로 만들어지는 객체 인터페이스 구현 및 기능 정의
Concrete Creator (DogFactory, CatFactory) 객체를 생성하는 주체 팩토리 메서드 구현, 객체 생성 로직 담당

 

 

 

반응형

'Java > 디자인 패턴' 카테고리의 다른 글

생성 패턴 _ 프로토타입 패턴  (1) 2025.07.21
생성 패턴 _ 빌더 패턴  (0) 2025.07.21
생성 패턴 _ 추상 팩토리 패턴  (0) 2025.07.21
생성 패턴 _ 싱글턴 패턴  (0) 2025.04.23