Akashic Records

소프트웨어 모듈 결합도와 응집도 본문

Software Engineering

소프트웨어 모듈 결합도와 응집도

Andrew's Akashic Records 2023. 10. 20. 10:55
728x90

결합도와 응집도는 소프트웨어 설계의 핵심 원칙으로, 소프트웨어의 품질, 유지 보수성, 확장성 및 재사용성에 중요한 영향을 미칩니다. 이 두 가지 요소가 올바르게 관리되면 소프트웨어 시스템은 더 효율적이고 신뢰성 있게 작동할 수 있습니다.

  1. 결합도의 영향:
    • 낮은 결합도: 낮은 결합도를 가진 모듈은 다른 모듈과의 상호 의존성이 낮기 때문에 독립적으로 개발, 테스트 및 유지 보수할 수 있습니다. 이는 소프트웨어 시스템을 변경하기 쉽게 만들어 새로운 요구 사항을 쉽게 수용할 수 있게 합니다.
    • 높은 결합도: 높은 결합도는 모듈 간의 강한 의존성을 나타내며, 하나의 모듈을 변경할 때 다른 모듈에도 영향을 미칩니다. 이로 인해 버그를 수정하거나 새로운 기능을 추가하는 것이 어렵고 위험해집니다.
  2. 응집도의 영향:
    • 높은 응집도: 높은 응집도를 가진 모듈은 모듈 내의 요소들이 관련성이 높게 묶여 있어 모듈의 목적을 명확하게 수행합니다. 이로 인해 모듈의 동작을 이해하기 쉽고 유지 보수가 용이합니다.
    • 낮은 응집도: 낮은 응집도는 모듈 내의 요소들이 서로 관련성이 적거나 없어서 모듈의 목적을 혼란스럽게 만듭니다. 이로 인해 코드의 가독성과 유지 보수성이 감소하며, 버그를 찾거나 수정하기 어려워집니다.

결합도와 응집도가 올바르게 관리되면 다음과 같은 이점을 얻을 수 있습니다:

  • 유지 보수성 향상: 낮은 결합도와 높은 응집도를 가진 모듈은 변경할 때 예기치 않은 부작용을 최소화하므로 유지 보수가 훨씬 용이해집니다.
  • 확장성 강화: 모듈을 쉽게 확장하거나 대체할 수 있으므로 새로운 요구 사항을 수용하기 쉽습니다.
  • 재사용성 향상: 모듈이 독립적으로 재사용 가능하므로 다른 프로젝트나 시스템에서 모듈을 다시 사용할 수 있습니다.
  • 시험 및 디버깅 용이성: 모듈 간의 강한 의존성을 최소화하고 목적을 분명하게 정의하면 코드 테스트 및 디버깅이 훨씬 효율적으로 수행됩니다.

결국, 결합도와 응집도를 고려하여 소프트웨어 설계를 수행하면 더 효율적이고 관리가 용이한 소프트웨어 시스템을 개발할 수 있습니다.

 

결합도 수준

결합도(커플링)는 소프트웨어 모듈 간의 상호 의존성 정도를 나타내는 것으로, 다양한 수준이 있으며 결합도가 높을수록 모듈 간의 의존성이 더 강하고 변경이 어려워지며, 결합도가 낮을수록 모듈 간의 의존성이 약해져 유지보수와 재사용성이 향상됩니다. 아래에 결합도의 다양한 수준을 설명하겠습니다:

  1. 느슨한 결합도 (Low Coupling): 느슨한 결합도는 모듈 간의 의존성이 최소화되고, 각 모듈이 독립적으로 동작할 수 있는 상태를 나타냅니다. 이는 변경을 쉽게 수용하고 모듈을 다른 프로젝트나 시스템에서 재사용하기에 이상적입니다.
  2. 무엇을 사용하는지 아는 결합도 (Knows What): 이 수준에서는 모듈이 다른 모듈의 인터페이스나 데이터 구조를 알고 있지만, 다른 모듈의 내부 동작은 알지 못합니다. 이것은 인터페이스를 통한 상호작용을 의미합니다.
  3. 외부 제어 결합도 (Control): 모듈 A가 다른 모듈 B의 제어 흐름을 조정할 때 발생합니다. 모듈 A는 모듈 B의 동작을 제어하기 위해 데이터나 함수 호출을 사용합니다.
  4. 데이터 결합도 (Data): 모듈 간의 데이터를 공유하는 정도를 나타내며, 데이터 구조의 변경에 민감한 경우가 있습니다.
  5. 스탬프 결합도 (Stamp): 하나의 데이터 구조가 여러 모듈에 전달되는 경우로, 데이터 구조의 변경이 여러 모듈을 영향을 미치게 됩니다.
  6. 내용 결합도 (Content): 모듈이 다른 모듈의 내부 구현 세부사항을 알고 있으며, 한 모듈이 다른 모듈의 코드나 데이터를 직접 수정하는 경우입니다. 이것은 결합도의 최악의 형태로 간편성, 유지보수성, 재사용성을 크게 저하시킵니다.

좋은 소프트웨어 설계는 높은 응집도와 낮은 결합도를 갖는 모듈을 가질 때 실현됩니다. 이것은 모듈이 하나의 명확한 역할을 수행하며, 다른 모듈과 최소한의 상호 의존성을 가지고 있을 때 가능합니다. 이렇게 설계된 소프트웨어 시스템은 유지 보수가 용이하고 오류를 수정하기 쉬우며, 새로운 기능을 추가하거나 모듈을 다른 프로젝트에서 재사용하기에도 효과적입니다.

 

응집도 수준

응집도(Cohesion)는 모듈 내부의 요소들이 얼마나 관련성 있게 묶여 있는지를 나타내는 개념이며, 모듈 내부의 요소들이 하나의 목적을 달성하기 위해 얼마나 강하게 관련되어 있는지를 측정합니다. 높은 응집도는 모듈이 명확하고 일관된 목적을 가지고 있음을 나타내며, 코드의 가독성, 유지 보수성, 재사용성을 향상시킵니다. 다양한 응집도 수준이 있으며, 이들을 다음과 같이 나눌 수 있습니다:

  1. 기능 응집도 (Functional Cohesion): 가장 높은 응집도 수준 중 하나로, 모듈 내의 모든 요소가 특정 기능이나 작업을 수행하기 위해 관련되어 있습니다. 모듈은 특정 작업을 수행하는 것에 중점을 두며, 다른 목적을 위한 코드는 포함하지 않습니다.
  2. 순차 응집도 (Sequential Cohesion): 모듈 내의 요소가 일련의 연속적인 작업을 수행하도록 관련되어 있는 경우입니다. 각 작업은 이전 작업의 결과를 필요로 하며, 모듈 내의 요소는 순차적으로 실행됩니다.
  3. 통신 응집도 (Communicational Cohesion): 모듈 내의 요소가 특정 데이터를 공유하거나 처리하는데 관련되어 있습니다. 모듈은 데이터 처리 또는 특정 데이터 유형에 관한 작업을 수행하기 위해 설계됩니다.
  4. 시간 응집도 (Temporal Cohesion): 모듈 내의 요소가 특정 시간에 실행되어야 하는 작업과 관련이 있습니다. 모듈은 특정 시간 또는 조건에서만 활성화되며, 해당 시간 또는 조건에 맞게 작업을 수행합니다.
  5. 절차 응집도 (Procedural Cohesion): 모듈 내의 요소가 특정 절차를 따르기 위해 연결되어 있습니다. 이는 일반적으로 순차적인 절차나 단계를 수행하는 모듈을 나타냅니다.
  6. 무응집 (Coincidental Cohesion): 모듈 내의 요소들이 서로 무관하게 묶여 있고, 어떤 특정 목적을 가지고 있지 않습니다. 이것은 좋지 않은 응집도 수준이며, 코드의 가독성과 유지 보수성을 저하시킵니다.

좋은 소프트웨어 설계는 모듈이 높은 응집도를 가지고 있으며, 해당 모듈의 기능과 목적이 명확하게 정의되어 있는 경우에 실현됩니다. 이로 인해 코드가 이해하기 쉬워지며, 모듈의 동작이 예측 가능하며 재사용이 쉬워집니다.

728x90
Comments