|
| 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 | + |
| 67 | + |
| 68 | +결합도는 **의존성 강도**에 따라 여섯 단계로 나뉘며, 아래로 갈수록 결합도가 낮아져 더 바람직한 설계로 간주됩니다. |
| 69 | + |
| 70 | +## 3. 응집도(Cohesion) |
| 71 | +--- |
| 72 | +**응집도**란, 하나의 모듈 내부에 포함된 기능들이 서로 **얼마나 밀접하게 관련되어 있는지**를 나타냅니다. |
| 73 | +* **높은 응집도 →** 모듈이 하나의 명확한 책임 또는 역할에 집중함 |
| 74 | +* **낮은 응집도 →** 모듈이 서로 관련 없는 여러 기능을 함께 처리함 |
| 75 | + |
| 76 | +즉, **응집도가 높을수록 모듈의 독립성이 잘 유지**됩니다. |
| 77 | + |
| 78 | + |
| 79 | + |
| 80 | +응집도는 **모듈 내부 기능 간의 관련성 정도**에 따라 일곱 단계로 나뉘며, 위로 갈수록 응집도가 높아져 더 바람직한 설계로 간주됩니다. |
| 81 | + |
| 82 | +## 마무리 |
| 83 | +--- |
| 84 | +모듈화는 단순히 시스템을 나누는 것 이상의 의미를 갖습니다. |
| 85 | +**낮은 결합도**와 **높은 응집도**를 유지하며 모듈을 설계할 때, 비로소 모듈화의 진정한 효과를 얻을 수 있습니다. |
| 86 | + |
| 87 | +이러한 기준은 소프트웨어의 유지보수성, 확장성, 테스트 용이성 등 품질에 직결되며, 실무에서도 좋은 설계와 나쁜 설계를 구분 짓는 중요한 지표로 작용합니다. |
| 88 | + |
| 89 | +결합도와 응집도를 이해하고, 이를 기반으로 모듈을 구성하는 습관은 앞으로의 개발 과정에서 더 견고하고 유연한 시스템을 만드는 데 큰 도움이 될 것입니다. |
| 90 | + |
| 91 | +감사합니다. |
0 commit comments