정적 메소드와 정적 필드만 담은 클래스를 생성하고 싶을 때가 있다.
지금까지 나는 정적 클래스를 만들 때,
final
을 하고,static
으로 선언하여 사용했다.여기서 놓친 부분이 위 두 가지 만으로는 인스턴스 생성을 막을 수 없다는 것이다.
의도치 않게 인스턴스화 할 수 있는 static
클래스가 생기게 된 것이다.
추상 클래스로 만들어서 인스턴스화를 막을 생각은 하지 말자. 상속하지 못하라고 final을 선언했는데 굳이 상속 가능하게 만들면 안된다. 상속 가능하다는 것은 상속해서 인스턴스화할 수 있다는 것이다.
⭐private 생성자를 사용하여 인스턴스화를 막으면 된다.
private 생성자 내부에 error assertion을 넣어주면 클래스 내부에서 실수로라도 생성자를 호출하지 않게 도와준다. 그리고 private 생성자이므로 상속이 불가능해지는 효과도 있다.
저자는 객체 지향적으로 사고하지 않는 이들이 종종 남용하는 방식이라고 곱게 보이지 않는다고 하는데, 많이 남용해 왔던 것같아 지금까지 남용하지 않았나 다시 생각해볼 수 있었다.