핵심 짚어보기
먼저 '모듈과 모듈 사이'인지 '한 모듈 안'인지부터 봅니다
문제 지문에 'A 모듈이 B 모듈을 호출할 때 무엇을 전달한다'거나 '전역 변수를 함께 참조한다'처럼 두 모듈 사이의 연결 방식이 나오면 결합도(Coupling)를 묻는 것입니다. 결합도는 낮을수록 한 모듈을 고쳤을 때 다른 모듈로 파급되는 영향이 적습니다.
반대로 '한 모듈 안에 들어 있는 기능들이 어떤 관련성으로 묶여 있는가'를 설명하면 응집도(Cohesion)를 묻는 것입니다. 응집도는 높을수록 모듈이 단일한 책임에 집중하여 재사용과 유지보수가 쉬워집니다.
결합도 6단계: 단순 값(자료) → 구조체(스탬프) → 제어 신호(제어) → 전역(공통) → 내부 참조(내용)
결합도가 가장 낮아 바람직한 것은 필요한 단순 데이터 값만 인수로 주고받는 자료 결합도(Data)입니다. 만약 단일 값 대신 배열이나 객체, 구조체(레코드) 전체를 인수로 넘기면 스탬프 결합도(Stamp)가 됩니다.
한 모듈이 다른 모듈의 내부 처리 흐름(if/switch 분기)을 지시하는 제어 플래그(Flag)를 넘기면 제어 결합도(Control), 외부 환경·프로토콜을 공유하면 외부 결합도(External), 전역 변수(Global Variable)를 여러 모듈이 함께 쓰면 공통 결합도(Common), 다른 모듈의 내부 변수나 코드로 직접 분기해 들어가면 가장 나쁜 내용 결합도(Content)가 됩니다.
응집도 7단계: 단일 기능(기능적)부터 무관한 묶음(우연적)까지
가장 높은 기능적 응집도(Functional)는 모듈 내부의 모든 요소가 단 하나의 명확한 기능을 수행하는 데 기여하는 상태입니다. 앞 작업의 출력 데이터가 곧바로 다음 작업의 입력으로 쓰이면 순차적 응집도(Sequential)이고, 같은 입력이나 출력을 공유하며 서로 다른 기능을 수행하면 교환적(통신적) 응집도(Communication)입니다.
데이터 공유 없이 정해진 실행 순서만 따르는 절차적(Procedural), '초기화 모듈'처럼 특정 시점에 함께 실행된다는 이유로만 묶인 시간적(Temporal), 비슷한 성격(모든 입력 처리 등)으로 묶인 논리적(Logical), 아무 관련 없는 기능을 모아 둔 우연적 응집도(Coincidental)로 갈수록 품질이 낮아집니다.
객체지향 SOLID 원칙과의 연결: SRP와 DIP
객체지향 설계 5원칙(SOLID) 중 단일 책임 원칙(SRP, Single Responsibility Principle)은 '하나의 클래스는 변경해야 할 이유가 하나뿐이어야 한다'는 원칙으로, 응집도를 높이는 원리와 직결됩니다.
개방-폐쇄 원칙(OCP)은 확장에는 열려 있고 기존 코드 수정에는 닫혀 있어야 한다는 원칙이며, 의존 역전 원칙(DIP)은 구체 클래스가 아니라 인터페이스·추상 클래스에 의존하게 하여 모듈 간 결합도를 낮추는 핵심 원리입니다.
한눈에 정리
결합도 6단계(낮음→높음)와 응집도 7단계(높음→낮음) 핵심 판별 단서
| 구분 | 품질 좋은 순서 → 나쁜 순서 | 지문 속 결정적 단서 |
|---|---|---|
| 결합도 (낮을수록 좋음) | 자료 → 스탬프 → 제어 → 외부 → 공통 → 내용 | 단순 값(자료) / 배열·구조체(스탬프) / 분기 플래그(제어) / 전역변수(공통) / 타 모듈 내부 직접 참조(내용) |
| 응집도 (높을수록 좋음) | 기능적 → 순차적 → 교환적 → 절차적 → 시간적 → 논리적 → 우연적 | 단일 목적(기능) / 출력이 다음 입력(순차) / 동일 입출력 사용(교환) / 특정 시점 초기화(시간) / 무관한 작업(우연) |
| SOLID 원칙 | SRP · OCP · LSP · ISP · DIP | 책임 1개(SRP) / 수정 없이 확장(OCP) / 부모 자리에 자식 치환(LSP) / 추상에 의존(DIP) |
직접 풀어보기
예제로 확인하기
01매개변수 형태로 결합도 단계 판별하기
사원 급여를 계산할 때 A 방식은 calcTax(int salary)처럼 급여 정수값만 전달하고, B 방식은 calcTax(EmployeeRecord emp)처럼 사원 구조체 전체를 전달하며, C 방식은 calcTax(int salary, boolean isManagerMode)처럼 내부 분기를 지시하는 플래그를 전달합니다.
A, B, C는 각각 어떤 결합도에 해당하나요?
정답과 풀이 근거
단순 데이터 값만 전달하면 자료 결합도, 구조체·배열 등 자료구조를 전달하면 스탬프 결합도, 피호출 모듈의 처리 로직을 제어하는 플래그를 전달하면 제어 결합도입니다.
02순차적 응집도와 교환적 응집도 구별하기
모듈 X는 파일에서 읽은 원본 문자열을 파싱한 뒤 그 결과를 곧바로 다음 함수의 입력으로 넘겨 합계를 구합니다. 모듈 Y는 동일한 학번 입력값을 받아 성적 조회와 장학금 이력 출력을 각각 수행합니다.
모듈 X와 모듈 Y의 응집도는 각각 무엇인가요?
정답과 풀이 근거
한 활동의 출력이 다음 활동의 입력으로 이어지면 순차적 응집도이고, 동일한 입력·출력 데이터를 사용해 서로 다른 기능을 수행하면 교환적 응집도입니다.
마지막 점검
스스로 확인하기
답을 떠올린 뒤 해설을 펼쳐 보세요.
1여러 모듈이 함수 인수를 거치지 않고 동일한 전역 변수(Global Variable) 영역을 직접 참조하고 수정할 때 나타나는 결합도는?
전역 데이터 영역을 공유하면 한 모듈의 변경이 모든 참조 모듈에 영향을 주므로 결합도가 매우 높습니다.
2모듈 내부의 요소들이 아무런 연관 없이 우연히 한 파일에 묶여 있는 가장 낮은 수준의 응집도는?
응집도 7단계 중 가장 낮은 단계입니다.
3SOLID 원칙 중 하위(자식) 클래스는 언제나 자신의 상위(부모) 클래스 자리에 교체되어 들어가도 프로그램의 동작이 깨지지 않아야 한다는 원칙은?
상속 관계에서 자식 클래스가 부모 클래스의 규약을 지켜야 한다는 원칙입니다.
4상위 모듈이 하위 구체 모듈에 직접 의존하지 않고 둘 다 추상 인터페이스에 의존해야 한다는 SOLID 원칙은?
구현체가 아닌 추상화에 의존함으로써 모듈 간 결합도를 낮춥니다.
읽기에서 연습으로
이어서 연습하기
결합도·응집도 카드 10장
개념 설명 → 핵심 용어. 본문과 연결된 10개 문항을 순서대로 확인합니다. 카드의 알아요·몰라요는 자기평가이며 같은 뜻의 다른 답도 해설과 비교해 주세요.
결합도·응집도 카드 10장 시작아래는 전체 세트의 첫 10개를 여는 넓은 범위 복습입니다. 위의 선별 연습과 시작 문항이 다를 수 있습니다.
정보처리기사 필기 핵심 객관식 — 설계·DB·테스트·보안
50문항 · 객관식 문제 → 정답·해설 확인