꾸준한 스터디
article thumbnail

정적인 필드와 메서드를 담은 클래스의 구현은 객체 지향적인 사고는 아니자만,

공통점이 있는 메서드 혹은 팩터리들을 제공할 때 사용되기도 한다.

 

자바 진영에서 제공하는 기본 타입, 유틸성 인터페이스 등이 있고, 이외로 final 클래스가 있다.

위 예시처럼 정적으로 선언한 만큼 인스턴스 생성하지 못하도록하는 설계 의도가 담겨 있다.

 

여기서 아이템 4의 제목의 의미가 나타난다.

설계 의도대로 인스턴스화를 막으려면, private 생성자를 선언하라는 것이다.

생성자를 선언하지 않으면, 기본 생성자가 컴파일 타임에 생성되기 때문이다.

 

Private로 선언하여도 클래스 내부에서는 접근이 가능하기에 생성자 호출 시 Assertion Error 예외를 방생시켜 실수를 방지 할 수 있다.

 

또한 상속 관계에서 하위타입 생성자는 상위타입 생성자를 호출하게 되어 있다. Private으로 선언함으로서 상속을 불가하게 하는 효과도 있다.

 

Assertion Error 예외

public class Person {
    private Person() {
        throw new AssertionError();
    }

    static void info() {
        System.out.println("사람입니다.");
    }

    public static void main(String[] args) {
        Person person = new Person(); // java.lang.AssertionError
        person.info();
    }
}

 

상속 불가

public class ExtendPerson extends Person{
    public ExtendPerson() {
        // 부모의 생성자가 private
        super();
    }
}

 

profile

꾸준한 스터디

@StudyRecord

포스팅이 유익하셨다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!