Utility 클래스라는게 코드 재사용성을 높이기 위해서쓰지만 계륵같은게
-함수를 어따 쳐박아둬야 할지 몰라서 유틸이라 치는경우나
-재사용을 염두에 두고 유틸로 만들긴 했는데 실제로 사용하는곳은 한곳이나 얼마안되는경우가 많음
그리고 잡다구리한게 죄다 유틸리티 클래스에 집중되다보니
한파일의 코드가 비대화 -> 가독성이 구려지고 협업하는경우 병합시 충돌 부담이 큼
그리고 기존 말단클래스의 함수를 유틸로 바꾸거나 유틸함수를 말단으로 옮길경우
해당함수를 사용하는 모든코드에 일괄적인 수정사항 -> 병합부담이 발생하게됨.
이러다보니 유틸함수의 작성에 소극적이게 되고
-> 코드를 재사용하기보단 독립적인 코드를 새로작성하고
-> 코드 규모만 커지고 생산성이 떨어지게됨.
위 문제들을 해결하기 위해서
- UtilBase의 상단에는 종류별로 분기된 유틸리티를 일렬로 상속시키고(코드 비대화 방지)
- UtilBase의 하단에는 각 모듈별로 나눠진 동일한 이름의 서브유틸클래스를 둠.
이렇게 하면 유틸클래스간에서는 함수를 요리조리 옮기더라도 사용자클래스에게 가는 영향이 최소화되기때문에
서브유틸클래스에서 국소적으로 사용할 유틸함수를 자유롭게 생산하고
다른곳에서 해당 유틸함수를 사용해야할경우 그 유틸함수만 상위유틸클래스로 승급시켜주면됨.
유틸코드를 정리할때도 최소한의 수정사항만으로 유연하게 변경하기 쉬움
아직 이 구조의 존재를 인식하지 못한 협업자가 이 구조가 반영된 코드를 건들때 조금 애로사항이 있을수는 있지만
크게 복잡하지 않으면서 이 구조를 염두에 두지않은 레거시 코드나 협업자의 코드와 충돌될만한 부분은 없다고 봄
C#기준으로 생각한거라 다른언어에서도 적용가능할지는 몰겠음
이걸 이제야 알았냐거나 무의미하다거나 좆같다 느끼는점이 있으면 알려주셈
유틸이 저렇게 많은건 뭔가 프로그램 구조가이상하다고봄 jdk나 닷넷봐도 유틸 자체는 얼마 안됨...
유틸이 유저를 바라보거나 유틸과 유저가 결합되어 있는건 잘못된거야. 유저가 유틸을 바라보고 유틸을 유저랑 완전하게 분리해라. 어느 언어건 마찬가지지만 유명한 authentication 라이브러리가 있을텐데 그 자체가 통으로 독립적이고 완전성을 가지고 있어 설치형 라이브러리로 배포되는 이유가 그런 형태를 가지고 있기 때문이다.
d가 정확히 짚었네. 분리에 대해서 조금 더 첨언을 하자면 유틸이란 개념 자체가 재사용을 위해 분리해둔 것 같은데, 일단 다이어그램을 대충 봐도 비즈니스 로직이 유틸에 대한 디펜던시가 강하다. 일단 인터페이스를 먼저 작성해서 유틸과 비즈니스 로직 분기가 첫번째고, 유틸자체에 서브유틸을 만든다 하였는데, 이는 곧 모듈화를 뜻한거로, 모듈자체의 인터페이스 또한 작성되어야 한다.