Skip to main content Link Search Menu Expand Document (external link) Copy Copied

컴포넌트 간 결합도 줄이기

  • 컴포넌트는 다른 컴포넌트로의 접근을 최소화하며, 한정된 정보만 공유해야 한다.
  • 이렇게 메서드 구현 세부사항을 감추거나 캡슐화하면 시스템 모듈화가 더욱 증진된다.
  • 동일한 컴포넌트에 있는 모듈이 호출하더라도, 모듈 수준에서 볼 때 결합도가 생긴다.

호출의 긍정적인 효과

  1. 내부 호출(Internal Call)
    • 호출하는 모듈끼리 같은 컴포넌트의 구성 요소이며, 내부 로직은 캡슐화되어 있다.
  2. 유출 호출(Outgoing Call)
    • 다른 컴포넌트에 일을 위임하며, 외부로 의존성이 발생한다.
    • 관심사의 분리를 위해 일을 위임하는 것은 좋은 방법이다.

호출의 부정적인 효과

  1. 유입 호출(Incoming Call)
    • 인터페이스를 통해 다른 컴포넌트에 기능을 제공하는 호출로, 가능한 제한해야 한다.
    • 컴포넌트 내부 코드는 최대한 캡슐화해서 다른 컴포넌트가 직접 실행하지 못하게 막아야 한다.
  2. 떠넘김 코드(Throughput Code)
    • 들어오는 호출을 받아서 다른 컴포넌트에 위임하는 코드이다.
    • 컴포넌트 별로 책임이 올바르게 나뉘지 않은 것이다.

컴포넌트 의존성이 낮을 경우 장점

  1. 컴포넌트를 분리하여 유지보수 할 수 있다.
  2. 유지보수 책임을 분담할 수 있다.
  3. 테스트하기 쉽다.

결합도를 줄이는 가이드라인

  1. 컴포넌트의 인터페이스에 해당하는 모듈의 크기를 제한한다.
  2. 상위 수준에서 컴포넌트 인터페이스를 추상화한다.
  3. 떠넘김 코드는 사용하지 않는다.

활용 방법

  1. 추상 팩토리(Abstract Factory) 디자인 패턴을 사용한다.
  2. 제어 역전(Inversion of Control), 의존성 주입(Dependency Injection) 프레임워크를 이용한다.

문제해결 방법

  • Q. 컴포넌트가 너무 얽혀 있어서 의존성을 바로잡을 길이 없다.
    • A. 테스트 용이성과 기능 파악에 심각한 영향을 미치는 스루풋 코드를 분석하라.
  • Q. 고칠 시간이 없다.
    • A. 테스트가 어려워지고, 이슈 대응에 필요한 작업량을 계산해보면 문제를 인식할 것이다.
  • Q. 떠넘김 코드가 요구사항이다.
    • A. 중간 계층을 두는 아키텍처도 있지만, 잘 구분하면 문제가 없다.