[item 1] 생성자 대신 정적 팩터리 메서드를 고려하라
정적 팩터리 메서드는
디자인 패턴에 없다.
생성자 VS 정적 팩터리 메서드 ....... 장점 | |
이름을 가질 수 있다 probablePrime |
생성자는 이름이 없다. 매개변수 갯수로 오버로딩되어 구분할 뿐... public class BigInteger { BigInteger(int, int, Random){ ..... } // 생성자 } 정적 팩터리 메서드는 이름만 잘 지으면 반환 될 객체의 특성을 쉽게 묘사할 수 있다. public class BigInteger { BigInteger(int, int, Random){ ..... } // 생성자 void probablePrime( ){.......} // 메서드 선언 } |
호출 될 때 마다 인스턴스를 새로 생성하지 않아도 된다. | 불변 클래스는 인스턴스를 미리 만들어 놓거나 새로 생성한 인스턴스를 재활용한다. ex) Boolean.valueOf(boolean) 객체를 생성하지 않는다 |
반환 타입의 하위 타입 객체를 반환 할 수 있는 능력 | 반환할 객체의 클래스를 자유롭게 선택할 수 있다. API 만들때 구현 클래스를 공개하지 않고 객체를 반환할 수 있다. ?????동반 클래스????? 자바8: 인터페이스가 정적 메서드를 가질 수 있게 됨 동반 클래스에 두었던== public 정적 멤버들 인터페이스에 두면 된다... |
입력 매개변수에 따라 매번 다른 클래스의 객체를 반환할 수 있다. | 반환 타입의 하위 타입이기만 하면 된다. 원소가 64개 이하 : long RegularEnumSet 인스턴스 반환 원소가 65개 이상: long[] JumboEnumSet 인스턴스 반환 |
정적 팩터리 메서드를 작성하는 시점 반환할 객체의 클래스가 존재하지 않아도 된다. 유연함 |
생성자 VS 정적 팩터리 메서드 ....... 단점 | |
상속을 하려면 pubic, protected 생성자가 필요함 정적 팩터리 메서드만 제공하면 하위 클래스를 만들 수 없다 |
|
정적 팩터리 메서드는 개발자가 찾기 어렵다 |
'java > 이펙티브 자바' 카테고리의 다른 글
Item29~30 (0) | 2022.01.09 |
---|---|
[item 21~22] (0) | 2022.01.01 |
[item 17~18] (0) | 2021.12.29 |
[item 8] finalizer와 cleaner 사용을 피하라 (0) | 2021.12.26 |
[item 7] 다 쓴 객체 참조를 해제하라 (0) | 2021.12.26 |