Skip to content

Commit e49aad0

Browse files
committed
Add coupling and cohesion posting
1 parent df4e7ea commit e49aad0

File tree

4 files changed

+91
-0
lines changed

4 files changed

+91
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
---
2+
title: "모듈의 결합도(Coupling)와 응집도(Cohesion)"
3+
date: 2025-07-21 11:09:00 +09:00
4+
last_modified_at: 2025-07-21 11:09:00 +09:00
5+
categories: [Computer Science, Software Engineering]
6+
tags:
7+
[
8+
컴퓨터공학,
9+
컴퓨터과학,
10+
소프트웨어공학,
11+
모듈,
12+
모듈화,
13+
모듈의 독립성,
14+
결합도,
15+
응집도,
16+
Computer Engineering,
17+
Computer Science,
18+
Software Engineering,
19+
Module,
20+
Modularization,
21+
Coupling,
22+
Cohesion,
23+
]
24+
image: "/assets/img/title/coupling_and_cohesion.png"
25+
---
26+
27+
프로그램이 커지고 복잡해질수록 유지보수, 확장성, 협업 효율성이 더욱 중요해집니다.
28+
이를 위해 소프트웨어는 기능 단위로 나누어 설계되며, 코드의 관리성과 재사용성을 높이게 됩니다.
29+
30+
이처럼 시스템을 잘게 나누어 개발하는 과정을 **모듈화(Modularization)**라고 하며, 좋은 모듈 구조를 설계하기 위해 꼭 알아야 할 두 가지 핵심 개념이 바로 **결합도(Coupling)****응집도(Cohesion)**입니다.
31+
32+
이번 포스팅에서는 모듈화의 개념부터 결합도와 응집도의 의미까지 단계적으로 정리해보겠습니다.
33+
34+
## 1. 모듈화(Modularization)
35+
---
36+
**모듈(Module)**은 프로그램을 구성하는 **작은 단위**로, **하나의 기능이나 역할을 담당하는 코드 집합**입니다.
37+
크게는 클래스, 함수, 패키지, 또는 서비스 단위까지 모두 모듈로 볼 수 있습니다.
38+
39+
이러한 모듈 단위로 시스템을 나누는 방식은, 프로그램을 **효율적으로 관리**하고 **복잡도를 낮추기 위한 핵심 전략**입니다.
40+
즉, 전체 시스템을 **여러 개의 독립적인 기능 단위로 나누어 구조화**하는 과정을 **모듈화(Modularization)**라고 합니다.
41+
42+
잘 모듈화된 시스템은 아래와 같은 장점을 가집니다.
43+
* **유지보수**가 쉽다.
44+
* **코드 재사용성**이 높다.
45+
* 코드의 **가독성****이해도**가 향상된다.
46+
* 시스템 **확장****변경**에 유연하다.
47+
* 역할 분담이 쉽고, **생산성**이 높다.
48+
* **테스트가 수월**하여, **시스템 안정성**이 높다.
49+
50+
하지만, **모듈화를 했다고 해서 항상 좋은 설계가 되는 것은 아닙니다.**
51+
모듈 간의 관계가 복잡하거나, 하나의 모듈이 여러 책임을 떠안고 있다면, 오히려 유지보수가 더 어려워질 수 있습니다.
52+
53+
따라서, 각 모듈이 **불필요한 의존 없이 독립적으로 기능을 수행할 수 있도록 설계**하는 것이 중요합니다.
54+
이를 **모듈의 독립성**이라고 하며, 독립성이 높은 시스템일수록 기능 확장과 변경에 유연하고, 코드 재사용과 유지보수가 용이합니다.
55+
56+
이때, 모듈의 독립성을 평가하고 유지하기 위해 사용되는 핵심 지표가 **결합도(Coupling)****응집도(Cohesion)**입니다.
57+
58+
## 2. 결합도(Coupling)
59+
---
60+
**결합도**란, 하나의 모듈이 다른 모듈에 **얼마나 강하게 의존하고 있는지**를 나타냅니다.
61+
* **높은 결합도 →** 하나의 모듈을 수정하면, 다른 모듈까지 줄줄이 영향을 받음
62+
* **낮은 결합도 →** 모듈 간 연결이 느슨하여, 하나를 바꿔도 다른 모듈에 영향이 적음
63+
64+
즉, **결합도가 낮을수록 모듈의 독립성이 잘 유지**됩니다.
65+
66+
![coupling_table](/assets/img/posts/computer_science/software_engineering/coupling_table.png)
67+
68+
결합도는 **의존성 강도**에 따라 여섯 단계로 나뉘며, 아래로 갈수록 결합도가 낮아져 더 바람직한 설계로 간주됩니다.
69+
70+
## 3. 응집도(Cohesion)
71+
---
72+
**응집도**란, 하나의 모듈 내부에 포함된 기능들이 서로 **얼마나 밀접하게 관련되어 있는지**를 나타냅니다.
73+
* **높은 응집도 →** 모듈이 하나의 명확한 책임 또는 역할에 집중함
74+
* **낮은 응집도 →** 모듈이 서로 관련 없는 여러 기능을 함께 처리함
75+
76+
즉, **응집도가 높을수록 모듈의 독립성이 잘 유지**됩니다.
77+
78+
![cohesion_table](/assets/img/posts/computer_science/software_engineering/cohesion_table.png)
79+
80+
응집도는 **모듈 내부 기능 간의 관련성 정도**에 따라 일곱 단계로 나뉘며, 위로 갈수록 응집도가 높아져 더 바람직한 설계로 간주됩니다.
81+
82+
## 마무리
83+
---
84+
모듈화는 단순히 시스템을 나누는 것 이상의 의미를 갖습니다.
85+
**낮은 결합도****높은 응집도**를 유지하며 모듈을 설계할 때, 비로소 모듈화의 진정한 효과를 얻을 수 있습니다.
86+
87+
이러한 기준은 소프트웨어의 유지보수성, 확장성, 테스트 용이성 등 품질에 직결되며, 실무에서도 좋은 설계와 나쁜 설계를 구분 짓는 중요한 지표로 작용합니다.
88+
89+
결합도와 응집도를 이해하고, 이를 기반으로 모듈을 구성하는 습관은 앞으로의 개발 과정에서 더 견고하고 유연한 시스템을 만드는 데 큰 도움이 될 것입니다.
90+
91+
감사합니다.
Loading
Loading
48.2 KB
Loading

0 commit comments

Comments
 (0)