응집도(Cohesion)와 결합도(Coupling)
1. 정의
(1) 응집도(Cohesion)
• 하나의 모듈(클래스, 함수, 컴포넌트 등) 내부 구성 요소들이 하나의 목적을 위해 얼마나 밀접하게 관련되어 있는지를 나타내는 척도.
• 응집도가 높을수록 모듈의 독립성, 재사용성, 유지보수성이 향상됨.
(2) 결합도(Coupling)
• 서로 다른 모듈 간의 의존성 정도를 나타내는 척도.
• 결합도가 낮을수록 모듈 간 독립성이 높아지고, 변경 시 영향 범위가 줄어듦.
2. 응집도와 결합도의 관계
• 좋은 모듈 설계 원칙: 응집도는 높이고, 결합도는 낮춘다.
• 응집도 ↑ → 모듈 자체의 목적성·자율성 강화
• 결합도 ↓ → 모듈 간 영향 최소화, 재사용 및 유지보수 용이
3. 응집도 및 결합도 종류
| 구분 | 응집도의 종류 (낮음 -> 높음) | 결합도의 종류 (높음 → 낮음) |
| ↑ 나쁜 설계 좋은 설계 ↓ |
우연적 응집 : 관련 없는 기능이 한 모듈에 모임 |
내용 결합 : 한 모듈이 다른 모듈 내부 코드 직접 참조 (최악) |
| 논리적 응집 : 유사한 성격의 기능을 그룹화 (예: 입력 처리 루틴) |
공통 결합 : 전역 변수 공유 |
|
| 시간적 응집 : 특정 시점에 실행되는 기능 집합 (예: 초기화 루틴) |
외부 결합 : 어떤 모듈이 외부에 있는 다른 모듈의 데이터를 참조 |
|
| 절차적 응집 : 특정 절차 순서에 따른 기능 그룹화 |
제어 결합 : 제어 신호(플래그)를 전달하여 동작 제어 |
|
| 교환적 응집 : 동일한 입력 또는 출력 데이터를 사용하는 기능 묶음 |
스탬프 결합 : 데이터 구조 전체를 전달하나 일부만 사용 |
|
| 순차적 응집 : 한 기능의 출력이 다음 기능의 입력으로 사용 |
자료 결합 : 필요한 데이터만 매개변수로 전달 (이상적) |
|
| 기능적 응집 : 모듈 전체가 단일 기능을 수행 (가장 높은 응집도) |
4. 활용 및 시사점
• 소프트웨어 아키텍처 및 설계 품질의 핵심 척도
• 클린 코드, 마이크로서비스 아키텍처(MSA) 등 현대 개발 패러다임에서도 적용
• 정보관리기술사 시험에서 응집도와 결합도는 반드시 함께 설명해야 하는 핵심 개념
5. 결론
응집도와 결합도는 모듈화(Modularity)의 두 축으로, 높은 응집도와 낮은 결합도를 지향하는 것이 바람직하다.
이는 유지보수성, 확장성, 재사용성을 높여 성공적인 소프트웨어 개발을 가능하게 한다.