팩토리 메소드 패턴(Factory method pattern)
생성 패턴 중 하나로 객체를 생성할 때 어떤 클래스의 인스턴스를 만들지 서브 클래스에서 결정합니다.
즉, 인스턴스 생성을 서브 클래스에게 위임합니다.
부모(상위) 클래스 코드에 구체 클래스 이름을 감추기 위한 방법으로도 사용합니다.
부모 추상 클래스는 인터페이스에만 의존하고 실제로 어떤 구현 클래스를 호출할 지는 서브 클래스에서 구현합니다.
이렇게 하면 새로운 구현 클래스가 추가되어도 기존 Factory 코드의 수정없이 새로운 Factory를 추가하면 됩니다.
팩토리 메소드 패턴의 구조
팩토리 메소드 패턴 코드
Product 인터페이스
/**
* 물건 A의 클래스
*/
public class CreateProductA implements Product{
@Override
public void producting() {
System.out.println("ProductA create");
}
}
Product 클래스
/**
* 물건 A의 클래스
*/
public class CreateProductA implements Product{
@Override
public void producting() {
System.out.println("ProductA create");
}
}
Factory 추상 클래스
/**
* 물건을 만드는 팩토리 추상 클래스
*/
public abstract class Factory {
/** Instance 생성시 abstract create() 호출하여 생성 */
/** 외부에서 객체 생성 시 해당 메소드로 호출, but 어떤 타입의 객체인지는 하위 클래스에서 정의 */
public Product newInstance(){
Product p = create();
p.producting();
return p;
}
/** 접근 제한을 위해 protected 사용 */
protected abstract Product create();
}
Factory 하위 클래스
/**
* A의 타입을 만드는 팩토리 하위 클래스
*/
public class FactoryA extends Factory{
@Override
protected Product create() {
return new CreateProductA(); /** 클래스마다 만드는 물건타입이 달라짐 */
}
}
생성
public class FactoryMain {
public static void main(String[] args) {
/** 물건 A만드는 팩토리 */
Factory f = new FactoryA();
Product p = f.newInstance(); /** newInstance()에서 create A */
// CreateProduct 클래스에 대한 의존성 없이 상위클래스로 인스턴스 사용 가능
}
}
팩토리 메소드 패턴 장단점
장점
1. 수정에는 닫혀있고 확장에는 열려있는 개방폐쇄의 원칙(OCP)을 잘 지킬 수 있습니다.
2. 확장할 때 기존 코드의 변경이 없어도 됩니다. ex) B팩토리 생성에 대하여 상위클래스 수정없이 하위 클래스만 정의하여 만들 수 있습니다.
단점
1. 간단한 기능을 사용할 때보다 많은 클래스를 정의해야 하기 때문에 코드량이 증가합니다.
'Spring > 0. Design Pattern' 카테고리의 다른 글
5. 옵저버 패턴(Observer Pattern) (0) | 2024.06.14 |
---|---|
3. 프록시 패턴(Proxy Pattern) (0) | 2024.05.27 |
2. 어댑터 패턴(Adapter Pattern) (0) | 2022.09.09 |
1. 싱글톤 패턴(Singleton Pattern)과 멀티스레드 환경의 싱글톤 패턴 (0) | 2022.08.01 |