응집도와 결합도

지송·2025년 6월 25일

프로그래밍

목록 보기
4/4

안녕하세요! 이번에는 응집도와 결합도를 정리해 보려고 합니다.
최근 이것에 관한 질문을 받았는데,
머리로는 이해하지만 말로 설명하려고 하니
"응집은 응집이고... 결합은 결합이지...?"
이런 말만 나오게 되는 겁니다... 🥲
아무래도 설명할 수 있어야 제가 인지하고 있는 개념이겠죠!

제대로 설명할 수 있게 정리해 보겠습니다. 👍

응집도(Cohesion)와 결합도(Coupling)의 개념과 차이점

소프트웨어 설계에서 좋은 구조를 판단하는 기준 중 가장 핵심적인 두 가지는 응집도(cohesion)결합도(coupling)입니다.
이 두 개념을 이해하면 유지보수성과 확장성이 뛰어난 코드를 설계할 수 있습니다.


✨ 응집도(Cohesion)란?

모듈(클래스, 함수 등) 내부 요소들이 얼마나 밀접하게 관련되어 있는지를 나타내는 정도

✅ 응집도의 특징

  • 하나의 모듈이 하나의 책임을 수행할수록 응집도가 높다.
  • 응집도가 높을수록 모듈의 재사용성과 유지보수성이 좋아진다.

📈 응집도 수준 (낮음 → 높음)

  1. Coincidental Cohesion (우연적 응집)
  2. Logical Cohesion (논리적 응집)
  3. Temporal Cohesion (시간적 응집)
  4. Procedural Cohesion (절차적 응집)
  5. Communicational Cohesion (통신적 응집)
  6. Sequential Cohesion (순차적 응집)
  7. Functional Cohesion (기능적 응집) ✅ 최고 수준

💡 예시 (좋은 응집도)

public class OrderService {
    public void createOrder() { ... }
    public void cancelOrder() { ... }
    public void getOrderById() { ... }
}

OrderService가 오직 주문과 관련된 책임만을 가질 때 높은 응집도를 가진다.


🧷 결합도(Coupling)란?

모듈 간의 의존성 정도, 즉 다른 모듈에 얼마나 영향을 받는지를 나타내는 척도

❌ 결합도가 높으면?

  • 한 모듈의 변경이 다른 모듈에 영향을 미친다.
  • 유연성과 확장성이 떨어진다.

✅ 결합도가 낮으면?

  • 각 모듈이 독립적이다.
  • 변경에 강하고 테스트가 용이하다.

📉 결합도 수준 (높음 → 낮음)

  1. Content Coupling (내용 결합) ❌
  2. Common Coupling (공통 결합)
  3. External Coupling (외부 결합)
  4. Control Coupling (제어 결합)
  5. Stamp Coupling (스탬프 결합)
  6. Data Coupling (데이터 결합) ✅ 가장 바람직
  7. No Coupling (무결합)

💡 예시 (나쁜 결합도)

public class A {
    public B b;
    public void doSomething() {
        b.internalState = 10; // B의 내부 상태 직접 조작 (내용 결합)
    }
}

B의 내부 구현에 직접 접근하면 결합도가 매우 높아진다.


✅ 정리

항목응집도 (Cohesion)결합도 (Coupling)
정의모듈 내부의 응집력모듈 간의 의존성
이상적인 상태높을수록 좋음낮을수록 좋음
목적하나의 책임 집중독립성 유지

🎯 좋은 설계란?

  • 높은 응집도 + 낮은 결합도를 달성하는 구조
  • SOLID 원칙, OOP, 클린 코드 등의 설계 원칙도 이 방향을 추구

🔚 마무리

응집도와 결합도는 단순히 개념을 외우는 것이 아니라, 실제 설계와 리팩토링 과정에서 반복적으로 고민하고 적용해볼 때 진정한 의미를 체감할 수 있습니다.

"응집도는 안에서, 결합도는 밖에서."

생각

서두에서

"응집은 응집이고... 결합은 결합이지...?"

라고 대답했던 과거를 벗어나서 이제 누군가가 물어보면 이렇게 답할 예정이에요!

응집도는 객체들이 얼마나 관련이 되어 있는지이다
결합도는 객체들이 얼마나 서로 영향을 받는지이다
응집도는 높게 구성하고, 결합도는 낮게 구성하는 것이 유지보수나 코드 품질에서 좋은 방향이다

profile
💻 늘 공부하고 발전하는 개발자

0개의 댓글