티스토리 뷰

반응형

 

클래스의 인스턴스를 얻는 전통적인 수단은 public 생성자.

대신 정적팩터리 메서드를 제공하자.

장점

  • 이름을 가질 수 있다. 생성자 자체만으로는 반환될 객체의 특성을 제대로 설명하지 못한다.
  • 호출될 때마다 인스턴스를 새로 생성하지는 않아도 된다.
    ex). Boolean.valueof(boolean) 메서드
  • 반환 타입의 하위 타입 객체를 반환할 수 있는 능력
    반환할 객체의 클래스를 자유롭게 선택할 유연성 제공 ( 구현 클래스를 공개하지 않고도 그 객체를 반환할 수 있다!). 예시로 자바 컬렉션 유틸리티 구현체 대부분이 단 하나의 인스턴스화 불가 클래스인java.util.Collections 에서 정적 팩터리 메서드를 통해 얻을 수 있다.
  • 입력 매개변수에 따라 매번 다른 클래스의 객체를 반환할 수 있다.(반환 타입의 하위 타입이기만 하면)
    클라이언트는 팩터리가 건네주는 객체가 어느 클래스의 인스턴스인지 알 수도 없고 알 필요도 없다.
  • 정적 팩터리 메서드를 작성하는 시점에는 반환할 객체의 클래스가 존재하지 않아도 된다.

 

단점

  • 상속을 하려면 public이나 proteced 생성자가 필요하니 정적 팩터리 메서드만 제공하면 하위 클래스를 만들 수 없다.
    → 상속보다 합성을 사용하도록 유도하여 오히려 장점일수도? 상속은 두 클래스의 결합도를 높이기에 합성을 사용하는 것이 더 좋다.
  • 정적 팩터리 메서드는 프로그래머가 찾기 어렵다. 메서드 명명을 잘 지어야한다.

 

결론

장단점을 잘 고려하여 때에 맞춰 사용하자.

그래도 정적 팩터리를 사용하는게 더 유리한 경우가 많으므로 습관을 들이자.

반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday