---
id: P-REINFORCE-AUTO-6D470D
category: "10_Wiki/💡 Topics/Programming & Language"
confidence_score: 0.90
tags: [auto-reinforced]
last_reinforced: 2026-04-20
github_commit: "[P-Reinforce] Continuous Worker - 응집도와 결합도"
---

# [[응집도와 결합도]]

## 📌 한 줄 통찰 (The Karpathy Summary)
> **응집도(Cohesion)**와 **결합도(Coupling)**는 소프트웨어 모듈과 컴포넌트가 얼마나 잘 설계되었는지를 평가하는 핵심적인 척도입니다 [1]. 응집도는 모듈 내부의 요소들이 하나의 명확한 목적을 위해 얼마나 밀접하게 관련되어 있는지를 나타내며, 결합도는 모듈 간의 상호 의존성 정도를 의미합니다 [2-4]. 성공적인 소프트웨어 설계와 관심사의 분리(SoC)를 효과적으로 적용하기 위해서는 **'높은 응집도'**와 **'낮은 결합도'**를 지향해야 합니다 [1, 2].

## 📖 구조화된 지식 (Synthesized Content)
**1. 응집도 (Cohesion)**
*   **개념:** 모듈이나 클래스 내의 요소들이 얼마나 밀접하게 관련되어 있는지를 보여주는 척도입니다 [3]. 응집도가 높다는 것은 해당 모듈이 단일한 기능이나 역할에 집중하고 있음을 의미합니다 [3].
*   **유형:** 응집도는 수준에 따라 **기능적 응집**(가장 이상적인 형태), 순차적 응집, 논리적 응집, 시간적 응집, 절차적 응집, 그리고 전혀 관련 없는 요소들이 모인 **우발적 응집**(가장 낮은 수준)으로 분류됩니다 [3].
*   **높은 응집도의 장점:** 모듈 내의 코드가 같은 목표를 위해 존재하므로 **가독성이 향상**되고, 특정 기능을 수정할 때 코드의 다른 부분에 영향을 주지 않아 **유지보수성과 재사용성이 증가**합니다 [5]. 또한, 명확한 책임 덕분에 **독립적인 테스트가 용이**해집니다 [5]. 

**2. 결합도 (Coupling)**
*   **개념:** 모듈 간의 의존성 정도를 나타냅니다 [4]. 결합도가 낮으면 각 모듈이 독립적으로 동작할 수 있지만, 높을 경우 한 모듈의 변경이 다른 모듈에 영향을 미치게 됩니다 [4].
*   **유형:** 결합도는 단순한 데이터 값만 전달하는 **자료 결합**(가장 낮음)부터 스탬프 결합, 제어 결합, 외부 결합, 공통 결합, 그리고 내부 내용을 직접 참조하거나 수정하는 **내용 결합**(가장 강하고 바람직하지 않음)으로 나뉩니다 [4].
*   **결합도를 낮추기 위한 전략:** 모듈 간 결합도를 줄이려면 **인터페이스 사용**, 외부에서 의존성을 주입받는 **의존성 주입(Dependency Injection)**, 간접적으로 상호작용하는 **이벤트 기반 아키텍처**, **데이터 구조의 단순화** 및 **캡슐화** 기법을 적용할 수 있습니다 [6].

**3. 설계 원칙과의 상호작용**
*   소프트웨어 개발의 근본 원칙인 **관심사의 분리(SoC)**를 적용하는 과정은 결국 **결합을 감소시키고 응집력을 증가시키는 것**을 목표로 합니다 [7, 8]. 
*   느슨한 결합과 높은 응집도를 유지하면 코드의 명확성과 재사용성이 높아지고, 여러 명의 엔지니어가 서로 방해받지 않고 작업할 수 있어 **동시(병렬) 개발의 효율성이 크게 향상**됩니다 [9-12].

## ⚠️ 모순 및 업데이트 (Contradictions & RL Update)
- **과거 데이터와의 충돌:** 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
- **정책 변화:** Programming & Language 분야의 자동 자산화 수행.

## 🔗 지식 연결 (Graph)
- **Related Topics:** [[관심사의 분리(Separation of Concerns)]], [[단일 책임 원칙(SRP)]], 의존성 주입(Dependency Injection), 객체 지향 설계
- **Projects/Contexts:** 모듈화 및 컴포넌트 기반 소프트웨어 개발, 마이크로서비스 아키텍처(MSA)
- **Contradictions/Notes:** 높은 응집도와 낮은 결합도를 달성하기 위해 관심사를 분리하는 것은 유지보수성을 높이는 훌륭한 접근이지만, 지나치게 세분화된 관심사 분리(미세한 결합도 낮추기 시도)는 종종 불필요한 계층과 함수 호출, 복잡성을 증가시켜 성능 저하나 인지적 오버헤드를 유발할 수 있으므로 상황에 맞는 적절한 균형이 필요합니다 [13-15].

---
*Last updated: 2026-04-18*

---
