반응형
728x90
반응형
private 생성자 구현
생성자를 명시하지 않으면 컴파일러가 자동으로 기본 생성자를 만들어준다. 즉, 매개변수를 받지 않는 public 생성자가 만들어지며, 사용자는 이 생성자가 자동 생성된 것인지 구분할 수 없다. 실제로 이러한 이유로 의도치 않게 인스턴스할 수 있게된 클래스가 종종 목격된다.
1) 추상 클래스로 만든다. (충분하지 않음)
결론적으로 추상 클래스로 만드는 것은 인스턴스화를 막을 수 없다. 하위 클래스를 만들어 인스턴스화하면 그만이다.
public abstract class UtilityClass {
...
}
2) private 생성자를 추가한다.
이 방법으로 클래스의 인스턴스화를 막을 수 있다.
public class UtilityClass {
/**
* 이 클래스는 인스턴스를 만들 수 없습니다.
*/
private UtilityClass() {
throw new AssertionError();
}
}
- 명시적 생성자가 private이니 클래스 바깥에서는 접근할 수 없다.
- 만약, 클래스 안에서 실수로 호출하게될 경우를 대비하여 에러 처리 코드를 넣자.
- 이는 상속을 불가능하게 만드는 효과도 있다.
- 모든 생성자는 상위 클래스의 생성자를 호출하게 되는데, 이를 private로 선언했으므로 하위 클래스가 상위 클래스의 생성자에 접근할 길이 없다.
반응형
'Book > Effective Java' 카테고리의 다른 글
[교재 EffectiveJava] 아이템 6. 불필요한 객체 생성을 피하라 (0) | 2023.04.27 |
---|---|
[교재 EffectiveJava] 아이템 5. 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 (0) | 2023.04.21 |
[교재 EffectiveJava] 아이템 3. private 생성자나 열거 타입으로 싱글턴임을 보증하라 (0) | 2023.04.15 |
[교재 EffectiveJava] 아이템 2. 생성자에 매개변수가 많다면 빌더를 고려하라 (0) | 2023.04.09 |
[교재 EffectiveJava] 아이템 1. 생성자 대신 정적 팩터리 메서드를 고려하라 (0) | 2023.04.09 |