Skip to main content 컴포넌트 간 결합도 줄이기
- 컴포넌트는 다른 컴포넌트로의 접근을 최소화하며, 한정된 정보만 공유해야 한다.
- 이렇게 메서드 구현 세부사항을 감추거나 캡슐화하면 시스템 모듈화가 더욱 증진된다.
- 동일한 컴포넌트에 있는 모듈이 호출하더라도, 모듈 수준에서 볼 때 결합도가 생긴다.
호출의 긍정적인 효과
- 내부 호출(Internal Call)
- 호출하는 모듈끼리 같은 컴포넌트의 구성 요소이며, 내부 로직은 캡슐화되어 있다.
- 유출 호출(Outgoing Call)
- 다른 컴포넌트에 일을 위임하며, 외부로 의존성이 발생한다.
- 관심사의 분리를 위해 일을 위임하는 것은 좋은 방법이다.
호출의 부정적인 효과
- 유입 호출(Incoming Call)
- 인터페이스를 통해 다른 컴포넌트에 기능을 제공하는 호출로, 가능한 제한해야 한다.
- 컴포넌트 내부 코드는 최대한 캡슐화해서 다른 컴포넌트가 직접 실행하지 못하게 막아야 한다.
- 떠넘김 코드(Throughput Code)
- 들어오는 호출을 받아서 다른 컴포넌트에 위임하는 코드이다.
- 컴포넌트 별로 책임이 올바르게 나뉘지 않은 것이다.
컴포넌트 의존성이 낮을 경우 장점
- 컴포넌트를 분리하여 유지보수 할 수 있다.
- 유지보수 책임을 분담할 수 있다.
- 테스트하기 쉽다.
결합도를 줄이는 가이드라인
- 컴포넌트의 인터페이스에 해당하는 모듈의 크기를 제한한다.
- 상위 수준에서 컴포넌트 인터페이스를 추상화한다.
- 떠넘김 코드는 사용하지 않는다.
활용 방법
- 추상 팩토리(Abstract Factory) 디자인 패턴을 사용한다.
- 제어 역전(Inversion of Control), 의존성 주입(Dependency Injection) 프레임워크를 이용한다.
문제해결 방법
- Q. 컴포넌트가 너무 얽혀 있어서 의존성을 바로잡을 길이 없다.
- A. 테스트 용이성과 기능 파악에 심각한 영향을 미치는 스루풋 코드를 분석하라.
- Q. 고칠 시간이 없다.
- A. 테스트가 어려워지고, 이슈 대응에 필요한 작업량을 계산해보면 문제를 인식할 것이다.
- Q. 떠넘김 코드가 요구사항이다.
- A. 중간 계층을 두는 아키텍처도 있지만, 잘 구분하면 문제가 없다.