[Effective Java] 2 - item4 인스턴스화를 막으려거든 private 생성자를 활용하라.
item4 인스턴스화를 막으려거든 private 생성자를 활용하라.
정적 메소드와 정적 필드만을 담은 클래스의 용도
- 기본 타입 값이나 배열 관련 메소드를 모아 둘 수 있다. (
java.lang.Math
,java.util.Arrays
) - 특정 인터페이스를 구현하는 객체를 생성해주는 정적 메서드 혹은 팩터리를 모아둘 수도 있다. (
java.util.Collections
) - final 클래스와 관련한 메서드들은 모아둘 때도 사용한다. (final 클래스 상속후 메소드 추가 불가)
인스턴스화 막기
- 생성자를 명시하지 않으면 컴파일러가 자동으로 기본 생성자를 만들고, 다른 개발자는 이 생성자가 기본 생성자인지 명시한 생성자인지 알 수 없다.
- 추상 클래스로 만들 경우 다른 개발자가 이를 상속해 인스턴스화 해 사용할 수 있다.
이와 같은 사항을 고려해,
private
생성자를 추가하면 클래스의 인스턴스화를 막을 수 있다.
- 명시적 생성자가
private
이므로 클래스 외부에서는 접근이 불가능하다. - 생성자가 존재하는데 호출은 불가능하므로, 직관적이지 않기에 적절한 주석을 달아주는 것이 바람직하다.
public class Arrays {
private static final int MIN_ARRAY_SORT_GRAN = 1 << 13;
// Suppresses default constructor, ensuring non-instantiability.
private Arrays() {...}
...
}
Leave a comment