도당탕탕

Item4 : 인스턴스화를 막으려거든 private 생성자를 사용하라 본문

JAVA

Item4 : 인스턴스화를 막으려거든 private 생성자를 사용하라

backlo 2022. 12. 7. 17:05

Utility Class의 객체 생성을 막기 위해서는 private constructor를 선언해서 default constructor가 생기지 않도록 해야한다.

public class UtiliyClass { 
  private UtilityClass () { 
    throw new AssertionError(); 
  }
}

물론 abstract class를 만듬으로써 객체 생성을 막을 수도 있지만 다음과 같은 문제가 있다.

  1. 다른 클래스가 이를 상속해서 객체를 생성할 수 있음
  2. 사용자도 상속을 해야하는 class로 오해

따라서 인스턴스화를 막으려거든 private 생성자를 선언해 사용하는 것이 좋다.

그러나 모든 코드는 트레이드 오프가 있듯 private 생성자에도 부작용도 있다. 바로 다른 클래스가 상속할 수 없다는 것이다. (자식 클래스가 부모 클래스의 생성자에 접근 할 수 없기 때문에)

Comments