1. 정적 유틸리티 클래스
정적 메서드와 정적 필드만을 담은 유틸리티 클래스는 객체지향적이지는 않지만 개발할 때 유용하게 사용할 수 있다.
그러나 정적 유틸리티 클래스는 인스턴스로 만들어 사용하기 위해 설계된 클래스가 아니다.
생성자를 명시하지 않으면 컴파일러는 자동으로 기본 생성자를 클래스에 추가해준다.
사용자는 해당 생성자가 자동 생성된 것인지 의도된 것인지 알 수 없다.
추상 클래스로 명시해도 하위 클래스를 만들어 인스턴스화할 수 있기 때문에 부족하다.
인스턴스화를 막는 방법은 컴파일러가 기본 생성자를 만드는 경우는 오직 명시된 생성자가 없을 때뿐이니
private 생성자를 추가하면 클래스의 인스턴스화를 막을수 있다.
Utility.java
private Utility () {
throw new AssertionError();
}
예외를 던질 필요는 없으나 해당 클래스 내부에서 실수로 인스턴스화하는 것을 방지하기 위해 퇴화시킨다.
이를 통해 해당 클래스는 인스턴스화를 할 필요가 없는 유틸리티 클래스임을 명시할 수 있다.
'Prodo 독서 리뷰' 카테고리의 다른 글
[Effective Java] Item 6. 불필요한 객체 생성을 피하라 (0) | 2021.04.11 |
---|---|
[Effective Java] Item 5. 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 (0) | 2021.04.11 |
[Effective Java] Item 3. private 생성자나 열거 타입으로 싱글턴임을 보증하라 (0) | 2021.04.11 |
[Effective Java] Item 2. 생성자에 매개변수가 많다면 빌더를 고려하라 (0) | 2021.04.11 |
[Effective Java] Item 1. 생성자 대신 정적 팩토리 메서드를 고려하라 (0) | 2021.04.11 |