하루 한장/이펙티브 자바
아이템 1. 핵심 정리 - 정적 팩터리 메서드의 단점
ta_chan
2023. 7. 25. 22:50
- 상속을 하려면 public이나 protected 생성하기 필요하니 정적 팩터리 메서드만 제공하면 하위 클래스를 만들 수 없다.
- private 생성자가 외부에서 접근할 수 없기 때문인데, 상속받은 서브 클래스에서 슈퍼클래스 생성자를 호출할 수 없게 되기 때문이다.
- 쉽게 말해서 private이기 때문에 상속이 불가능하다
package org.example;
public class Settings {
private boolean useAutoSteering;
private boolean useABS;
private Difficulty difficulty;
private Settings(){} 기본생성자가 private이기 때문에 상속을 할 수 없다.
private static final Settings SETTINGS = new Settings();
public static Settings newInstance(){
return SETTINGS;
}
}
- 정적 팩터리 메서드는 프로그래머가 찾기 어렵다
- 특히나 문서화(java doc)같은 경우, 생성자는 파라미터가 분명하게 표기되지만 정적 팩터리 메서드는 파라미터가 보이지 않는다.
- 이럴 땐 아래와 같은 주석 형식을 사용하면 명세서에 설명을 붙일 수 있다.
package org.example;
/**
* 이 클래스의 인스턴스는 #getInstance()를 통해 사용한다.
* @see Settings#getInstance()
*/
public class Settings {
private boolean useAutoSteering;
private boolean useABS;
private Difficulty difficulty;
private Settings(){}
private static final Settings SETTINGS = new Settings();
public static Settings getInstance(){
return SETTINGS;
}
}