Study

생성자 대신 Static 팩토리 메소드의 사용

부산대보금자리 2022. 11. 2. 15:19

 

장점1. 이름을 가질 수 있다.

생성자의 경우 해당 클래스의 이름이 생성자의 이름이 되므로 이로 인해 생겨나는 객체의 특징이 표현되기 힘들다.

따라서 특정 Static 팩토리 메소드를 통해 생성된 객체의 특징을 규정할 수 있다.

또한 똑같은 타입의 파라미터를 받는 경우 이를 구분 하려면 별도의 Flag가 필요하다.

ex> (String First_name, age, money) vs (String Second_name, age, money)

이 경우 메소드 입장에서는 첫번째 인자가 First_name인지 Second_name인지 구별 되지 않는다.

따라서 이 경우 별도의 Static 팩토리 메소드를 사용하는 것이 유용하다.

 

장점2. 반드시 새로운 객체를 만들 필요가 없다.

하나의 객체를 동일하게 사용하는 경우 한번의 생성만으로 충분하기 때문에 Static 메소드를 통한 반환이 유용하게 사용될 수 있다.

 

장점3. 리턴 타입의 하위 타입 인스턴스를 만들 수도 있다.

라이브러리 및 인터페이스 관점에서 이는 "개념적 무게"를 줄여줄 수 있다.

특정 타입만을 리턴하는 것이 아니라 해당 타입의 하위 타입 인스턴스를 리턴하는 유연함을 보장하고 이는 프로그래머 입장에서 수 많은 하위 인스턴스를 알아야 하는 "개념적 무게"를 줄여줄 수 있다.

 

장점4. 리턴하는 객체의 클래스가 입력 매개변수에 따라 매번 다를 수 있다.

리턴하는 객체의 특징을 리턴받고 싶을 수 있다. 아마 이런 경우는 장점2에 해당하는 하나의 객체일 가능성이 높다.

이 경우 굳이 객체를 리턴 받지 않고 입력 매개변수에 따른 상이한 값을 리턴 받을 수 있다.

 

장점5. 리턴하는 객체의 클래스가 public static 팩토리 메소드를 작성할 시점에 반드시 존재하지 않아도 된다.

 

 

단점1. public 또는 protected 생성자 없이 static public 메소드만 제공하는 클래스는 상속할 수 없다.

따라서 Collections 프레임워크에서 제공하는 편의성 구현체는 상속할 수 없다.