final과 abstract를 이용하여 클래스를 구현하는 이유 #38
Replies: 1 comment
-
위 말이 나오게 된 배경은 무분별한 상속 때문이라 생각합니다.
구체화된 클래스를 상속하는 경우, 구체화 클래스가 변경될 때 마다 자식에게 잦은 영향이 가게 됩니다. 또한 이를 final 없이 막을 수 없습니다. 주제의 핵심은 "상속의 위험을 줄이고 설계 의도를 명확하게 전달하자" 라고 생각합니다. Service 같은 경우, 프록시 문제로 인해 Final 사용을 피해야하며, 데이터만 담는 Dto 역시 컨벤션적으로 상속 대상이라고 생각하지 않습니다. 결국 중요한 것은 final이나 abstract라는 키워드 자체가 아니라, 상속에 대해 어떤 설계 의도를 가지고 있는지를 팀원에게 명확히 전달하는 것이라고 생각합니다. 우리는 혼자 개발하는 것이 아니라 동료들과 함께 개발하기 때문에, 클래스가 확장을 의도한 것인지 아닌지를 공유하는 것이 중요합니다. 따라서 상황에 따라 final이나 abstract를 사용하는 것은 좋은 방법이 될 수 있지만, 그것만이 유일한 방법은 아니라고 생각합니다. 패키지 구조, 네이밍, 팀 컨벤션, 코드 리뷰, 문서화 등을 통해서도 충분히 설계 의도를 표현할 수 있습니다. 이 주장은 절대적인 규칙이라기보다는, 상속을 기본값으로 열어두지 말고 의도적으로 설계하라는 원칙으로 받아들이는 것이 적절하다고 생각합니다. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
객체 지향 프로그래밍에서는 모든 클래스를 final과 abstract를 이용하여 구현해야 한다는 주장이 있습니다.
Beta Was this translation helpful? Give feedback.
All reactions