glenn-syj / more-effective-java

이펙티브 자바를 읽으며 자바를 더 효율적으로 공부합니다
4 stars 5 forks source link

[MEJ-005] 이펙티브 자바의 상수 인터페이스에 대한 논쟁 #113

Closed glenn-syj closed 4 months ago

glenn-syj commented 4 months ago

based on: #102 on @yngbao97

들어가며

생각보다 상수 인터페이스에 대한 논쟁이 꽤나 있는데요. 한 쪽에서는 이펙티브 자바를 인용하며 상수 인터페이스가 나쁘다고 이야기하며, 다른 쪽에서는 이를 사실 이는 이펙티브 자바가 일종의 바이블처럼 여겨져서 생긴 문제로 보이기도 합니다.

상수 인터페이스 논쟁

Stackoverflow의 What is the use of interface constants? 에서도 14년 전부터 상수 인터페이스에 대한 의문이 이어져 온 적 있는데요. 옹호하는 측에서도, 반대하는 측에서도 사실 구현(implement)에 초점을 두지 않는 경우도 있긴 합니다.

저는 상수 인터페이스를 쓰지 않아야 하는 이유 중에서는 세부 수치에 대한 공개 여부가 가장 와닿았습니다. 그런데 위 글을 읽다보니, OOP 관점에서는 옳지 않게 보이지만, 여러 파일에서 쓰이는 동일한 변수들이 모든 클래스에 산재되어 있는 것도 비효율적으로 보이는데요. 이에 대한 @yngbao97 님의 생각이 궁금합니다.

굳이 무엇이 좋다, 나쁘다를 나눈다기보다는 정말로 위 글을 읽고 어떤 생각이 드셨는지가 궁금합니다!

ssh2957 commented 4 months ago

저도 사실 상수 인터페이스의 장점도 있기 때문에 과연 이것을 나쁘게만 봐야하는지에 대한 고민을 했었는데 이러한 논쟁이 실제로 있었다니 신기하네요

yngbao97 commented 4 months ago

내부 API와 같이 정해진 규정에 따라서만 인터페이스를 사용할 수 있는 환경이라면 효율적으로 상수 인터페이스를 사용하는 것이 가능할 수 있겠지만, 개인적인 의견으로는 정적 유틸리티 클래스처럼 동일한 효과를 위해 대체할 수 있는 방법이 있다면 굳이 상수인터페이스를 사용할 필요성이 없겠다고 생각했습니다!

무엇보다 단순히 동일한 변수를 공통으로 사용하기 위한 수단으로 인터페이스를 사용하는 것이 사용 목적에 맞지 않는다는 부분이 공감됐습니다!

glenn-syj commented 4 months ago

답변 감사합니다! 사실 저는 이펙티브 자바 내의 서술에 크게 공감되지만, 반박 거리를 찾기 힘들다보니 비판 없이 수긍하고 있을지 모른다는 자기의심이 들더라구요. 의견 남겨주셔서 감사합니다.