[이펙티브 자바] 아이템 4 - 인스턴스화를 막으려거든 private 생성자를 사용하라

enjoy89·2024년 10월 7일
0
post-custom-banner

생성자를 명시하지 않으면 컴파일러가 자동으로 기본 생성자를 만들어준다. 즉, 매개변수를 받지 않는 public 생성자가 만들어지며, 사용자는 이를 자동 생성된 것인지 구분할 수 없다. 이처럼 의도치 않게 인스턴스화할 수 있게된 클래스가 종종 존재한다.

추상클래스로 만드는 것으로는 인스턴스화를 막을 수 없다. 하위 클래스를 만들어 인스턴스화를 하면 그만이다.

private 생성자를 사용한 유틸리티 클래스

public class UtilityClass {

		// 기본 생성자가 만들어지는 것을 막는다(인스턴스화 방지용)
		private Utilityclass() { 
				throw new AssertionError();
		}
}

컴파일러가 기본 생성자를 만드는 경우는 오직 명시된 생성 자가 없을 때뿐이니 private 생성자를 추가하면 클래스의 인스턴스화를 막을 수 있다. 이처럼 private 생성자를 추가하면 클래스의 인스턴스화를 막을 수 있다.

명시적 생성자가 private이니 클래스 바깥에서는 접근할 수 없다. 꼭 Assertion Error를 던질 필요는 없지만, 클래스 안에서 실수로라도 생성자를 호출하지 않도록 해준다. 이 코드는 어떤 환경에서도 클래스가 인스턴스화되는 것을 막아 준다.

profile
Backend Developer 💻 😺
post-custom-banner

0개의 댓글