인스턴스화를 막으려거든 private 생성자를 사용하라

Gunjoo Ahn·2022년 7월 31일
0
post-thumbnail

정적 메소드와 정적 필드만 담은 클래스를 생성하고 싶을 때가 있다.
지금까지 나는 정적 클래스를 만들 때,

  1. 상속하지 못하도록 final을 하고,
  2. 모든 메소드와 필드를 static으로 선언하여 사용했다.

여기서 놓친 부분이 위 두 가지 만으로는 인스턴스 생성을 막을 수 없다는 것이다.
의도치 않게 인스턴스화 할 수 있는 static 클래스가 생기게 된 것이다.

추상 클래스로 만들어서 인스턴스화를 막을 생각은 하지 말자. 상속하지 못하라고 final을 선언했는데 굳이 상속 가능하게 만들면 안된다. 상속 가능하다는 것은 상속해서 인스턴스화할 수 있다는 것이다.

private 생성자를 사용하여 인스턴스화를 막으면 된다.

private 생성자 내부에 error assertion을 넣어주면 클래스 내부에서 실수로라도 생성자를 호출하지 않게 도와준다. 그리고 private 생성자이므로 상속이 불가능해지는 효과도 있다.


저자는 객체 지향적으로 사고하지 않는 이들이 종종 남용하는 방식이라고 곱게 보이지 않는다고 하는데, 많이 남용해 왔던 것같아 지금까지 남용하지 않았나 다시 생각해볼 수 있었다.

profile
Backend Developer

0개의 댓글