본문 바로가기

독후감/Effective Java

4. 인스턴스화를 막으려거든 private 생성자를 사용하라

가끔 정적 메서드와 정적 필드만을 담은 클래스가 필요할 경우가 있다.
유틸리티 클래스를 만들 때 주로 사용되는데, 이런 클래스들은 인스턴스화 되는 것을 되도록 막아야 한다.

자바에서는 생성자를 개발자가 작성하지 않아도, 내부적으로 생성자를 제공해준다.
그렇기에 이를 막기 위해서는 private로 생성자를 임의로 명시해주는 것이 좋다.

또한 이 방식은 상속을 불가능하게 만든다.
상속을 받으려면 해당 부모 클래스의 생성자를 호출할 수 있어야 하는데, private 선언을 통해 부모 클래스를 상속할 길이 막혀버린다.

public class Utility {
	private Utility() {
		throw new AssertionError();
	}
}

결론

유틸리티 클래스들을 정적 메서드로 채우게 된다면 생성자는 private 로 막자. 단, 상속도 못 하게 되므로 주의!