[교재 EffectiveJava] 아이템 4. 인스턴스화를 막으려거든 private 생성자를 사용하라

반응형
728x90
반응형

private 생성자 구현

생성자를 명시하지 않으면 컴파일러가 자동으로 기본 생성자를 만들어준다. 즉, 매개변수를 받지 않는 public 생성자가 만들어지며, 사용자는 이 생성자가 자동 생성된 것인지 구분할 수 없다. 실제로 이러한 이유로 의도치 않게 인스턴스할 수 있게된 클래스가 종종 목격된다.

 

1) 추상 클래스로 만든다. (충분하지 않음)

결론적으로 추상 클래스로 만드는 것은 인스턴스화를 막을 수 없다. 하위 클래스를 만들어 인스턴스화하면 그만이다. 

public abstract class UtilityClass {
    ...
}

 

2) private 생성자를 추가한다.

이 방법으로 클래스의 인스턴스화를 막을 수 있다. 

public class UtilityClass {

    /**
     * 이 클래스는 인스턴스를 만들 수 없습니다.
     */
    private UtilityClass() {
        throw new AssertionError();
    }
}
  • 명시적 생성자가 private이니 클래스 바깥에서는 접근할 수 없다.
    • 만약, 클래스 안에서 실수로 호출하게될 경우를 대비하여 에러 처리 코드를 넣자. 
  • 이는 상속을 불가능하게 만드는 효과도 있다.
    • 모든 생성자는 상위 클래스의 생성자를 호출하게 되는데, 이를 private로 선언했으므로 하위 클래스가 상위 클래스의 생성자에 접근할 길이 없다.

 

반응형

Designed by JB FACTORY