티스토리 뷰

반응형
✅ 응집도

✅ 응집도


📌 응집도의 정의

응집도(cohesion) 는 하나의 모듈 내부에서 수행하는 작업들이 서로 얼마나 밀접하게 관련되어 있는지를 나타내는 정도입니다.
모듈은 프로그램을 구성하는 작은 단위로, 함수, 클래스, 파일 등으로 구현됩니다.
모듈 내부의 작업들이 모두 하나의 목표를 위해 협력하면 응집도가 높고, 서로 다른 목적의 작업들이 섞여 있으면 응집도가 낮습니다.
응집도는 소프트웨어 설계 품질을 평가하고 유지보수성을 높이는 중요한 기준입니다.


📌 응집도의 필요성

응집도가 중요한 이유는 프로그램을 더 잘 이해하고 유지보수하기 위해서입니다.
응집도가 낮은 모듈은 여러 목적의 코드가 섞여 있어 수정 시 다른 기능에 영향을 주고 오류를 유발하기 쉽습니다.
반대로 응집도가 높은 모듈은 하나의 목적에 집중되어 수정이 간단하고 다른 모듈에 영향을 주지 않으며 테스트와 관리가 쉽습니다.
이처럼 응집도는 코드의 품질을 결정짓는 핵심 요소 중 하나입니다.

구분 낮은 응집도 높은 응집도
유지보수 어렵습니다 쉽습니다
오류 자주 발생합니다 적습니다
이해도 낮습니다 높습니다
테스트 힘듭니다 용이합니다


📌 응집도의 단계

응집도는 총 7단계로 구분되며, 위에서 아래로 갈수록 모듈 내부 작업들의 관련성이 낮아집니다.

높음
┃ 기능적
┃ 순차적
┃ 교환적
┃ 절차적
┃ 시간적
┃ 논리적
┃ 우연적
낮음


🔷 기능적 응집

모듈 내부의 모든 작업이 오직 하나의 명확한 목적만을 위해 존재하는 상태입니다.
가장 이상적인 형태이며, 유지보수성과 테스트 용이성, 가독성이 매우 높습니다.
모듈의 책임이 분명하고 다른 기능과 혼재하지 않기 때문에 오류 발생 가능성이 적습니다.

📌 예시 1

    *회원 정보를 데이터베이스에 저장하는 모듈*은 입력된 회원 데이터를 받아 유효성을 검사하고, 데이터베이스에 저장하는 작업만 수행합니다.
    다른 작업 없이 오직 저장 기능에만 집중하기 때문에 기능적 응집의 좋은 사례입니다.

📌 예시 2

    *사용자 입력을 검증하는 모듈*은 사용자가 입력한 데이터가 올바른지 검사하는 역할만 담당합니다.
    이름 공백 여부, 이메일 형식, 비밀번호 규칙만 확인하고, 데이터베이스 저장이나 출력은 하지 않습니다.
    검증이라는 하나의 목적만 수행하므로 기능적 응집입니다.

📌 예시 3

    *파일을 백업하는 모듈*은 지정된 파일을 다른 위치에 복사하는 작업을 합니다.
    백업 외의 압축, 삭제 등 다른 작업은 하지 않습니다.
    백업이라는 단일 목적에 충실한 기능적 응집입니다.

📌 예시 4

    *계산된 금액을 출력하는 모듈*은 계산된 데이터를 받아 사용자에게 보여주는 역할만 합니다.
    출력 외에 저장이나 로깅은 수행하지 않으며, 단일 책임을 가집니다.
    기능적 응집의 예시입니다.

📌 예시 5

    *이미지 파일을 메모리에 로드하는 모듈*은 파일을 확인하고 메모리에 적재만 합니다.
    이미지를 가공하거나 저장하지 않으며 로드라는 하나의 목적만 수행합니다.
    이 또한 기능적 응집입니다.



🔷 순차적 응집

모듈 내부의 작업들이 순서대로 이어지며, 앞의 작업 결과가 다음 작업의 입력으로 사용되는 상태입니다.
데이터가 순차적으로 흐르고 각 작업이 자연스럽게 연결됩니다.
기능적 응집보다는 낮지만, 작업의 흐름이 명확합니다.

📌 예시 1

    *파일을 읽고 분석하고 출력하는 모듈*은 파일 데이터를 읽고, 분석한 뒤 결과를 출력합니다.
    읽지 않으면 분석도 출력도 불가능하며, 각 단계가 데이터 흐름에 따라 이어집니다.
    순차적 응집의 예입니다.

📌 예시 2

    *사용자 입력을 받아 검증하고 저장하는 모듈*은 입력값을 받고 검증 후 저장합니다.
    검증이 통과하지 않으면 저장할 수 없기 때문에 데이터가 순차적으로 흐릅니다.

📌 예시 3

    *로그를 수집하고 필터링해 저장하는 모듈*은 수집된 로그 데이터를 걸러내고 저장합니다.
    수집된 로그가 없으면 필터링과 저장도 불가능합니다.
    작업이 순서대로 이어집니다.

📌 예시 4

    *주문을 계산하고 송장을 출력한 뒤 발송하는 모듈*은 계산 없이는 송장도 발송도 불가능합니다.
    계산 → 송장 → 발송 순서가 명확하게 연결됩니다.

📌 예시 5

    *데이터를 다운로드한 뒤 압축하고 전송하는 모듈*은 다운로드 없이는 압축이나 전송이 불가능합니다.
    작업이 순차적으로 진행됩니다.



🔷 교환적 응집

모듈 내부의 작업들이 같은 데이터를 대상으로 하지만 서로 독립적으로 수행되는 상태입니다.
작업들은 같은 대상에 대해 선택적으로 수행됩니다.

📌 예시 1

    *파일을 읽기, 쓰기, 삭제하는 모듈*은 파일이라는 데이터를 대상으로 각 작업을 독립적으로 수행합니다.
    순서나 의존성 없이 필요에 따라 선택됩니다.

📌 예시 2

    *사용자 계정을 활성화, 비활성화, 삭제하는 모듈*은 계정 데이터에 대해 서로 독립적으로 작업합니다.
    작업은 서로 영향을 주지 않으며 필요에 따라 실행됩니다.

📌 예시 3

    *주문을 취소, 수정, 재확인하는 모듈*은 주문 데이터에 대해 각 작업이 독립적입니다.
    순서 없이 원하는 작업을 선택해 수행합니다.

📌 예시 4

    *로그를 조회, 저장, 삭제하는 모듈*은 로그 데이터에 대해 각 작업을 독립적으로 선택할 수 있습니다.
    작업 순서나 의존성이 없습니다.

📌 예시 5

    *이미지를 회전, 크기 변경, 자르기하는 모듈*은 이미지 데이터에 대해 각각의 작업을 독립적으로 수행합니다.
    사용자가 선택한 작업만 실행됩니다.



🔷 절차적 응집

모듈 내부의 작업들이 데이터 흐름 없이, 특정 절차(순서)에 따라 실행되어야 하는 상태입니다.
각 작업이 서로의 결과를 이용하지는 않지만, 순서가 바뀌면 정상적으로 작동하지 않습니다.
순차적 응집보다는 낮지만 절차의 일관성을 위해 필요할 수 있습니다.

📌 예시 1

    *파일을 열고 데이터를 처리한 뒤 닫는 모듈*은 파일을 반드시 먼저 열고, 데이터를 처리한 뒤 닫아야 합니다.
    데이터는 흐르지 않지만 순서가 지켜져야 하는 절차적 응집입니다.

📌 예시 2

    *프로그램 시작 시 환경 설정을 불러오고 로그를 초기화한 뒤 화면을 출력하는 모듈*은 작업 간 데이터 의존성은 없지만 순서를 지켜야 합니다.
    환경 설정 없이 화면을 출력하면 올바르지 않기 때문에 절차적 응집입니다.

📌 예시 3

    *사용자 등록 시 단계별 입력 화면을 출력하는 모듈*은 이름 → 주소 → 연락처 순서로만 진행됩니다.
    각 화면이 서로 데이터를 주고받지는 않지만 절차가 필요합니다.

📌 예시 4

    *시스템 부팅 시 메모리 검사 후 드라이버 로딩 후 사용자 로그인 화면 출력 모듈* 역시 절차적입니다.
    순서가 어긋나면 작동하지 않습니다.

📌 예시 5

    *은행 거래 처리 시 카드 확인 → 비밀번호 확인 → 거래 실행 모듈*은 각 단계가 절차적으로 진행됩니다.
    데이터는 독립적이지만 순서가 중요합니다.



🔷 시간적 응집

모듈 내부의 작업들이 동시에 실행되거나 동일한 시점에 모여 있는 상태입니다.
작업 간 의미적 연관성은 약하지만, 특정 시점에 함께 수행됩니다.

📌 예시 1

    *프로그램 시작 시 로그 초기화, 화면 초기화, 메모리 초기화 모듈*은 모두 동시에 필요합니다.
    작업들끼리 직접 관련성은 없지만 시간적으로 함께 실행됩니다.

📌 예시 2

    *시스템 종료 시 로그 저장, 캐시 삭제, 사용자 로그아웃 처리 모듈*도 마찬가지로 시간적 응집입니다.
    작업 간 의미적 관계는 없습니다.

📌 예시 3

    *새 사용자가 로그인할 때 환경 설정 적용, 최근 작업 복원, 알림 표시 모듈*도 동시에 동작합니다.
    하나의 시점에 묶여 있습니다.

📌 예시 4

    *시스템 재부팅 시 임시 파일 삭제, 로그 기록, 네트워크 복원 모듈* 역시 시간적입니다.
    동시에 실행됩니다.

📌 예시 5

    *배터리 부족 시 알림 표시, 화면 밝기 조절, 절전 모드 설정 모듈*도 같은 시점에 발생합니다.



🔷 논리적 응집

모듈 내부의 작업들이 비슷한 범주에 속하지만, 서로 직접적인 관련성은 없고 실행 시 선택됩니다.
하나의 범주로 묶였지만 실제로는 각기 다른 작업입니다.

📌 예시 1

    *입력 장치 초기화 모듈*은 키보드, 마우스, 터치스크린을 각각 초기화하지만 동시에 하지는 않습니다.
    선택적으로 실행됩니다.

📌 예시 2

    *다양한 보고서 출력 모듈*은 매출, 재고, 사용자 활동 보고서 중 하나를 출력합니다.
    범주는 같지만 선택적입니다.

📌 예시 3

    *알림 설정 모듈*은 메일, 문자, 푸시 알림 중 사용자가 고른 것만 설정합니다.
    각 작업은 서로 독립적입니다.

📌 예시 4

    *파일 변환 모듈*은 PDF, JPG, DOCX 중 하나를 변환합니다.
    비슷한 범주에 속합니다.

📌 예시 5

    *로그인 방식 선택 모듈*은 아이디/비번, SNS, OTP 중 하나를 선택합니다.



🔷 우연적 응집

모듈 내부의 작업들이 아무 관련성 없이 우연히 하나에 모인 상태입니다.
가장 낮은 단계의 응집도로, 유지보수가 어렵고 권장되지 않습니다.

📌 예시 1

    *버튼 클릭 시 배경 변경, 로그 기록, 음악 멈춤 모듈*은 서로 아무 연관이 없습니다.

📌 예시 2

    *종료 버튼에 로그아웃, 브라우저 닫기, 화면 캡처가 섞여 있는 모듈*도 마찬가지입니다.

📌 예시 3

    *시스템 알림에 로그 기록, 배터리 측정, 화면 잠금이 함께 있는 모듈*입니다.

📌 예시 4

    *마우스 이동 시 배경색 변경, 시간 갱신, 음악 볼륨 조절이 모두 포함된 모듈*입니다.

📌 예시 5

    *로그인 시 뉴스 로딩, 친구 추천, 배경 테마 변경을 동시에 수행하는 모듈*입니다.



📊 응집도 단계 요약표

단계 정의 특징
기능적 하나의 명확한 기능만 수행 가장 이상적, 책임이 명확
순차적 앞의 결과가 뒤의 입력으로 연결 데이터 흐름이 존재
교환적 같은 데이터에 여러 작업 가능 독립적, 선택적
절차적 순서가 중요한 작업 집합 데이터 흐름 없음
시간적 같은 시점에 수행되는 작업 의미적 연관성 약함
논리적 범주가 같은 작업 선택 실제로는 독립적
우연적 관련 없는 작업 모임 가장 나쁨, 권장되지 않음


반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/10   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함
반응형