객체 생성과 파괴 item04
인스턴스화를 막으려거든 private 생성자를 사용하라
static 메서드와 static 필드만을 담은 클래스를 만든 경우에 추상 클래스로 만드는 것으로도 인스턴스화를 막을 수 없다.
--> 하위 클래스를 만들어 인스턴스화하면 그만. 그래서 상속해서 쓰라는 뜻으로 오해할 수 있다는 문제가 있다.
그리고 아무런 생성자를 만들지 않으면 컴파일러가 자동으로 기본 생성자(매개변수가 없는 public 생성자)를 만들어 주기 때문에 인스턴스를 만들 수 있다.
해결방법
명시적으로 private 생성자를 만든다.
public class UtilityClass {
// 기본 생성자가 만들어지는 것을 막는다(인스턴스화 방지용).
private UtilityClass() {
throw new AssertionError();
}
// 나머지 코드는 생략
}
꼭 AssertionError를 던질 필욘느 없지만 클래스 안에서 실수로 생성자를 호출한 경우에 에러를 발생시킬 수 있고 private생성자이기 때문에 상속도 막을 수 있다.
생성자를 제공하지만 쓸 수 없기 때문에 직관적이지 않다. 그래서 앞의 코드처럼 적절한 주석을 달아두는 것이 좋다.
상속한 경우에 명시적이든 묵시적이든 상위 클래스의 생성자를 호출해야되는데 이를 private로 호출을 막아버렸다.
Author And Source
이 문제에 관하여(객체 생성과 파괴 item04), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@pkjeogus/객체-생성과-파괴-item04저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)