결합도와 응집도
결합도(Coupling)와 응집도(Cohesion)이란?
결합도와 응집도는 모듈의 독립성을 판단하는 두 가지 지표이다. 결합도는 모듈과 모듈 사이의 의존 정도를 말하고, 응집도는 모듈 내부의 기능적인 집중 정도라고 할 수 있다.
소프트웨어에서는 높은 응집도와 낮은 결합도를 가지도록 지향해야 한다.
결합도(Coupling)
- 결합도는 모듈과 모듈 간의 의존하는 정보를 측정하는 것이다.
- 모듈과 모듈간의 상호 의존성을 나타낸다.
- 독립적인 모듈이 되기 위해서는 결합도가 낮아야한다.
결합도가 높은 클래스의 문제점
- 연관된 다른 클래스가 변경되면 더불어 변경해야 한다.
- 수정하려는 클래스를 이해하기 위해 연관되어있는 다른 클래스를 함께 이해해햐 한다.
- 클래스의 재사용이 힘들다.
결합도가 낮은 클래스의 특징
- OCP(Open Close Principle, 개방 폐쇄의 원칙): 확장에는 개방되고, 변경에는 폐쇄되어야 한다.
- 다형성이 좋은 클래스
종류 | 내용 |
---|---|
자료 결합도(Data Coupling) | 모듈간 인터페이스로 전달되는 파라미터를 통해서만 상호작용이 일어나는 경우 결합도가 제일 낮고 이상적인 형태이다. |
스탬프 결합도(Stamp Coupling) | 모듈간의 인터페이스로 배열이나 객체, 자료 구조 등이 전달되는 경우 |
제어 결합도(Control Coupling) | 어떤 모듈이 다른 모듈 내부의 논리적인 흐름을 제어하는 제어 요소를 전달하는 경우 |
외부 결합도 (External Coupling) | 어떤 모듈이 외부에 있는 다른 모듈의 데이터를 참조하는 경우 (데이터, 통신 프로토콜 등) |
공통 결합도(Common Coupling) | 여러 개의 모듈이 하나의 공통 데이터 영역(전역 변수 참조 및 갱신)을 사용하는 경우 |
내용 결합도 (Content Coupling) | 어떤 모듈 내부에 있는 변수나 기능을 다른 모듈에서 사용하는 경우 결합도가 제일 높고 제일 좋지 않은 형태이다. |
아래로 향할수록 결합도가 높다고 판단한다. |
응집도(Cohension)
응집도는 연관된 코드들이 얼마나 잘 모여있는가를 의미한다. 즉, 모듈 내부 요소들 간의 연관성 정도를 나타내는 척도이며, 이는 특정 프로그램 모듈이 수행하는 작업들이 서로 얼마나, 그리고 어떤 방식으로 연관되어 있는지를 나타낸다.
- 응집도는 모듈 내부의 기능적인 응집 정도를 나타낸다.
- 정보 은닉의 확장 개념으로 하나의 모듈은 하나의 기능을 수행하는 것을 의미한다.
- 독립적인 모듈이 되기 위해서는 응집도가 높아야 한다.
응집도가 낮은 클래스의 문제점