정보처리기사/프로그래밍 언어 활용

모듈의 독립성: 응집도는 높이고, 결합도는 낮추기

glorypang 2025. 10. 8. 16:20
728x90
반응형
SMALL

소프트웨어 품질의 핵심은 모듈의 독립성입니다.

  • 응집도(cohesion): 모듈 내부 요소들이 하나의 목적을 위해 얼마나 밀접하게 관련되어 있는가
  • 결합도(coupling): 모듈 간이 얼마나 강하게 서로 의존하는가

원칙은 단순합니다. 응집도는 높게, 결합도는 낮게.


결합도(Coupling): 모듈 “사이”의 의존성 줄이기

결합도는 “모듈 간 데이터/제어/구현을 얼마나 노출하고 공유하느냐”에 따라 단계가 나뉩니다.
아래로 갈수록 나쁜(강한) 결합입니다.

  1. 데이터 결합(Data coupling) — 좋음(낮음)
    • 만 주고받습니다. (예: add(10, 5))
    • 모듈 간 인터페이스가 스칼라·단순 값 위주라면 유지보수가 쉽습니다.
    int add(int x, int y);  // 값 전달만
    
  2. 스탬프 결합(Stamp coupling)
    • 배열/구조체/객체자료구조 통째로 전달합니다. (예: add(Point p))
    • 받는 쪽이 구조 내부에 불필요하게 의존하기 쉬워 스펙 변경에 취약합니다.
    typedef struct { int x; int y; } Point;
    int addPoint(Point p);  // 자료구조 전체 전달
    
  3. 제어 결합(Control coupling)
    • 제어 플래그/분기 조건을 전달하여 내부 로직 흐름을 밖에서 결정합니다.
    • 호출자가 피호출자의 분기 내부까지 사실상 알고 있다는 뜻.
    // mode 값(제어 요소)에 따라 내부 로직 변경
    void process(int data, int mode /* 0=fast, 1=safe ... */);
    
  4. 외부 결합(External coupling)
    • 외부에 선언된 자원/환경(파일 포맷, 통신 프로토콜 상수 등)에 여러 모듈이 함께 의존합니다.
    • 외부 스펙이 바뀌면 모듈들이 동시에 영향을 받습니다.
  5. 공통(공유) 결합(Common coupling)
    • 전역 변수 같은 공용 저장소를 여러 모듈이 함께 읽고/수정합니다.
    • 변경 파급 범위가 넓고, 테스트가 어려워집니다.
    int g_count;  // 공용 전역 상태에 의존
    
  6. 내용 결합(Content coupling) — 최악
    • 다른 모듈의 내부 변수/내부 함수를 직접 접근하거나 가정합니다.
    • 모듈 경계가 사실상 붕괴된 상태로, 유지보수 악몽.
    // 다른 모듈 내부 배열의 인덱스를 직접 건드리는 식의 침범
    extern int _internal_buf[];  // (안 됨) 내용에 직접 접근
    

응집도(Cohesion): 모듈 “안”의 응집력 끌어올리기

응집도는 모듈 내부 기능들이 하나의 목적을 향해 얼마나 밀접히 연결돼 있는지를 말합니다.
아래로 갈수록 좋은(높은) 응집입니다.

  1. 우연적 응집(Coincidental) — 최악
    • 관련성 낮은 코드가 우연히 한 파일/함수에 묶임. “잡탕 모듈”.
  2. 논리적 응집(Logical)
    • 비슷한 범주의 일을 조건으로 골라 수행. (예: process(kind))
    • 내부에 분기가 많아지고, 테스트가 복잡해집니다.
  3. 시간적 응집(Temporal)
    • 같은 시점에 실행된다는 이유로 묶음. (예: 시작 시 초기화 묶음)
    • 기능 목적이 달라도 “동시에 한다”는 이유로만 함께 있음.
  4. 절차적 응집(Procedural)
    • 모듈 안의 구성 요소들이 기능을 순차적으로 수행하는 경우
    • 결과물의 단일 목적성은 약합니다.
  5. 통신적 응집(Communicational)
    • 같은 데이터를 사용/생성한다는 이유로 묶음. 데이터 흐름 중심.
  6. 순차적 응집(Sequential)
    • 모듈 내에서 한 활동으로부터 나온 출력값을 다른 활동이 사용흐름이 단일 목적을 향해 정돈됩니다.
  7. 기능적 응집(Functional) — 최상
    • 모듈 전체가 하나의 명확한 기능을 수행. 입력→처리→출력이 단일 목적으로 이어짐.

 

728x90
반응형
LIST