Effective Java | #4. 인스턴스화를 막으려거든 private 생성자를 사용하라

보람·2022년 5월 7일
0

Effective-Java

목록 보기
5/25

정적 멤버만 담은 유틸리티 클래스는 인스턴스로 만들어 쓰려고 설계한 게 아니다.

public 기본 생성자

  • 생성자를 명시하지 않으면 컴파일러가 기본 생성자를 자동 생성
    • 사용자는 해당 생성자가 자동 생성된지 구분X
      ==> 의도치않게 해당 클래스를 인스턴스화하거나 상속하게 될 수 있다.

인스턴스화를 막는 방법은 생각보다 간단하다.

// 인스턴스를 만들 수 없는 UtilityClass
public class UtilityClass {
    // private 생성자를 명시하는것으로써 기본 생성자가 만들어지는 것을 막는다(인스턴스화 방지용)
    // 아래 private 생성자를 작성하지 않을 경우 컴파일러가 public 기본 생성자를 만들어 인스턴스화와 상속을 가능하게 해서 문제가 발생된다.
    private UtilityClass() {
        throw new AssertionError();
    }

    // 나머지 코드는 생략
}

private 생성자 사용

  • private 생성자를 추가하면 클래스의 인스턴스화를 막을 수 있다.
  • 상속을 불가능하게 하는 효과도 있다.
    • private으로 선언했으니 하위 클래스가 상위 클래스에 접근할 수 있는 길이 막힘

private 생성자 작성 후 정적 팩터리 메서드를 작성하면 반복 요청에 가능한 객체를 만들 수 있다.

profile
백엔드 개발자

0개의 댓글