[Effectiva-Java] Item4 - 인스턴스화를 막으려거든 private 생성자를 사용하라

imcool2551·2022년 2월 7일
0

Effective-Java

목록 보기
4/8
post-thumbnail

1. 정적 메서드와 정적 필드만 담은 클래스


유틸리티 기능을 제공하려면 보통 정적 메서드, 정적 필드만 담은 클래스를 필요로 한다. java.lang.Math,java.util.Arrays 와 같은 클래스는 기본 타입 값과 배열 관련 메서드들을 모아 놓은 유틸리티 클래스다. 혹은 java.util.Collections 처럼 특정 인터페이스의 객체를 생성해주는 정적 팩터리 메서드를 모아 놓은 클래스도 있다. 이런 클래스들은 인스턴스화 하려고 만든 클래스가 아니기 때문에 인스턴스화를 막을 방법이 필요하다.

2. 인스턴스화 막기


public class UtilityClass {
    private UtilityClass() {
        throw new AssertionError();
    }
    ...  // 나머지 코드 생략
}

추상 클래스로 만드는 건 클래스를 상속해서 인스턴스화 해버리면 되기 때문에 적절한 방법이 아니다.

인스턴스화는 private 생성자를 만들어주기만 하면 막을 수 있다. 클래스를 상속해서 인스턴스화 하려고해도 부모 클래스의 생성자가 호출되어야 하기 때문에 불가능하다. 생성자에서 꼭 AssertionError예외를 던질 필요는 없지만 혹시 클래스 내부에서 생성자가 불리는 것까지 방지해준다.

profile
아임쿨

0개의 댓글