응집도
응집도는 모듈에 포함된 내부 요소들이 하나의 책임 또는 목적을 위해 연결되어 있는 연관 정도를 말하는 것을 응집도라고 합니다.
- 모듈이 하나의 목적을 수행하는 요소들 간의 연관성 척도
- 모듈 내부의 기능적인 응집 정도를 나타냅니다.
- 변경이 발생할 때 모듈 내부에서 발생하는 변경 정도
- 응집도가 높을수록 좋습니다.
하나의 모듈에 하나의 책임 또는 목적을 위해 연결이 잘 모여있는 것과 아닌 것을 비교해보겠습니다.
유지보수를 위해 "a"라는 기능을 높은 응집도에서는 "a"의 기능을 하나만 수정해도 A 모듈만 찾아서 수정하면 되지만, 낮은 응집도의 "a" 기능들이 흩어져 있거나 A 모듈에 "a" 기능 외에 "b", "c", "d" 기능들도 섞여 있어서 수정하기가 어렵습니다.
A 모듈 안에 "a"라는 기능을 위해 모여 있고 긴밀하게 연결되어 있으면 모듈의 높은 응집도를 가진다고 할 수 있습니다. 반대로 서로 다른 목적을 가지고 있거나 흩어져 있다면 낮은 응집도를 가진다 할 수 있습니다.
응집도가 높으면 변경 대상과 범위가 명확해지는 장점이 있고 코드의 수정이 쉬워집니다.
정리하면 하나의 변경을 수용하기 위해 모듈 전체가 함께 변경되면 응집도가 높은 것이고, 모듈의 일부만 변경된다면 응집도가 낮은 것이다.
응집도가 높으면 무조건 좋을까요??
응집도가 높으면 수정해야될 코드가 하나로 모이기 때문에 수정되는 부분을 파악하기 쉬워지기 때문에 유지보수 하기 좋게 될 것 같습니다.
- 서로 다른 코드를 하나의 모듈에 모아놓고, 그 중 하나의 코드에 변경해야되는 상황이 발생한 경우
- 같이 있다는 이유로 모듈 내에 변경할 필요 없는 코드들이 수정해야될 수 있습니다.
- 하나의 모듈에 수정해야될 코드가 모여있지 않고 이상한 곳에 코드가 모여있는 경우
- 한곳에 있더라도 코드가 복잡해지면 코드 수정이 더 어려울 것 같습니다.
결론: 응집도가 높으면, 복잡도를 낮출 수 있는 것 같습니다.