개발하는 두더지

[Effective Java 규칙1] 생성자 대신 정적 팩터리 메서드? 본문

Java,Android

[Effective Java 규칙1] 생성자 대신 정적 팩터리 메서드?

덜지 2018. 9. 4. 10:21

Effective Java 2/E 책과 구글링을 통해 내용을 정리하고 개인적인 견해가 포함된 글입니다.


보통 객체를 만들 때 Car car = new Car(); 처럼 생성자를 이용하여 만든다.

생성자 대신 정적 팩터리 메서드로 만든다면 장점은 무엇이 있을까?


1. 정적 팩터리 메서드에는 이름이 있다.  무슨말일까?..

생성자와 파라미터만 가지고는 어떤 객체가 생성되는지 설명할 수 없지만 정적 팩터리 메서드는 이름을 잘 지어놓으면

어떤 객체가 생성되는지 설명할 수 있다.

Car car = Car.newInstance();

Car car = Car.newInstanceWithWheel("금호");


2. 호출할 때마다 새로운 객체를 만들지 않는다.

싱글톤 클래스처럼 static 객체가 만들어지므로 동일한 객체가 요청되는 일이 잦고, 객체를 만드는 비용이 크다면 성능을 크게 개선할 수 있다.  (?)


3. 생성자와 달리 반환값 자료형의 하위 자료형 객체를 반환할 수 있다. (?)

인터페이스 기반 프레임워크에 적합함

자바의 컬렉션 프레임워크에서 구현체의 대부분이 정적 팩터리 메서드로 구현되어있다. Collections.sort() 는 static 메서드이고 정적 팩터리 메서드인 것 같다.


정적 팩터리 메서드의 이름으로 주로 사용하는 이름은 아래와 같다.

- valueOf

- of

- getInstance

- newInstance

- getType

- newType


결론은 정적 팩터리 메서드와 생성자는 용도가 다르고 장단점이 있다. 책에서 나와있듯이 정적 팩터리 메서드로 만들어 보는 것을 고려하지않고 바로 생성자를 통해 객체를 만드는 것을 삼가야한다.




Comments