194. 응집도 단계 - 우연적, 논리적, 시간적, 절차적, 통신적, 순차적, 기능적 응집도

핵심 인사이트: 응집도 7단계는 "함수들을 한 통에 왜 같이 묶어놨어?"라는 질문에 대한 대답이다. "그냥 귀찮아서"라고 답하면 최악(우연적)이고, "이것들이 모여야 오직 '결제'라는 하나의 위대한 기능을 완벽히 수행하니까"라고 답하면 최고(기능적)다.

Ⅰ. 응집도의 7단계 스펙트럼

정보처리기사 및 소프트웨어 공학에서 응집도는 나쁜 것부터 좋은 것 순서로 7단계로 나뉩니다. (나쁨) 우-논-시-절-통-순-기 (좋음) 앞 글자를 따서 외우는 것이 필수적입니다.

Ⅱ. 단계별 상세 설명 (나쁜 순서대로)

1. 우연적 응집도 (Coincidental Cohesion) - [최악 💩]

  • 이유: 아무 이유 없이, 그냥 개발자가 귀찮아서 모듈 하나에 다 때려 넣은 상태입니다.
  • 예시: Utility.class 안에 '로그 찍기', '날짜 계산하기', 'DB 접속하기'가 몽땅 들어있습니다. 유지보수가 불가능합니다.

2. 논리적 응집도 (Logical Cohesion)

  • 이유: "둘 다 비슷한 종류의 일이네?"라는 논리적 유사성만으로 묶은 상태입니다.
  • 예시: 출력모듈(printType)이라는 함수 안에서, if (type == "프린터")면 프린터로 뽑고, if (type == "화면")이면 화면에 그립니다.

3. 시간적 응집도 (Temporal Cohesion)

  • 이유: 기능적 연관성은 없지만, 특정 시간에 동시에 실행되어야 해서 하나로 묶은 상태입니다.
  • 예시: 시스템_초기화() 함수 안에 '캐시 지우기', 'DB 연결하기', '임시폴더 삭제' 등 프로그램 부팅 시점에 할 일들을 몰아넣음.

4. 절차적 응집도 (Procedural Cohesion)

  • 이유: 모듈 안의 기능들이 실행되는 순서(흐름) 가 정해져 있어서 묶은 상태입니다.
  • 예시: 입학_수속() 모듈 안에 '원서 접수하기 ➔ 등록금 납부하기 ➔ 학생증 발급하기' 순서대로 함수를 배치함.

5. 통신적 응집도 (Communicational Cohesion)

  • 이유: 모듈 안의 기능들이 서로 다른 일을 하지만, 같은 데이터(자료)를 입력받거나 같은 데이터를 출력하기 위해 묶인 상태입니다.
  • 예시: 이라는 동일한 데이터를 가지고 작동하는 '책 정보 저장하기', '책 정보 수정하기' 함수들을 하나로 묶음. (절차적 응집도보다 좋음)

6. 순차적 응집도 (Sequential Cohesion)

  • 이유: 모듈 안에서 어떤 기능의 출력 결과가 바로 다음 기능의 입력 데이터로 사용되는 컨베이어 벨트 같은 끈끈한 상태입니다.
  • 예시: 성적_처리() 모듈 안에서 '총점 구하기' 함수의 결과(출력)를 그대로 받아 '평균 구하기' 함수의 입력으로 쓰는 경우.

7. 기능적 응집도 (Functional Cohesion) - [최고 🌟]

  • 이유: 모듈 내부의 모든 명령어와 함수들이 오직 단 하나의 완벽한 목적(기능)만을 달성하기 위해 존재합니다.
  • 예시: 코사인_계산하기(), 신용카드_결제_승인() 처럼 그 이름 자체로 완벽히 하나의 기능만 수행하며 부작용이 없는 이상적인 모듈입니다.

📢 섹션 요약 비유: 서랍장 정리와 같습니다. 1. 아무거나 쑤셔 넣기(우연적) ➔ 2. 비슷한 모양끼리 넣기(논리적) ➔ 3. 아침에 쓸 것만 모아놓기(시간적) ➔ 4. 입는 순서대로 모아놓기(절차적) ➔ 5. 빨간색 옷만 모아놓기(통신적) ➔ 6. 윗도리와 밑도리 세트로 모아놓기(순차적) ➔ 7. 오직 '겨울용 수면 양말'만 딱 접어서 전용 칸에 모아놓기(기능적).