Java

[Effective Java] 아이템 4. 인스턴스화를 막으려거든 private 생성자를 사용하라

아이템 4. 인스턴스화를 막으려거든 private 생성자를 사용하라

 

만약, 정적 메서드와 정적 필드만을 담은 클래스를 만들고 싶을 때가 있을 것이다. 예를 들어, java.lang.Math와 java.util.Arrays처럼 기본 타입 값이나 배열 관련 메서들을 모아놓을 수 있다. 또한 java.util.Collections처럼 특정 인터페이스를 구현하는 객체를 생성해주는 정적 메서드를 모아놓을 수 있다. 또는 final 클래스와 관련한 메서드들을 모아놓을 때에도 사용한다. 

 

이러한 정적 멤버만을 담은 유틸리티 클래스는 인스턴스로 만들지 않고 사용하는 것이 낫다. (🤔 나는 여태까지 뭣도 모르고 정적 팩토리 메서드로 사용했는데, 맞았다니.. 다행이다) 나 말고도, 인스턴스 해당 유틸리티 클래스를 인스턴스화해서 사용하지 못하도록 (= 외부에서 생성자를 사용하지 않도록) 하기 위해서 private 생성자를 추가하자. private 생성자를 추가하면 클래스의 인스턴스화를 막을 수 있다. 또한 상속을 불가능하게 하는 효과도 있다.