문제
소프트웨어 설계에서 모듈 간 결합도와 모듈 내 응집도가 **소프트웨어 복잡도(Software Complexity)**와 **변경 파급효과(Change Propagation)**에 미치는 영향을 분석하고, 복잡도 최소화와 변경 영향 최소화를 위한 모듈 설계 전략을 서술하시오.
정답
높은 결합도는 모듈 간 의존성을 증가시켜 순환 복잡도(Cyclomatic Complexity)를 높이고 변경 시 연쇄 반응을 유발한다. 낮은 응집도는 모듈 내 산재된 기능으로 인해 인지적 복잡도를 증가시킨다. 복잡도 최소화를 위해서는 인터페이스 기반 느슨한 결합과 단일 책임 원칙 기반 높은 응집도를 추구해야 한다. 변경 파급효과 최소화를 위해서는 추상화 계층 도입, 의존성 주입 패턴 적용, 모듈 간 계약 기반 통신을 통해 변경 지점을 격리하고 안정적 인터페이스를 유지해야 한다.
해설
소프트웨어 복잡도는 순환 복잡도(제어 흐름의 복잡성)와 인지적 복잡도(이해의 어려움)로 구분된다. 높은 결합도는 모듈 간 제어 흐름을 복잡하게 만들어 순환 복잡도를 증가시키고, 하나의 변경이 다른 모듈들의 연쇄적 변경을 유발한다. 낮은 응집도는 관련 없는 기능들이 한 모듈에 섞여 있어 개발자의 인지 부담을 증가시킨다. 이를 해결하기 위해서는 인터페이스를 통한 추상화로 모듈 간 직접 의존을 차단하고, 단일 책임 원칙으로 모듈의 기능을 명확히 분리해야 한다. 또한 의존성 주입 패턴과 계약 기반 통신으로 변경 지점을 특정 모듈에 국한시켜 파급효과를 최소화할 수 있다.