언어/Effective Java

이펙트브 자바 Item4 - 인스턴스화를 막으려거든 private 생성자를 사용하라

now0204 2024. 5. 27. 12:24

 

  • 자바는 생성자를 선언하지 않으면, 기본으로 default 생성자를 만든다. (매개변수 x 생성자)
  • 따라서, 생성자를 안만든다고 객체를 못만드는 것은 아니다. 
  • 객체를 생성하기 싫다면, private 생성자를 통해 이를 반드시 막아라

 

*  
 * This class contains various methods for manipulating arrays (such as
 * sorting and searching). This class also contains a static factory
 * that allows arrays to be viewed as lists.
 */

// Suppresses default constructor, ensuring non-instantiability.
private Arrays() {}

/**
* Don't let anyone instantiate this class.
*/
private Math() {}

 

  • 물론 객체생성을 막기위해 추상클래스로 만들 수 있다. 
  • 다만, 추상클래스를 이용하면, 생성하지 말라는 건지, 상속하라는 건지 의도를 정확하게 파악하기 어렵다.
  • 따라서 인스턴스화를 막기 위해서는 private 생성자를 명시하고, 주석을 달아두자