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


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

  • 2016년 02월 02일에 작성됨

조회수 215


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 메소드와 쉽게 구별할 수 없다.
  • 2016년 02월 02일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close