[Effective Java] 인스턴스화를 막기 위한 방법

dongbin_Shin·2022년 1월 22일
0

이펙티브 자바

목록 보기
4/5
post-thumbnail

정적 클래스

정적 메서드와 정적 필드만을 담은 클래스를 만들어야 할 경우가 있다.

다음의 경우가 이에 해당한다.

  • java.lang.Math, java.util.Arrays처럼 기본 타입 값이나 배열 관련 메서드들을 모아놓은 경우
  • java.util.Collections처럼 인터페이스를 구현하는 객체를 생성해주는 정적 메서드를 모아놓은 경우
    • 자바 8 이후부터 인터페이스에 위와 같은 메소드들을 넣을 수 있다.
  • final 클래스와 관련한 메서드들을 모아놓은 경우

인스턴스화를 막자

정적 멤버만 담은 클래스는 인스턴스로 만들어 쓰기 위한 클래스가 아니다.

하지만 생성자를 명시하지 않으면 컴파일러가 자동으로 public 생성자를 만들기 때문에 API 문서에 이 정보가 공개되어 사용자가 보기에 헷갈릴 수 있다.

추상클래스로 만들어 이런 점을 막아보려 할 수도 있다. 하지만 하위클래스를 만들어 생성이 가능하기 때문에 이런 방법은 좋은 방법이 아니다.

좋은 해결 방법은 private 생성자를 만들어 주는 것이다. 좀 더 나아가 AssertionError() 를 던지게 하여 실수로라도 생성자를 호출하지 않도록 해줄 수 있다.

또 이 방식은 상속을 불가능하게 만드는 효과도 가진다.

public class MyClass {
    // 인스턴스화 방지용
    private MyClass() {
        throw new AssertionError();
    }
}
profile
멋있는 백엔드 개발자

0개의 댓글