Utility 클래스라는게 코드 재사용성을 높이기 위해서쓰지만 계륵같은게

-함수를 어따 쳐박아둬야 할지 몰라서 유틸이라 치는경우나

-재사용을 염두에 두고 유틸로 만들긴 했는데 실제로 사용하는곳은 한곳이나 얼마안되는경우가 많음

그리고 잡다구리한게 죄다 유틸리티 클래스에 집중되다보니

한파일의 코드가 비대화 -> 가독성이 구려지고 협업하는경우 병합시 충돌 부담이 큼

그리고 기존 말단클래스의 함수를 유틸로 바꾸거나 유틸함수를 말단으로 옮길경우

해당함수를 사용하는 모든코드에 일괄적인 수정사항 -> 병합부담이 발생하게됨.


이러다보니 유틸함수의 작성에 소극적이게 되고

-> 코드를 재사용하기보단 독립적인 코드를 새로작성하고

-> 코드 규모만 커지고 생산성이 떨어지게됨.


위 문제들을 해결하기 위해서

- UtilBase의 상단에는 종류별로 분기된 유틸리티를 일렬로 상속시키고(코드 비대화 방지)

UtilBase의 하단에는 각 모듈별로 나눠진 동일한 이름의 서브유틸클래스를 둠.


이렇게 하면 유틸클래스간에서는 함수를 요리조리 옮기더라도 사용자클래스에게 가는 영향이 최소화되기때문에

서브유틸클래스에서 국소적으로 사용할 유틸함수를 자유롭게 생산하고

다른곳에서 해당 유틸함수를 사용해야할경우 그 유틸함수만 상위유틸클래스로 승급시켜주면됨.

유틸코드를 정리할때도 최소한의 수정사항만으로 유연하게 변경하기 쉬움


아직 이 구조의 존재를 인식하지 못한 협업자가 이 구조가 반영된 코드를 건들때 조금 애로사항이 있을수는 있지만

크게 복잡하지 않으면서 이 구조를 염두에 두지않은 레거시 코드나 협업자의 코드와 충돌될만한 부분은 없다고 봄


C#기준으로 생각한거라 다른언어에서도 적용가능할지는 몰겠음


이걸 이제야 알았냐거나 무의미하다거나 좆같다 느끼는점이 있으면 알려주셈