Effective java 3/E의 item 1의 내용을 참고하여 정리하였습니다.
그동안 객체를 생성할때 초기에는 new 연산자를 사용하였고, 그 이후에는 setter를, 그리고 이후에는 빌더패턴을 사용했었다. Effective Java를 읽으며 상황에 따라 적합한 객체 생성 방식을 정하여 사용해야 함을 알게되었고 그 방법중 하나가 '정적 팩토리 메서드' 방식이다.
생성자를 통해서 객체를 생성해도 불편한 점이 없는데, 왜 정적 팩토리 메서드라는 것을 통해서 객체를 생성해야 할가?
정적 팩토리 메서드를 이용함으로써 얻게되는 장점들을 하나하나 살펴보도록 하겠다.
new 키워드를 이용하여 객체를 생성하게 되면 해당 생성자 혹은 내부 구조를 명확하게 이해하고 있을때 목적에 맞게 객체를 생성할 수 있다. 하지만 정적 팩토리 메서드는 해당 메서드의 이름만으로 해당 객체가 왜 생성되는지, 어떻게 생성되는지를 파악할 수 있는 장점이 있다.
예를 들어 아래의 코드를 보자
Fruit fruit = new Fruit(apple); // 생성자
Fruit fruit = Fruit.createApple(); // 정적 팩토리 메서드
위의 코드를 보면 한눈에 봐도 아래에 작성된 정적 팩토리 메서드 패턴이 어떤 목적의 객체를 생성하는지 확실히 알 수 있다.
상속구조의 클래스에서 자식 클래스를 객체화 할때 정적 팩토리 메서드는 유용하게 사용될 수 있다. 이는 정적 팩토리 메서드가 생성자의 역할을 함과 동시에 반환의 기능을 함께 가지고 있기 때문이다.