객체지향의 관점에서 설계의 품질 척도를 결정하기 위해 다양한 평가 기준을 도입하였다.
그 중, 가장 대표적인 척도인 응집도(cohesion)과 결합도(coupling)의 차이를 알아보고자 한다.
응집도란(cohension)?
응집도란 모듈에 포함된 내부 요소들이 연관되어 있는 정도를 나타낸다.
다시 말해, 한 모듈 내에서 내부 요소들이 같은 목적을 추구하는지에 대한 척도이다.
모듈 내의 요소들이 동일 목적을 위해 긴밀하게 협력한다면, 높은 응집도를 가진다고 말한다.
일반적으로 응집도가 높을수록 좋은 설계라고 말할 수 있다.
결합도란(Coupling)?
결합도란 의존성의 정도를 말한다.
한 모듈이 다른 모듈에 대해 얼마나 많은 지식을 갖고 있는지를 나타내는 척도이다.
어떤 모듈이 다른 모듈에 대해 필요한 정보만 알고 있다면 결합도가 낮다고 말한다.
일반적으로 결합도는 낮을수록 좋은 설계라고 말할 수 있다.
응집도가 낮다면?
오브젝트 책 스터디를 하던 중, 갑자기 들었던 의문이 있다.
응집도에 관한 설명 중, 하나의 변경에 대해 다수의 모듈이 함께 변경되어야 한다면 응집도가 낮은 것이다.
라는 내용이 있다.
분명 응집도와 결합도의 차이를 생각함에 있어 응집도는 한 모듈 내부의 관점에서, 결합도는 여러 모듈 사이의 관점에서 다루므로 차이가 발생한다고 생각했는데, 응집도가 낮다면 다수의 모듈이 함께 변경될 수 있다니..? 이러면 결합도가 높은 경우와 별다른 차이가 없는 것 같다는 생각이 들었다.
그래서 응집도와 결합도의 차이는 뭔가요?
위 문제에 대한 결론을 내리기 위해 응집도에 관한 여러 포스트를 찾아본 결과 "모듈의 독립성"이라는 관점에서 설명할 수 있었다. 모듈에 대한 정의를 살펴보면, '한 본체에 대해 독립된 하위 개체' 이다.
즉, 응집도가 높다면 각 모듈이 서로 다른 목적을 가진 상태로 독립적으로 존재하며, 각 모듈은 본연에 목적에 맞는 내부 기능을 갖추고 있게 된다. 하지만, 응집도가 낮다면 같은 목적을 가진 모듈 내 코드들이 여러 모듈에 분산되어 저장되므로, 다수의 모듈에 대한 변경 가능성이 있다고 할 수 있다.
결합도는 서로 다른 모듈에서 의존성이 과하게 부여될 때 결합도가 높다고 말하므로, 해당 관점에서 바라보면 둘의 차이가 명확하다.
응집도를 높이고, 결합도를 낮추는 방법은?
결국 응집도를 높이고 결합도를 낮추어 객체지향적인 프로그래밍 설계를 하기 위해 가장 중요한 것은 캡슐화를 잘 하는 것이다. 상태와 기능을 한 데 모으고, 서로 다른 객체들 사이에서 적절한 책임을 부여하고 필요한 정보만 알도록 하는 것이 좋은 설계를 위한 첫걸음이다.
출처
- 조영호 <오브젝트> 중 4장(설계 품질과 트레이드오프)
'CS > OOP' 카테고리의 다른 글
DDD 설계 vs SQL 중심 설계 (0) | 2023.04.07 |
---|