본문 바로가기
개인 공부/Java (이펙티브 자바)

[이펙티브 자바] 아이템 4 : 인스턴스화를 막으려거든 private 생성자를 사용하라

by 희조당 2023. 1. 2.
728x90

✍️ 학습 목표

  • 정적 클래스
  • 인스턴스화 방지

📌 정적 클래스

정적 메서드와 정적 필드만 담은 클래스를 정적 클래스라고 한다.

객체 지향성을 살리지 못하는 방법이지만 나름 쓰임새가 존재한다.

🤔 정적 클래스의 쓰임새

대표적인 쓰임새로는 java.lang.Math, java.util.Arrays 그리고 java.util.Collections 등이 있다.

또, final 클래스와 관련된 메서드들을 모아놓기도 한다.

모두 특정 기능을 모아둔 도구 꾸러미 같은 느낌이다. 그래서 유틸리티 클래스라고도 하나보다.


📌 인스턴스화 방지

애초에 유틸리티 클래스는 인스턴스로 만들어 쓰라고 설계한 게 아니다.

따라서, private 생성자를 선언해서 인스턴스화를 방지해야 한다.

🧐 왜 private 생성자?

private 지정자로 클래스 외부에서 사용할 수 없게하면 두 가지 상황을 방지할 수 있다.

  • 생성자를 명시하지 않아 컴파일러가 자동으로 기본 생성자를 만든 상황
  • 상속으로 하위 클래스를 만들어 인스턴스화하는 상황
public class Pokemon {
  private Pokemon() {
    throw new AssertionError();
  }
}

위 방법과 같이 명시적으로 private하게 작성하면 기본 생성자와 상속을 막을 수 있다.

굳이 Error를 던질 필요는 없지만 직관적으로 보이는 효과는 있다.


-Reference

https://stackoverflow.com/questions/7074713/should-a-utility-class-be-static (별개로 한번 읽어봤는데 도움됬다.)

 

😋 지극히 개인적인 블로그지만 훈수와 조언은 제 성장에 도움이 됩니다 😋 

 

댓글