반응형

[ 이글은 Effective Java를 참고하여 작성하였습니다 ]



생성자를 따로 만들지 않으면 컴파일러는 자동으로 인자가 없는 public 기본 생성자를 만든다. 사용자는 이 생성자를 일반 생성자와 구별할 수 없으므로 원래 의도와는 달리 객체 생성이 가능한 클래스로 될 위험이 존재한다. 또한 객체를 만들 수 없게 하기 위해 abstract(추상) 클래스로 선언해 봤자 하위 클래스를 정의하는 순간 객체 생성이 가능해 지기 때문에 무용지물이다. 


이런 경우에는 private 생성자를 클래스에 넣어서 객체 생성을 방지할 수 있다. 명시적으로 정의된 생성자가 private이므로 클래스 외부에서 사용하는 것은 불가능 하기 때문이다.

public class UtilityClass {

     // 기본 생성자가 자동 생성되지 못하도록 하여 객체 생성 방지

     private UtilityClass() {

          throw new AssertionError();

     }

}


이와 같이 구현한다. 이때 AssertionError는 꼭 필요하지는 않지만 클래스 안에서 실수로라도 생성자를 호출했을 때 알기 위해 한 것이며, 생성자를 명시적으로 구현했음에도 불구하고 호출할 수 없다는 것이 직관적이지 않으므로 위에 보인 것처럼 주석을 달아두는 것이 좋다.



반응형

+ Recent posts