개발 공부 기록하기/01. JAVA & Kotlin

짧은 코멘트와 함께하는 이펙티브 자바) #4 인스턴스화를 막으려거든 private 생성자를 사용하라

lannstark 2020. 9. 19. 12:09

짧은 코멘트

  1. 유틸성 클래스에 private 생성자가 없으면 '엇 이 개발자분 Effective Java 안읽으셨나?' 라는 생각이 가장 먼저 든다 ㅋㅋㅋ
  2. 클래스 본문의 길이를 줄이고 싶어, lombok의 NoArgsConstructor(accessLevel = AccessLevel.PRIVATE)을 사용하는 것을 개인적으로 선호한다 ㅎㅎ

인스턴스화를 막고 싶을 때는 private 생성자를 사용하면 된다

단순히 정적 메소드와 정적 필드만을 담은 클래스를 만들고 싶다면, 그리 곱게 보이지는 않지만 아래의 경우에 쓸모가 있다

  1. 기본값이나 관련 메소드들을 모아 놓을 때 (ex. java.util.Arrays, java.lang.Math)
  2. 특정 인터페이스를 구현하는 객체를 생성해주는 정적 메소드를 모아 놓을 때
  3. final 클래스와 관련한 메소드를 모아 놓을 때

하지만 이런 클래스들은 인스턴스화 되면 안된다 추상 클래스를 만드는 것으로는 인스턴스화를 막을 수 없으므로 (하위 클래스를 만들어 인스턴스화 할 수 있다) private 생성자를 추가하면 된다

private 생성자 내에서 error까지 던진다면 클래스 안에서도 인스턴스 생성을 막을 수 있으며, 상속을 불가능하게 만드는 효과도 있다

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