정적 팩토리 메서드(Static Factory Method)란?

wujin·2023년 5월 19일
1

정적 팩토리 메서드(Static Factory Method)

Static Factory Method는 해당 클래스의 객체를 생성하는 역할을 하는 메서드이다.

객체 생성을 단순히 Constructor를 이용하여 직접 생성하는 것 대신, 객체 생성 로직을 static 메서드 내에 숨김으로써 클라이언트 코드와의 결합도를 줄이고, 더욱 유연하고 명확한 객체 생성을 가능하게 한다.


장점

  • 메소드의 이름을 명시적으로 지정할 수 있다.
    생성자는 이름을 변경할 수 없지만, Static Factory Method는 보다 명확한 이름을 지정할 수 있어 가독성이 좋고, 객체 생성의 의도를 명확하게 나타낼 수 있다.

  • 매번 새로운 객체를 생성할 필요가 없다.
    이는 성능 최적화에 도움이 될 수 있으며, 불변 클래스의 경우 동일한 객체를 반복적으로 제공할 수 있다.

  • 반환 타입의 하위 타입 객체를 반환할 수 있다.
    이는 인터페이스 기반 프레임워크를 만드는 데 유용하며, 클래스의 공개 API를 덜 노출하면서도 객체를 반환할 수 있다.

  • 반환할 객체의 클래스를 변경할 수 있는 유연성을 제공한다.
    즉, 메소드의 반환 타입이 입력 매개변수에 따라 달라질 수 있습니다.


단점

  • 상속의 제한
    Static Factory Method만 제공하고 생성자를 private로 선언하는 클래스는 상속할 수 없다. 왜냐하면 하위 클래스가 상위 클래스의 생성자를 호출해야 하는데 이가 불가능하기 때문이다.

  • Static Factory Method와 다른 정적 메소드를 구별하기 어렵다
    API 문서를 자세히 읽지 않으면, 어떤 메소드가 Static Factory Method인지, 단지 Static method인지 구별하기 어려울 수 있다. 이 문제는 명명 규칙을 잘 따르는 것으로 어느 정도 완화할 수 있다.

    자바에서는 다음과 같은 명명 규칙이 자주 사용된다.
    of, from, parse, valueOf, instanceOf, getInstance, newInstance, getType, newType

  • API 문서를 작성하는데 제약
    일반적으로 개발자들은 API 문서에서 생성자를 쉽게 찾을 수 있지만, Static Factory Method는 일반적인 메소드와 동일하게 취급되므로 찾기가 어려울 수 있다. 따라서, API 사용자에게 이 메소드들이 있는 것을 알려주기 위해 추가적인 노력이 필요하다고 한다.


예시

of()

하나 이상의 매개변수를 받아서 해당 타입의 적합한 인스턴스를 반환한다.

  • Optional.java

  • LocalDate.java

from()

하나의 매개변수를 받아서 해당 타입의 적합한 인스턴스를 반환한다. 매개변수의 타입은 반환될 인스턴스와 다를 수 있다.

  • LocalDate.java

parse()

문자열을 받아서 해당 타입의 적합한 인스턴스를 반환한다.

  • LocalDate.java

0개의 댓글