backend/Java

[Effective Java] 4. private 생성자를 사용해서 인스턴스 생성을 못하게 하자

버리야 2009. 9. 17. 10:23
반응형
4. private 생성자를 사용해서 인스턴스 생성을 못하게 하자
static 메소드나 static 필드만을 모아 놓은 클래스를 만들필요가 있는 유틸리티성 클래스는 인스턴스 생성이 무의미하다. 
그러나 그런 클래스라도 명시적으로 지정한 생성자가 없을때 컴파일러가 디폴트 생성자 (public 이며 매개변수가 없는)를 만들어주기 때문에 javadoc 프로그램으로 생성하는 API 문서에도 나타나기 때문에 인스턴스 생성이 가능한 클래스로 오인될 수 있다.

생성자 호출을 통한 인스턴스 생성을 방지하고 API 문서에도 나타나지 않도록 하려면?

private 생성자를 정의하면 인스턴스 생성이 불가능한 클래스를 만들 수 있다.

public class UtilityClass {
//이 클래스는 인스턴스 생성이 불가능하다라는 주석을 다는게 좋겠다.
private UtilityClass(){
throw new AssertionError(
}
}

명시적으로 정의한 생성자가 private 이므로 클래스 외부에서는 생성자 호출이 불가능하고 AssertionError는 이 생성자가 클래스 내부에서 우연히 호출될 경우를 대비.
반응형