1. 팩토리 패턴 (Factory Pattern) 이란?
객체 생성 과정을 팩토리 클래스로 분리하여 캡슐화하는 패턴
2. 특징
팩토리 클래스에 객체 생성을 선택하는 로직을 넣어 캡슐화
클라이언트에서는 팩토리 클래스로 객체를 구현하므로 어떤 구현체인지 별도 관리하지 않아도 됨
3. 사용 예시
특정 시점마다 세금 계산의 기준이 변경하여 계산해줄때
어떤 기준으로 계산할지를 정해주는 Factory Class 의 예시
기능
- calculateTax(): 세금 계산
세금 계산 기능을 정의한 TaxCalculator Interface 를 생성한다.
interface TaxCalculator {
double calculateTax(double amount);
}
버전 별 계산 기능 구현
- TaxCalculatorV1: 세율 10% 로 계산
class TaxCalculatorV1 implements TaxCalculator {
@Override
public double calculateTax(double amount) {
System.out.println("Using Tax Calculation Version 1");
return amount * 0.1;
}
}
- TaxCalculatorV2: 세율 15% 로 계산
class TaxCalculatorV2 implements TaxCalculator {
@Override
public double calculateTax(double amount) {
System.out.println("Using Tax Calculation Version 2");
return amount * 0.15;
}
}
팩토리 구현
- 2025년 3월 28일 13시 이전 까지는 V1 (세율 10%) 로직 적용
- 2025년 3월 28일 13시 부터는 V2 (세율 15%) 로직 적용
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
class TaxCalculatorFactory {
private static final LocalDateTime VERSION_CHANGE_TIME = LocalDateTime.of(2025, 3, 28, 13, 0, 0, 0);
public static TaxCalculator getTaxCalculator() {
LocalDateTime currentTime = LocalDateTime.now();
if (currentTime.isBefore(VERSION_CHANGE_TIME)) {
return new TaxCalculatorV1();
} else {
return new TaxCalculatorV2();
}
}
}
사용 예시
public class Main {
public static void main(String[] args) {
double amount = 1000.0;
TaxCalculator taxCalculator = TaxCalculatorFactory.getTaxCalculator();
double tax = taxCalculator.calculateTax(amount); // console: Using Tax Calculation Version 2
System.out.println("Calculated Tax: " + tax); // console: Calculated Tax: 150.0
}
}
4. 장단점
장점
- 객체 생성 로직을 팩토리로 분리하여, 클라이언트가 객체 생성에 대한 세부 사항을 제어하지 않아도 됨
- 새로운 기준에 따른 구현체가 추가되어도 팩토리 클래스만 수정하면 되므로 코드의 확장성 뛰어남
단점
- 객체 생성 로직을 팩토리에서 관리하므로 경우에 따라 객체를 생성하는 방식에 대한 유연성이 제한
5. 결론
팩토리 패턴은 객체 생성 로직이 복잡하거나 다양한 구현체가 필요할 때 유용함.
객체 생성 방식을 클라이언트 코드에서 분리하고 캡슐화하여 코드의 확장성과 유연성을 높일 수 있음.
객체 생성이 단순하고 변하지 않으면 굳이 팩토리 패턴 사용하지 않고 명시적으로 사용하는게 가독성에 좋음.
'디자인패턴' 카테고리의 다른 글
[디자인 패턴] 상태 패턴 (State Pattern) (0) | 2025.03.04 |
---|