[디자인 패턴] 팩토리 메서드
2026.07.15. 22:31
팩토리 메서드
사용할 클래스를 정확히 몰라도 개체 생성을 가능하게 해주는 패턴
ex) 음료를 주문할 때
음료를 주문할 때 컵 크기를 고름 -> 고객은 스몰, 미디엄, 라지를 선택할 뿐 정확한 ml를 몰라도 됨.
구현
-> enum 매개변수를 가진 메서드( 정적 메서드 createOrNull() ) 호출 -> 생성자 호출
public Cup createOrNull(CupSize size){
switch(size) :
case SMALL:
return new PaperCup(473);
case Medium:
case Large:
}생성자 대신 정적 메서드를 사용하는 것의 장점
null을 반환 가능
생성자는 생성이 불가능한 경우 예외를 던질 수 밖에 없음.
반환형이 없기 때문.
다형적인 팩토리 메서드 패턴 -1
createOrNull() 을 오버라이드 처리.
ex) CupSize의 enum 객체가 지역이나 다른 변수에 따라 값이 달라지는 경우
createCupOrNull(CupSize size) 라는 팩토리 함수로 컵을 생성
-> 인터페이스 or 추상메서드로 해당 함수를 선언 -> 가상 생성자화
-> 해당 함수를 오버라이딩하면 다형적 형태의 팩토리 메서드됨.
다형적인 팩토리 메서드 패턴 -2
생성된 결과 개체에 대한 다형성 처리.
public Cup createOrNull(CupSize size){
switch(size) :
case SMALL:
return new PaperCup(473);
case Medium:
return new GlassCup(561);
case Large:
}팩토리 메서드의 장점
클라이언트는 본인에게 익숙한 인자를 통해 개체를 생성 가능
생성자에서 오류 상황 감지 시 null 반환 가능
다형적으로 개체 생성 가능
이 패턴을 가상 생성자 패턴이라고도 함.