-
OOP, FP 관점의 결합도와 응집도카테고리 없음 2020. 8. 5. 21:52
자바에 익숙한 프로그래머들은 데이터와 기능(메서드)를 의미있게 객체로 묶어내는 것이 응집도를 높이고
각 객체는 그들의 할일을 충실하게 하도록 설계되기 때문에 시스템 간 응집도를 낮추는 방법이라 한다.
그래서 객체를 설계하는 역량이 상당히 중요하다. 어떤 데이터를 가져야 하는지? 그 데이터들로 어떤 기능을 수행하게 해야 하는지? 객체간 의존성을 어떻게 관리 해야 하는지?
반대로 함수형 프로그래밍 세상에선 객체는 없다. (ㅜㅜ)
함수세상에서의 결합도와 응집도는 더 이상 객체 관점에서 설명할 수가 없다.
그래서 데이터는 데이터 따로, 기능(함수)는 기능 따로 분리가 될 수 밖에 없고, 기능(함수)을 잘게 쪼갤 수 있는 데까지 쪼개고 추상화 하는 방식으로 결합도와 응집도를 설명하는 것 같다.
예를 들어 filter, map, flatMap, reduce 등등.. 이런것은 재귀적으로 실행되는 각종 기능을 몇가지의 core한 함수들로 추상화된 결과물이다.
가만 생각해보면 filter, map 등이 있었기 때문에 더 간결하게 짤 수 있었던 경험들로 보아 함수의 추상화는 시스템의 결합도를 낮출 수 있는 방법이라 동의할 수 있을 것 같다.
특히나 Type Functional Programming 의 일종의 타입 지도?
이런 것을 보면 도대체 무슨 말인지 모르겠지만 무언가 엄청난 추상화의 결과라고 생각하면 된다.
두 가지 패러다임이 참 다르지만 요새는 어느하나 더 중요하거나 덜 중요하다고 할 수 없고, 패러다임이 섞여 나오는 언어들이 등장했기 때문에 적절한 판단이 중요할 것 같다. 실무적으로는 달라지는 코딩 패턴에 대해 많은 대화를 나눠야 하는 시기라고 생각한다.