개발 TIL

24.08.08 day42 결합도와 응집도, 디지털 트윈

문미새 2024. 8. 8. 20:43
728x90

결합도(Coupling) 와 응집도(Cohesion)

결합도(Coupling)와 응집도(Cohesion)는 소프트웨어 설계의 품질을 평가하는 중요한 개념이다.

이 두 개념은 모듈 간의 관계와 모듈 내부의 요소들이 얼마나 잘 통합되어 있는지를 나타내며, 소프트웨어의 유지보수성, 재사용성, 확장성에 큰 영향을 미칠 수 있기 때문에 매우 중요하다.

결합도(Coupling)

결합도는 한 모듈이 다른 모듈과 얼마나 밀접하게 연결되어 있는지를 나타내며, 모듈 간의 의존성이 높을수록 결합도가 높고, 의존성이 낮을수록 결합도가 낮다.

  • 낮은 결합도(Low Coupling)
    • 모듈 간의 상호 의존성이 적다.
    • 모듈이 독립적으로 동작할 수 있어 변경의 영향이 최소화된다.
    • 유지보수와 재사용이 용이해진다.
  • 높은 결합도(High Coupling)
    • 모듈 간의 상호 의존성이 크다.
    • 한 모듈의 변경이 다른 모듈에 큰 영향을 미친다.
    • 시스템의 복잡성이 증가하고 유지보수가 어려워진다.

이상적인 소프트웨어 설계에서는 결합도가 낮아야 하는데, 결합도를 낮게 유지하면 모듈을 독립적으로 개발, 테스트, 수정할 수 있어 소프트웨어의 유지보수성과 확장성이 향상되기 때문이다.

 

결합도의 순서 (낮은 결합도에서 높은 결합도 순)

결합도는 모듈 간의 의존성이 얼마나 강한지를 나타내며, 결합도가 낮을수록 모듈 간의 독립성이 커진다.

  1. 내용 결합도 (Content Coupling, 가장 높은 결합도)
    • 한 모듈이 다른 모듈의 내부 동작(코드, 데이터)에 직접 접근하거나 수정하는 경우
    • 가장 높은 결합도로, 유지보수가 매우 어렵다.
  2. 공통 결합도 (Common Coupling)
    • 여러 모듈이 전역 변수를 공유하는 경우
    • 전역 변수가 변경되면 관련된 모든 모듈에 영향을 미친다.
  3. 외부 결합도 (External Coupling)
    • 모듈들이 외부 인터페이스(파일 포맷, 프로토콜 등)에 의존하는 경우
    • 외부 요소가 변경되면 영향을 받는다.
  4. 제어 결합도 (Control Coupling)
    • 한 모듈이 다른 모듈에 제어 신호(플래그, 제어 변수 등)를 전달하여 동작을 제어하는 경우
    • 한 모듈이 다른 모듈의 내부 동작 방식을 결정한다.
  5. 스탬프 결합도 (Stamp Coupling)
    • 모듈 간의 데이터 구조를 전달하는 경우
    • 데이터 구조의 일부만 사용하더라도 전체를 전달해야 하므로 불필요한 의존성이 생긴다.
  6. 자료 결합도 (Data Coupling, 가장 낮은 결합도)
    • 모듈 간에 단순한 데이터 값만을 전달하는 경우
    • 데이터 자체에만 의존하므로 가장 낮은 결합도를 가진다.

응집도(Cohesion)

응집도는 모듈 내의 요소들이 얼마나 밀접하게 연관되어 있는지를 나타내며, 모듈 내부의 요소들이 하나의 책임이나 목적을 위해 얼마나 잘 통합되어 있는지를 평가하는 지표이다.

  • 높은 응집도(High Cohesion)
    • 모듈 내부의 요소들이 긴밀하게 관련되어 있으며, 단일한 목적이나 기능을 수행한다.
    • 모듈이 명확한 책임을 가지며, 이해하기 쉽고 유지보수하기 용이하다.
  • 낮은 응집도(Low Cohesion)
    • 모듈 내부의 요소들이 다양한 기능을 수행하거나 서로 관련이 적다.
    • 모듈이 복잡하고 불명확해지며, 유지보수나 확장이 어렵다.

이상적인 소프트웨어 설계에서는 응집도가 높아야 하는데, 응집도가 높을수록 모듈이 명확한 책임을 가지며, 코드의 가독성과 유지보수성이 향상되기 때문이다.

 

응집도의 순서 (낮은 응집도에서 높은 응집도 순)

응집도는 모듈 내부의 구성 요소들이 얼마나 밀접하게 관련되어 있는지를 나타내며, 응집도가 높을수록 모듈이 명확하고 일관된 기능을 수행한다.

  1. 우연적 응집도 (Coincidental Cohesion, 가장 낮은 응집도)
    • 모듈 내부의 구성 요소들이 서로 관련이 없는 기능을 수행하는 경우
    • 기능 간의 연관성이 거의 없으며, 단지 코드를 모아 놓은 것에 불과하다.
  2. 논리적 응집도 (Logical Cohesion)
    • 유사한 성격의 기능들을 하나의 모듈에 모아놓은 경우
    • 동일한 논리적 분류에 속하는 기능들이지만, 각기 다른 경우에 호출된다.
  3. 시간적 응집도 (Temporal Cohesion)
    • 특정 시점에 수행되는 작업들을 하나의 모듈에 포함시키는 경우
    • 예를 들어, 프로그램 초기화 또는 종료 시에 수행되는 작업들을 하나의 모듈에 모아두는 경우이다.
  4. 절차적 응집도 (Procedural Cohesion)
    • 특정 순서에 따라 수행되어야 하는 작업들이 하나의 모듈에 포함된 경우
    • 기능들 간에 순차적인 관계가 있지만, 그들 사이에 더 깊은 연관성은 없다.
  5. 교환적 응집도 (Communicational Cohesion)
    • 동일한 데이터를 사용하는 작업들이 하나의 모듈에 포함된 경우
    • 데이터가 공유되므로 어느 정도 관련성이 있다.
  6. 순차적 응집도 (Sequential Cohesion)
    • 한 작업의 출력이 다음 작업의 입력으로 사용되는 경우
    • 작업들 간에 데이터 흐름이 존재하여 연관성이 높다.
  7. 기능적 응집도 (Functional Cohesion, 가장 높은 응집도)
    • 모듈이 하나의 명확한 기능만을 수행하는 경우
    • 모듈 내부의 모든 요소가 그 기능을 완수하기 위해 긴밀히 협력한다.

결합도와 응집도의 관계

  • 낮은 결합도높은 응집도를 가진 소프트웨어 시스템은 유지보수성이 뛰어나고 확장하기 쉬우며, 모듈 간의 영향이 최소화된다.
  • 결합도와 응집도는 서로 반비례하는 관계에 있다고 오해할 수 있지만, 낮은 결합도높은 응집도는 동시에 달성해야 하는 목표라고 생각하면 된다.

결합도와 응집도의 예

  • 높은 결합도, 낮은 응집도
    • A 모듈이 B 모듈의 내부 구현에 강하게 의존하며, 변경 시 A와 B 모두 수정이 필요하다면 결합도가 높은 상태이다.
    • 또한, A 모듈이 다양한 기능을 담당하고 있어 코드가 복잡해진다면 응집도가 낮다고 할 수 있습니다.
  • 낮은 결합도, 높은 응집도
    • A 모듈이 B 모듈의 인터페이스만 사용하고, B 모듈의 내부 구현이 변경되어도 A 모듈에 영향을 주지 않는다면 결합도가 낮다고 할 수 있다.
    • 동시에, A 모듈이 명확한 책임을 가지고 단일 기능만을 수행한다면 응집도가 높다고 할 수 있다.

결론적으로, 좋은 소프트웨어 설계는 낮은 결합도와 높은 응집도를 목표로 해야 하며, 이를 통해 코드의 유지보수성과 확장성을 크게 향상시킬 수 있다.


디지털 트윈(Digital Twin)

디지털 트윈은 물리적 객체, 시스템, 프로세스 또는 환경의 디지털 복제본을 의미한다.

이 개념은 다양한 산업 분야에서 활용되며, 실제 세계의 사물이나 시스템의 상태, 동작, 특성을 실시간으로 모니터링하고 분석할 수 있는 가상의 모델을 제공한다.

디지털 트윈의 주요 요소

  1. 물리적 객체 또는 시스템: 디지털 트윈은 실제 존재하는 물리적 객체나 시스템에 대응한다. 예를 들어, 제조 설비, 항공기 엔진, 건물, 도시 등이 될 수 있다.
  2. 센서 데이터: 물리적 객체에 부착된 센서를 통해 실시간 데이터를 수집한다. 이 데이터는 객체의 상태, 성능, 환경 조건 등을 포함할 수 있다.
  3. 디지털 모델: 수집된 데이터를 기반으로 물리적 객체를 가상 환경에서 재현한 디지털 모델이다. 이 모델은 객체의 구조, 동작, 특성 등을 반영한다.
  4. 연결성: 실시간 데이터 전송을 통해 물리적 객체와 디지털 트윈 간의 지속적인 상호 작용이 이루어진다.
  5. 분석 및 시뮬레이션: 디지털 트윈을 통해 데이터를 분석하고, 예측 모델을 활용하여 미래의 동작이나 성능을 시뮬레이션할 수 있다.

디지털 트윈의 활용 사례

  • 제조 공정에서 디지털 트윈을 사용하여 설비의 상태를 실시간으로 모니터링하고, 유지보수 시기를 예측하며, 공정 최적화를 진행한다.
  • 건설 및 건축쪽에서 건물의 구조, 에너지 효율, 유지보수 요구사항 등을 관리하기 위해 디지털 트윈을 활용한다.
  • 스마트 시티에서 도시 인프라, 교통 흐름, 에너지 사용 등을 실시간으로 관리하고 최적화하는 데 사용된다.
  • 헬스케어에서 환자의 건강 상태를 모니터링하고 개인 맞춤형 치료 계획을 수립하는 데 활용된다.
  • 항공 및 자동차 산업에서 항공기 엔진, 차량 등의 성능을 실시간으로 모니터링하고, 유지보수 및 성능 최적화를 위해 사용된다.

디지털 트윈의 장점

  1. 실시간 모니터링: 실시간으로 데이터를 수집하고 분석하여 객체의 상태를 지속적으로 파악할 수 있다.
  2. 예측 유지보수: 고장이나 문제 발생 전에 이를 예측하고 예방 조치를 취할 수 있다.
  3. 최적화: 데이터를 분석하여 시스템의 성능을 최적화하고 효율성을 향상시킬 수 있다.
  4. 비용 절감: 유지보수 비용, 운영 비용 등을 절감할 수 있다.
  5. 의사결정 지원: 데이터를 기반으로 한 정확한 의사결정을 지원한다.
728x90