[Java][Effective Java] item 4, 인스턴스화를 막으려거든 private 생성자를 사용하라

2022. 5. 17. 15:40JAVA/Effective Java

인스턴스를 만들수 없는 클래스 사례

  • java.lang.Math
  • java.util.Arrays
  • java.util.Collections

인스턴스화를 막기 위한 방법 : private 생성자 추가

private 생성자를 추가하면 클래스의 인스턴스화를 막을 수 있습니다.

// 객체를 만들 수 없는 유틸리티 클래스
public class UtilityClass {
	// 기본 생성자가 만들어지는 것을 막는다(인스턴스 방지용)
	private UtilityClass()
	{
		throw new AssertionError();
	}
	
	// 나머지는 생략
}

 

인스턴스화를 막기 위한 부적절한 방법 : 추상 클래스로 정의

인스턴스화를 막기 위해서 추상 클래스로 정의하면 클래스 자체는 막을 수는 있지만 하위 클래스를 만들어 인스턴스화하면 인스턴스화를 막을 수 없습니다. 오히려 사용자는 해당 클래스를 상속해서 쓰라는 듯으로 오해할 수 있기 때문에 더 큰 문제입니다.

 

References

[도서] effective java
source code : https://github.com/yonghwankim-dev/effective_java/tree/master/src/role4