[TIL - 1023] 문제 해결 방법 - 팩토리 메소드 패턴

java

팩토리메소드 패턴

  • 객체를 만드는 공장을 생성해두는 것
    • 왜? 특정 조건에 의해 생성되는 인스턴스(같은 상위클래스의 하위클래스)가 다를 때 구체적인 클래스로 인스턴스 생성하는 코드 작성하지않고 생성 권한을 위임 받은 아이에게 요청하면 결합도를 낮출 수 있기 때문(구체적인 클래스를 명시해서 직접 생성하기보다 맞는 조건이 있으면 생성, 없으면 예외 발생이 되도록 할 수도 있음)
    • 조금 더 나아가면 싱글턴일 때 팩토리 혹은 인스턴스 관리자에게 인스턴스를 특정 조건값을 주고 가져오게 할 수도 있음 : 여기에 더 추가하자면 인스턴스들에게 물어봐서 특정 조건값에 너희 부합하냐라고 묻는 메소드를 요청해서 맞을 때 가져오도록 코드를 짜면 switch 혹은 if ~ else 의 떡칠을 막을 수 있다고 생각이 듦
  • 예제 코드
    • 검색해서 본 예제 코드에서는 팩토리를 abstract로 선언해두고 extends해서 여러 팩토리를 만들고 하는데, 굳이 지금은 적용할 필요를 느끼지 못하여 1 depth를 유지함 뿐만 아니라 abstract 보다 interface로 선언해두는 것이 더 낫지 않을까? 어떤 타입의 인스턴스를 생성하는 능력을 가지고 있는 팩토리라고 생각한다면? 또 팩토리는 상태값이 없을테니 상태 필드도 없을텐데
public class ObjectFactory {

    public static UpperObject of(int value) {
        switch (value) {
            case 2:
                return new ExtensionObjectOne();
            break;

            case 1:
                return new ExtensionObjectTwo();
            break;

            default:
                throw new IllegalArgumentException();
        }
    }
}

interface UpperObject {

}

class ExtensionObjectOne implements UpperObject {

}

class ExtensionObjectTwo implements UpperObject {

}