응집도(Cohesion)

1. 응집도 (Cohesion)

응집도는 "모듈 내부 요소들이 얼마나 밀접하게 관련되어 있는가"를 나타냅니다. 높을 수록(High Cohesion) 좋습니다.

 

응집도의 종류 (약함 → 강함 순)

단계 종류 설명 예시
1(😫) 우연적(Coincidental) 서로 관련 없는 요소들이 모임 단순 편의상 묶어둔 코드
2(😔) 논리적(Logical) 유사한 성격의 기능을 논리적으로 묶음 출력 관련 함수들을 한 모듈에 모음
3(😒) 시간적(Temporal) 특정 시간에 처리되는 기능을 모음 초기화(init), 종료 처리 모듈
4(😐️) 절차적(Procedural) 실행 순서가 정해진 기능을 모음 순서도는 있으나 데이터 공유는 없음
5(😊) 통신적(Communication) 동일한 입출력 데이터를 사용하는 기능 동일 데이터셋으로 A계산, B계산 수행
6(😄) 순차적(Sequential) 한 활동의 출력이 다음의 입력으로 사용 계산 결과값을 다음 단계의 인자로 전달
7(😍) 기능적(Functional) 단일 목적을 위해 모든 요소가 수행됨 "제곱근 계산" 등 하나의 기능만 수행

 

우연적 응집도(Coincidental Cohesion) = 동시성 응집도

원소들이 뚜렷한 목적 없이 한 모듈내에 존재하고 있는 경우
차이점 : 서로 다른 범주의 업무처리 성격

논리적 응집도(Logical Cohesion)

논리적으로 유사한 기능을 갖지만 서로 간의 관계는 밀접하지 않은 경우
예) 모든 입력(또는 출력) 자료처리 기능을 집합시킨 경우
차이점 :서로 같은 범주의 업무처리 성격

시간적 응집도(Temporal Chohesion) = 임시적 응집도

모든 원소들이 한번에 실행되나 이를 결정하는 매개변수가 논리를 필요치 않는 경우
예) 초기화 작업 모듈 또는 최종처리 작업 모듈
차이점 : 수행순서가 중요치 않고 단순코드로 구성

절차적 응집도(Procedural Cohesion)

모듈 내 구성요소들이 연관성이 있고, 특정 순서에 의해 수행되는 경우
예) 점수를 읽고 평균점수를 계산
차이점 : 수행 순서가 더 중요, 루프나 처리기능간 의사결정을 공유, 데이터가 아닌 제어가 넘어가는 경우

통신적 응집도(Communication Chesion) = 교환적 응집도, 정보적 응집도

모든 원소들이 동일 입력 또는 출력 자료를 이용하여 서로 다른 기능을 수행하는 경우
예) 하나의 파일(고용인 급여표)을 대상으로 갱신(고용인 급여보고서 산출, 평균 급여 계산)하는 작업
차이점 : 처리요소가 특정 순서에 무관

순차적 응집도(Sequential Cohesion)

한 원소의 출력이 다른 원소의 입력이 되는 경우
예) Transaction 파일을 읽고 Master 파일수정
차이점 : 처리 요소가 특정 순서에 맞게 수행됨

기능적 응집도(Fuctional Cohesion) = 함수적 응집도

모듈내의 모든 원소들이 단일 기능을 수행하기 위해 반드시 필요한 경우
프로그램 언어에서 지원받는 라이브러리 등
예) 행렬/제곱근 계산 등 

2. 응집도 구별법

응집도의 4가지 형제(시간적, 절차적, 통신적, 순차적)는 모두 '흐름'과 '연관성'을 다루기 때문에 시험에서 오답률이 가장 높습니다. 이들을 한 방에 구분할 수 있는 "데이터와 순서" 기반의 필터링 기법을 전수해 드릴게요.

응집도 구분용 '필터링 알고리즘'
시험 문제를 읽을 때 다음 순서대로 질문을 던져보세요. 이 필터를 거치면 정답이 남습니다.

 

1단계 : "동일한 입/출력 데이터를 공유하는가?"

  • YES : 통신적(Communication) 응집도
  • 핵심 : 여러 기능이 하나의 데이터 셋(DB 레코드, 전역 파일 등)을 가지고 각자 다른 일을 함.
  • 예시 :  "사원 정보를 가져와서 (1)급여를 계산하고 (2)보고서를 출력한다." (사원 정보라는 데이터는 같음)

2단계 : "앞 작업의 출력이 뒷 작업의 입력으로 쓰이는가?" (Chain)

  • YES : 순차적(Sequential) 응집도
  • 핵심 : A의 결과물 $\rightarrow$ B의 재료. 데이터가 파이프라인처럼 흐름.
  • 예시 : "원천 데이터를 읽어(A) $\rightarrow$ 암호화한 뒤(B) $\rightarrow$ 파일로 저장(C)한다."

3단계 : "데이터 흐름은 없지만, 반드시 '순서'대로 실행되어야 하는가?"

  • YES : 절차적(Procedural) 응집도
  • 핵심 : 알고리즘이나 흐름도(Flowchart) 순서에 따라 실행됨.
  • 예시 : "로그인을 확인한 후, 메인 화면을 띄운다." (로그인 성공 데이터가 화면의 '재료'가 되는 건 아니지만 순서는 지켜야 함)

4단계 : "순서도 상관없고, 단지 특정 '시점'에 한꺼번에 실행되는가?"

  • YES : 시간적(Temporal) 응집도
  • 핵심 : "동시성". 초기화, 종료, 예외 발생 시 처리 등.
  • 예시 : "시스템이 켜질 때 변수를 초기화하고, 장치를 체크하고, 로그 파일을 연다."
영어명 핵심 키워드 (암기용) 데이터 흐름 실행 순서
시간적 Temporal 시점(Timing), 초기화, 종료, 동시 동작 X 상관없음
절차적 Procedural 순서도(Flowchart), 제어 흐름, 반복문 안의 동작들 X 중요함
통신적 Communicational 동일한 입력/출력, 공유 데이터(DB, File) O (공유) 상관없음
순차적 Sequential 출력 $\to$ 입력, 파이프라인, 변환 과정 O (전달) 중요함

 

기출 지문에서 다음 단어가 보이면 바로 찍으세요!

통신적 : "동일한 입력", "동일한 출력", "데이터 구조 공유"
순차적 : "결과를 다음 단계로", "작업의 출력값", "연쇄적"
절차적 : "순서도(Flowchart)", "제어 요소", "실행 절차"
시간적 : "초기화(Initialization)", "종료(Termination)", "특정 시간에 한꺼번에"

⚠️ 주의 (헷갈림 주의보)
통신적 vs 순차적 : 둘 다 데이터가 나오지만, 통신적은 "같은 데이터로 각자 할 일 하기"이고, 순차적은 "내가 준 걸로 네가 일하기"입니다.