목차
1. 응집도
2. 결합도
3. 무엇이 높아야할까?
개발을 하다보면 응집도와 결합도라는 단어를 듣게 되는데 뭐가 높아야 되고 낮아야 한다는데 무슨 말인지 모르겠다. 응집도와 결합도의 개념을 알고 개발할 때 참고하여 좋은 소프트웨어를 만들어보도록 하자.
1. 응집도
- 모듈 내부의 요소들이 얼마나 밀접하게 관련되어 있는지를 나타내는 척도
즉 하나의 모듈이 하나의 작업이나 관련된 작업을 수행하도록 설계된 것을 말한다. 이런 응집도는 수준에 따라 종류가 나누어진다. 아래로 갈 수록 높은 응집도이다.
우연적 응집도 | 모듈 내부의 작업을 수행하는 요소들이 아무런 연관성이 없이 우연히 모여있는 경우 |
논리적 응집도 | 유사한 작업을 수행하는 요소들이 모여있는 경우 |
시간적 응집도 | 특정 시간에 실행되어야 하는 요소들이 모여있는 경우 |
절차적 응집도 | 특정 순서로 실행되어야 하는 작업들이 모여있는 경우 |
통신적 응집도 | 동일한 데이터를 사용하거나 생성하는 요소들이 모여있는 겨우 |
순차적 응집도 | 한 요소의 출력이 다음 요소의 입력으로 사용되는 경우 |
기능적 응집도 | 모듈 내부의 모든 요소들이 단일 기능을 수행하는 경우 |
2. 결합도
- 모듈 간의 상호 의존성을 나타내는 척도
결합도가 낮을수록 모듈들이 독립적임을 나타내며 응집도와 마찬가지로 수준에 따라 단계가 나눠진다. 아래로 갈수록 낮은 결합도이다.
내용 결합도 | 한 모듈이 다른 모듈의 내부에 직접 접근하거나 변경하는 경우 |
공통 결합도 | 여러 모듈이 전역 데이터를 공유하는 경우 |
외부 결합도 | 여러 모듈이 외부의 특정 인터페이스나 장치를 공유하는 경우 |
제어 결합도 | 한 모듈이 다른 모듈의 종작을 제어하기 위해 제어신호를 전달하는 경우 |
스템프 결합도 | 모듈 간에 구제체와 같은 복잡한 데이터 형식을 전달하는 경우 |
자료 결합도 | 모듈 간에 단순한 데이터 값만 전달하는 경우 |
메시지 결합도 | 모듈 간에 인터페이스를 통해 메시지를 주고받는 경우 |
3. 무엇이 높아야할까?
항상 그렇지는 않지만 일반적으로는 응집도롸 결합도는 반비례관계로 응집도가 높으면 결합도가 낮아진다. 그렇다면 어떤 것이 높아야할까? 자료를 찾아보면 응집도가 높은 것이 좋다고 하는데 그 이유가 뭘까?
결합도가 높을 경우 수정이 필요한 모듈을 수정할 때 그에 의존하는 모듈들도 전부 수정을 해줘야한다. 이는 유지보수를 하는데 의존하는 모듈을 전부 찾아내고 수정해야하기 때문에 크게 불리해질 수 있다.
하지만 응집도가 높은 경우 수정이 필요한 모듈을 수정해도 다른 모듈들에 영향을 끼치지 않기 때문에 유지보수나 확정성 면에서 유리하다.