Notice
Recent Posts
Recent Comments
Link
infinity : 무한한 성장가능성
아이템 4 인스턴스화를 막으려거든 private 생성자를 사용하자 본문
1. 단순히 정적 메서드와 정적 필드만을 담은 클래스를 만들고 싶을 때가 존재한다.
ex) java.lang.Math, java.util.Arrays처럼 기본 타입 값이나 배열 관련 메서드들을 모아놓을 수 있음
2. 특정 인터페이스를 구현하는 객체를 생성해주는 정적 메서드(혹은 팩터리)를 모아놓을 수도 있음
ex) java.land.colletcions
3. final 클래스와 관련한 메서드들을 모아놓을 때도 사용
-> final 클래스를 상속해서 하위 클래스에 메서드를 넣는 건 불가능하기 때문
(final 클래스는 상속이 불가능하기 때문)
이렇게 정적 멤버만 담은 유틸리티 클래스는 인스턴스로 만들어 쓰려고 설계한 것이 아니다.
하지만 생성자를 명지하지 않으면 컴파일러가 자동으로 기본 생성자를 만들어준다.
🤔 인스턴스화를 막는 방법은?
private 생성자를 추가해 클래스의 인스턴스화를 막자
-> private 생성자를 만뜰어 인스턴스화를 막는다면 상속을 불가능하게 하는 효과도 있다.
🤔 어떻게 상속이 불가능 할까?
-> 모든 생성자는 명시적 혹은 묵시적으로 상위 클래스의 생성자를 호출하게 되는데 이를 private으로 선언하면 하위 클래스가
상위 클래스의 생성자에 접근할 길이 막히기 때문에 상속이 불가능
'📖 book > ❤️ Effective Java' 카테고리의 다른 글
이펙티브 자바 item 68) 일반적으로 통용되는 명명 규칙을 따르라 (0) | 2022.04.17 |
---|---|
이펙티브 자바 item 24) 멤버클래스는 되도록 static으로 만들어라 (0) | 2022.04.17 |
이펙티브 자바 item 17) 변경가능성을 최소화 하라 (0) | 2022.03.19 |