생성자 대신 static 팩토리(factory)메소드를 사용하라는게 무슨말인가요?

조회수 2927회

자바로 프로그램을 짜고 있는데 아는 형이 생성자 말고 static 팩토리 메소드를 사용하라고 하더라고요. 이유는 안가르쳐줬는데 이게 무슨말인지 잘 모르겠습니다.

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    보통 클래스의 객체를 생성할때 public 생성자를 사용하는데요. 꼭 이런 방법 말고도 public static factory메소드를 만드는 방법도 있습니다. 이 메소드는 해당 클래스의 인스턴스를 하나 생성하여 반환해주는 메소드인데 생성자를 대신해서 static 팩토리 메소드를 사용하면 다음과 같은 장단점이 있습니다.

    1.자기만의 이름을 가질 수있다. 생성자와는 다르게 자기 고유의 이름이 있기때문에 다른 사용자들이 이 메소드가 어떤 일을 하는지 보다 쉽게 이해 할 수 있습니다.

    1. 호출 될 때마다 새로운 객체를 생성하는 것을 막을 수 있다.
      불필요하게 중복된 인스턴스의 생성을 막기 위해 이미 생성된 인스턴스들을 저장했다가 반복 사용할 수 있게해주고 이미 생성된 인스턴스를 다시 사용하게 만들 수 있다.

    2. 반환 할 수있는 객체 타입의 제약이 없다. static 팩토리 메소드는 반환할 자료형을 선택 할 수 있어서 객체의 클래스를 선택해야 할 때 뛰어난 유연성을 제공한다.

    3. 매개변수화 타입의 인스턴스를 생성하는 코드를 간결하게 해준다. static 팩토리 메소드를 사용하면 컴파일러가 타입 매개변수를 해결해준다. 이를 타입 추론이라고 하며 아래 소스를 보면 이해가 쉽다. Map<String, List<String>> m = new HashMap<String, List<String>>(); 타이핑 힘들고 복잡하다. 이때 HashMap에서 아래와 같은 static 팩토리 메소드가 제공된다고 가정하면 가정이다 가정 실제 존재하지는 않는다.

      public static <K,V> HashMap<K,V> newInstance(){
      return new HashMap<K,V>();
      }
      Map<String, List<String>> m = new HashMap.newInstance();
      

      타입 매개변수를 연달아 두번 주었지만 static 메소드 제공으로 한번으로 줄어듬을 확인할 수 있다.

    그렇다면 단점은 어떤게 있을까?

    1. 인스턴스 생성을 위해 static 팩토리 메소드만 갖고 있으면서 public이나 protected 생성자가 없는 클래스의 경우 서브 클래스를 가질 수 없다. 이럴 경우 상속이 불가능하하며 컴포지션 패턴 사용.
    2. 다른 static 메소드와 쉽게 구별할 수 없다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)