https://gall.dcinside.com/board/view/?id=programming&no=2829956&fcno=9038098

적당한 프로그래밍.레거시 리팩토링을 나는 종종 하는 편임.왜냐면 이전 개발자가 좆같이 짠걸 수정하거나, 일정이 급해서 내 코딩중 해당 규모의 구조로 정리한걸나중에 내가 다시 기능 추가 보완을 하는 경우가 많음.내가 한건 아무런 문제가gall.dcinside.com

https://gall.dcinside.com/board/view/?id=programming&no=2829972&fcno=9038131

프로그래밍 언어는 왜 언어인가?프로그래밍 언어가 왜? 언어인지 모르는 애들이 많다.언어란 무엇인가?언어는 명사, 형용사, 동사 등으로 이루어져있다.촘스키 형님이 형식언어 문법 이론으로 잘 설명해주셨는데 형식언어를 매우 단순하게 설명하면S-&gall.dcinside.com

https://gall.dcinside.com/board/view/?id=programming&no=2837580&page=1

코딩의 기초https://gall.dcinside.com/board/view/?id=programming&no=2829956&fcno=9038098 적당한 프로그래밍. - 프로그래밍 갤러리레거시 리팩토링을 나는gall.dcinside.com



응집도의 한계


프로그램에서 기초적인 기능은 어떤 식으로 응집할지에 대한 고민은 언제나 업계의 고민이었음.

하지만 어떻게든간에 기초적인 기능은 응집하여 구조화 할수 있기는 함.


그러면 확장된 응집은 어디까지가 가능할까?

이것이 응집도의 한계임.


단순한 기능은 응집되기가 아주 쉬움.

그러나 도메인에서 io클래스 라도 원 클래스 그대로 사용하는 법이 없음.

자주 사용하는 자료구조 형태와 기능들이 해당 도메인에서 io클레스에 덧붙어 같은 덩어리로 응집되기 마련임.


자료구조 형태는 도메인의 프로젝트들에서는 어느정도 일반화 하여 사용할수 있음.

그러나 어느정도의 기능 확장의 경계를 넘어서게 되면, 도리어 복잡도가 올라가게되어 

기능의 분화, 즉 응집도의 한계점이 발생하는 순간을 보게됨. (단순한 예시로는 싱글턴 클래스가 멀티쓰레드 환경에서 다중 인스턴스가 필요하게 된다던가 하는 식임)


이러한 것들이 발생하게 되면 항상 어렵게 느껴지게됨.

비즈니스적인 분화가 필요하게 되는 확장의 한계점은 처리가 쉬운편인데


기초적인 기능들이 필요해서 쌓아올린 코드들이 자잘한 기능들이

너무나 많아지고 복잡해져서 기능 분화에 대한 필요성은 느끼는데, 해당 클래스를 정리해서 일반화된 기능과 특화된 기능을 분리하기에는

단일 목표의 복합기능 클래스에서 조정되는 응집도의 경계가 명확하게 드러나지를 않음.


이것은 1차원적인 응집도는 다른 응집도의 대상에 의해 경계가 구분되는데 반해


단일 목표의 복합기능 클래스의 경우, 외부의 경계가 되어줄 여집합적 응집도를 발견하는건 경험적으로 어려웠음.

이러한 것들은 운이 좋으면 다른 프로젝트들에서 해당 클래스들을 활용하면서 응집도의 분화가 일어날수 있지만

그런 경험은 생각보다 쉽지 않은것 같음.



이런 부분을 해결하기 위한 지식과 감각을 나는 모르겠음.

클래스 내부는 부품단위로 조립되어 해체가 가능하지만

특정 부품들이 빠진 제네럴 클래스와 특화 클래스의 구분은 여전히 어려운것 같음.


복잡도의 한계를 맞이하게된 클래스인데, 개별로 분화하기가 어려운 클래스는 나에게 항상 난제임.