본문 바로가기
카테고리 없음

응집도와 결합도

by 개발자doc 2024. 7. 2.
목차
1. 응집도
2. 결합도
3. 무엇이 높아야할까? 

 

개발을 하다보면 응집도와 결합도라는 단어를 듣게 되는데 뭐가 높아야 되고 낮아야 한다는데 무슨 말인지 모르겠다. 응집도와 결합도의 개념을 알고 개발할 때 참고하여 좋은 소프트웨어를 만들어보도록 하자.

1. 응집도
  • 모듈 내부의 요소들이 얼마나 밀접하게 관련되어 있는지를 나타내는 척도

즉 하나의 모듈이 하나의 작업이나 관련된 작업을 수행하도록 설계된 것을 말한다. 이런 응집도는 수준에 따라 종류가 나누어진다. 아래로 갈 수록 높은 응집도이다.

우연적 응집도 모듈 내부의 작업을 수행하는 요소들이 아무런 연관성이 없이 우연히 모여있는 경우
논리적 응집도 유사한 작업을 수행하는 요소들이 모여있는 경우
시간적 응집도 특정 시간에 실행되어야 하는 요소들이 모여있는 경우
절차적 응집도 특정 순서로 실행되어야 하는 작업들이 모여있는 경우
통신적 응집도 동일한 데이터를 사용하거나 생성하는 요소들이 모여있는 겨우
순차적 응집도 한 요소의 출력이 다음 요소의 입력으로 사용되는 경우
기능적 응집도 모듈 내부의 모든 요소들이 단일 기능을 수행하는 경우
2. 결합도
  • 모듈 간의 상호 의존성을 나타내는 척도

결합도가 낮을수록 모듈들이 독립적임을 나타내며 응집도와 마찬가지로 수준에 따라 단계가 나눠진다. 아래로 갈수록 낮은 결합도이다.

내용 결합도 한 모듈이 다른 모듈의 내부에 직접 접근하거나 변경하는 경우
공통 결합도 여러 모듈이 전역 데이터를 공유하는 경우
외부 결합도 여러 모듈이 외부의 특정 인터페이스나 장치를 공유하는 경우
제어 결합도 한 모듈이 다른 모듈의 종작을 제어하기 위해 제어신호를 전달하는 경우
스템프 결합도 모듈 간에 구제체와 같은 복잡한 데이터 형식을 전달하는 경우
자료 결합도 모듈 간에 단순한 데이터 값만 전달하는 경우
메시지 결합도 모듈 간에 인터페이스를 통해 메시지를 주고받는 경우
3. 무엇이 높아야할까? 

항상 그렇지는 않지만 일반적으로는 응집도롸 결합도는 반비례관계로 응집도가 높으면 결합도가 낮아진다. 그렇다면 어떤 것이 높아야할까? 자료를 찾아보면 응집도가 높은 것이 좋다고 하는데 그 이유가 뭘까?

결합도가 높을 경우 수정이 필요한 모듈을 수정할 때 그에 의존하는 모듈들도 전부 수정을 해줘야한다. 이는 유지보수를 하는데 의존하는 모듈을 전부 찾아내고 수정해야하기 때문에 크게 불리해질 수 있다. 

하지만 응집도가 높은 경우 수정이 필요한 모듈을 수정해도 다른 모듈들에 영향을 끼치지 않기 때문에 유지보수나 확정성 면에서 유리하다.