모듈 응집도 7단계

🔥 매회 출제 (priority 3)

🌱 왜 배우나

학교 모둠 활동을 떠올려 보자. “발표 준비” 하나만 맡은 모둠은 자료 조사, 슬라이드, 연습이 자연스럽게 맞물린다. 반대로 한 모둠에 “발표 + 급식 당번 + 화단 물주기”를 몰아주면 뭐 하나 바꾸려다 전부 꼬인다. 프로그램 속 모듈(module, 하나의 기능 덩어리)도 똑같다. 한 모듈이 한 가지 일에 얼마나 집중하는지를 재는 자가 바로 응집도(Cohesion)다. 집중도가 높을수록 고치기, 다시 쓰기, 테스트하기가 모두 쉬워진다.

📖 핵심 개념

응집도란 한 모듈 안의 요소들이 하나의 목적을 위해 얼마나 가깝게 묶여 있는지를 나타내는 척도다. 높을수록 좋은 설계다. 결합도(Coupling, 모듈 사이의 의존도 — se-coupling-001 참고)와는 방향이 정반대다.

  • 응집도는 총 7단계로 나뉜다.
  • 강→약 순서: 기능적 → 순차적 → 통신적 → 절차적 → 시간적 → 논리적 → 우연적.
  • 가장 강한 기능적 응집도는 “딱 한 가지 일만 하는” 이상적인 모듈을 말한다.
  • 가장 약한 우연적 응집도는 아무 관련 없는 기능들이 한 모듈에 우연히 모인 최악의 상태다.

시험에서는 각 단계의 정의를 키워드로 구분하는 것이 핵심이다.

🔍 시각화

  응집도 강도 스펙트럼 (좋음 ← → 나쁨)

  강(좋음)                                    약(나쁨)
   ┃                                           ┃
   ▼                                           ▼
  ┌──────┬──────┬──────┬──────┬──────┬──────┬──────┐
  │기능적│순차적│통신적│절차적│시간적│논리적│우연적│
  └──────┴──────┴──────┴──────┴──────┴──────┴──────┘
    ▲                                           ▲
    │                                           │
  단일 기능                               관련 없는
  에 집중                                기능의 뒤섞임

  순차적 응집도 예시 (데이터 흐름):

  [활동 A] ──출력──▶ [활동 B] ──출력──▶ [활동 C]
     ↑                  ↑                  ↑
  A의 결과가         B의 결과가         최종 결과
  B의 입력           C의 입력

↔️ 이웃 개념 구분

  • 응집도 vs 결합도: 응집도는 모듈 “안”의 관련도(높을수록 좋음), 결합도는 모듈 “사이”의 의존도(낮을수록 좋음). 방향이 반대다.
  • 순차적 vs 절차적: 순차적은 앞 활동의 출력 데이터가 다음 활동의 입력이 된다. 절차적은 실행 순서만 정해져 있고 데이터는 서로 주고받지 않는다.

🔑 핵심 용어

  • Functional(기능적) 응집도 [최강]: 모듈의 모든 요소가 단 하나의 기능에만 기여한다. 가장 이상적인 모양.
  • Sequential(순차적) 응집도: 앞 활동의 결과가 다음 활동의 재료로 이어진다. 물이 파이프라인을 따라 흐르듯 데이터가 순서대로 흐르는 구조.
  • Communication(통신적) 응집도: 같은 입력 데이터나 출력 데이터를 공유하는 활동끼리 묶은 것. 같은 재료로 여러 요리를 하는 것과 비슷하다.
  • Procedural(절차적) 응집도: 정해진 순서대로 실행되어야 하는 활동들의 묶음. 순서는 중요하지만 데이터는 공유하지 않는다.
  • Temporal(시간적) 응집도: 같은 시간대에 함께 실행되는 기능들의 묶음. 예) 프로그램 시작 시의 초기화 작업.
  • Logical(논리적) 응집도: 비슷한 종류의 기능을 한 모듈에 묶어 두고, 제어 플래그(flag, 어떤 기능을 쓸지 고르는 스위치)로 선택한다.
  • Coincidental(우연적) 응집도 [최약]: 관련 없는 기능이 우연히 한자리에 모인 상태. 최악의 설계.

✅ 스스로 가르쳐보기

이 내용을 처음 듣는 친구에게 설명한다면 어떻게 시작하시겠어요? 먼저 “응집도가 뭔지”를 한 문장으로 말하고, 이어서 강→약 7단계를 본인의 말로 풀어 보세요. 각 단계마다 하나씩 일상의 예를 붙여 보면 더 오래 기억에 남습니다.

체크포인트:

  • 7단계를 강→약 순서로 빠짐없이 나열할 수 있는가?
  • 순차적과 절차적의 차이를 “데이터가 흐르는가”로 구분해 말할 수 있는가?
  • 시간적 응집도의 예를 하나 이상 들 수 있는가?
  • 응집도와 결합도가 반대 방향이라는 점을 짚었는가?

🎯 기출 포인트

  • 강→약 암기법: “기순통절시논우” (기능-순차-통신-절차-시간-논리-우연)
  • 2024-2회: 순차적 응집도 빈칸 문제 — “한 활동의 출력이 다음 활동의 입력”
  • 순차 vs 절차 함정: 순차는 데이터 흐름, 절차는 실행 순서
  • 응집도는 높을수록, 결합도는 낮을수록 좋다 — 세트로 암기

🔗 연결 개념