JAVA/Effective Java
규칙4 객체 생성을 막을 때는 private 생성자를 사용하라
소농배
2018. 12. 19. 20:24
![]() |
|
Effective Java 에서는 정적 메서드나 필드만 모은 클래스가 필요할 때가 있다고 한다.
1. 자바의 기본 자료형 값 또는 배열에 적용되는 메서드 ( java.lang Math , java.util.Arrays )
2. 특정 인터페이스를 구현하는 객체를 만드는 팩터리 메서드 등으 정적 메서드의 모임
위 경우의 클래스들은 유틸리티 클래스로서 객체를 만드는 목적의 클래스가 아니다.
따라서 객체를 만드는 생성자가 있으면 더 어색하지만 컴파일러는 자동으로 인자가 없는 public
기본 생성자를 생성한다.
이런 경우에 private 생성자를 이용하여 객체 생성을 막을 수 있다.
public class UtilityClass {
private UtilityClass() {
//실수로 생성자가 호출되었을 때 알수 있도록.
throw new AssertionError();
}
...
}
이 방법은 하위 클래스 생성도 막을 수 있다. 모든 생성자는 상위 클래스의 생성자를 명시적으로든 혹은
묵시적으로든 호출할 수 있어야 하지만 호출 가능한 생성자가 없기 때문에.