[디자인 패턴] 팩토리 메서드

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 반환 가능

  • 다형적으로 개체 생성 가능

    • 이 패턴을 가상 생성자 패턴이라고도 함.