반응형
[ 이글은 Effective Java를 참고하여 작성하였습니다 ]
생성자를 따로 만들지 않으면 컴파일러는 자동으로 인자가 없는 public 기본 생성자를 만든다. 사용자는 이 생성자를 일반 생성자와 구별할 수 없으므로 원래 의도와는 달리 객체 생성이 가능한 클래스로 될 위험이 존재한다. 또한 객체를 만들 수 없게 하기 위해 abstract(추상) 클래스로 선언해 봤자 하위 클래스를 정의하는 순간 객체 생성이 가능해 지기 때문에 무용지물이다.
이런 경우에는 private 생성자를 클래스에 넣어서 객체 생성을 방지할 수 있다. 명시적으로 정의된 생성자가 private이므로 클래스 외부에서 사용하는 것은 불가능 하기 때문이다.
public class UtilityClass { // 기본 생성자가 자동 생성되지 못하도록 하여 객체 생성 방지 private UtilityClass() { throw new AssertionError(); } } |
이와 같이 구현한다. 이때 AssertionError는 꼭 필요하지는 않지만 클래스 안에서 실수로라도 생성자를 호출했을 때 알기 위해 한 것이며, 생성자를 명시적으로 구현했음에도 불구하고 호출할 수 없다는 것이 직관적이지 않으므로 위에 보인 것처럼 주석을 달아두는 것이 좋다.
반응형
'Java' 카테고리의 다른 글
[Java] 람다표현식 기초 (JAVA 8) (0) | 2019.01.28 |
---|---|
[Java] Stop-the-world (0) | 2019.01.08 |
[Java] private생성자 / enum 자료형은 싱글턴 패턴으로 사용하기 (0) | 2018.09.27 |
[Java] 생성자 인자가 많은 경우 Builder 패턴 적용하기 (0) | 2018.09.20 |
[Java] 생성자 대신 정적 팩토리 메서드 사용하기 (Static Factory Method) (0) | 2018.09.19 |