less than 1 minute read

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