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

소프트웨어 설계에서 좋은 구조를 판단하는 기준 중 가장 핵심적인 두 가지는 응집도(cohesion)와 결합도(coupling)입니다.
이 두 개념을 이해하면 유지보수성과 확장성이 뛰어난 코드를 설계할 수 있습니다.
모듈(클래스, 함수 등) 내부 요소들이 얼마나 밀접하게 관련되어 있는지를 나타내는 정도
public class OrderService {
public void createOrder() { ... }
public void cancelOrder() { ... }
public void getOrderById() { ... }
}
OrderService가 오직 주문과 관련된 책임만을 가질 때 높은 응집도를 가진다.
모듈 간의 의존성 정도, 즉 다른 모듈에 얼마나 영향을 받는지를 나타내는 척도
public class A {
public B b;
public void doSomething() {
b.internalState = 10; // B의 내부 상태 직접 조작 (내용 결합)
}
}
B의 내부 구현에 직접 접근하면 결합도가 매우 높아진다.
| 항목 | 응집도 (Cohesion) | 결합도 (Coupling) |
|---|---|---|
| 정의 | 모듈 내부의 응집력 | 모듈 간의 의존성 |
| 이상적인 상태 | 높을수록 좋음 | 낮을수록 좋음 |
| 목적 | 하나의 책임 집중 | 독립성 유지 |
응집도와 결합도는 단순히 개념을 외우는 것이 아니라, 실제 설계와 리팩토링 과정에서 반복적으로 고민하고 적용해볼 때 진정한 의미를 체감할 수 있습니다.
"응집도는 안에서, 결합도는 밖에서."
서두에서
"응집은 응집이고... 결합은 결합이지...?"
라고 대답했던 과거를 벗어나서 이제 누군가가 물어보면 이렇게 답할 예정이에요!
응집도는 객체들이 얼마나 관련이 되어 있는지이다
결합도는 객체들이 얼마나 서로 영향을 받는지이다
응집도는 높게 구성하고, 결합도는 낮게 구성하는 것이 유지보수나 코드 품질에서 좋은 방향이다