Use Private Constructor for blocking instantiation

jiho·2021년 5월 23일
0

EffectiveJava

목록 보기
5/12

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

간혹 정적 메서드와 정적 필드만을 담은 클래스를 만들고 싶을 때가 있습니다.
e.g java.util.Collecitons, java.util.Arrays

이러한 정적 맴버만 담은 유틸리티 클래스는 인스턴스로 만들어 쓰려고 설계된 것이 아니기 때문에 의도되지않은 인스턴스화를 막아야합니다. 추상 클래스를 만들면 해당 클래스를 직접 인스턴스화 하는 것이 불가능하지만 상속을 통해 인스턴스화가 가능하지 좋은 방법은 아닙니다.

그래서 final class를 만들고 아무일도 하지않는 private 생성자만을 만들어두면 인스턴스화를 막을 수 있습니다.

public final class UtilityClass {
	private UtilityClass() {
    	throw new AssertionError();
    }
}

이 코드는 어떤 환경에서도 클래스가 인스턴스화되는 것을 막아줍니다. 이 방식은 상속을 불가능하게 하는 효과도 있습니다. 모든 생성자는 명시적이든 묵시적이든 상위 클래스의 생성자를 호출하게 되는 데 private인 상위 생성자를 호출할 수 없게됩니다.

profile
Scratch, Under the hood, Initial version analysis

0개의 댓글