반응형
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 |