- 인스턴스화를 막으려거든 private 생성자를 사용하자2021년 03월 15일 09시 20분 33초에 업로드 된 글입니다.작성자: jCurve728x90반응형
남용하면 좋지 않지만 단순히 정적 메서드와 정적 필드만을 담은 클래스를 만들 수 있는데
특정 인터페이스를 구현하는 객체를 생성해주는 정적 메서드를 모아 두거나 final 클래스를 상속해서 하위 클래스에서 메서드를 넣는 건 불가능하기 때문에 final 클래스와 관련한 메서드를 모아둘 수 있다.
이러한 유틸리티 클래스들은 인스턴스로 만들어 쓰려고 설계한 것이 아니다.
추상 클래스로 만든느 것은 인스턴스화를 막을 수가 없다 ( 하위 클래스를 만들어 인스턴스화 할 수 있기 때문에)
컴파일러가 명시된 생성자가 없을때 기본 생성자를 만들려고 하기 때문에 private 생성자를 명시적으로 추가하면 클래스의 인스턴스화를 막을 수 있다.
public class Utility{ private Utility(){ throw new AssertionError(); } //.... }
이 방법은 명시적 생성자가 private이니 클래스 바깥에서 접근이 불가하며, 이 클래스를 상속이 불가능하게 한다.
왜냐하면 모든 생성자는 명시적이든 묵시적이든 상위 클래스의 생성자를 호출하게 되는데 private으로 선언했기 때문에 하위 클래스가 상위 클래스의 생성자에 접근할 수 가 없다.
반응형'JAVA' 카테고리의 다른 글
불필요한 객체 생성을 피하자 (0) 2021.03.15 자원을 직접 명시하지 말고 의존 객체 주입을 사용하자 (0) 2021.03.15 private 생성자나 열거 타입으로 싱글턴임을 보증하자 (0) 2021.03.15 생성자에 매개변수가 많다면 빌더를 고려하라 (0) 2021.03.15 생성자 대신 정적 팩터리 메서드를 고려 (0) 2021.03.14 댓글