결합도(Coupling)
커플링은 서로 다른 모듈이나 클래스가 얼마나 강하게 연결되어 있는지를 나타내는 개념입니다. 즉 서로 상호 작용하는 시스템들간의 의존성을 나타내며 모듈 간의 독립성 정도를 나타내는 지표입니다.
Tight Coupling
두 요소가 강하게 결합되어 있다는 것은 한 요소가 다른 요소의 내부 동작에 의존하거나 직접 접근하는 상태를 말합니다. 이런 상태에서는 한 요소의 변경은 다른 요소에 직접적인 영향을 미치고 다른 요소에 대한 많은 변경을 요구하게 됩니다. Tight Coupling은 다른 오브젝트에 대한 상당히 많은 정보를 필요로 하고 보통 두 객체간의 인터페이스들에게 서로 높은 의존성을 가지고 있습니다.
Loose Coupling
두 요소가 느슨하게 결합되어 있다는 것은 한 요소가 다른 요소의 내부 동작에 대해 잘 알지 못하거나 직접 접근하지 않는 상태를 말합니다. 이는 모든 요소들이 독립적이라는 것을 의마합니다. 하나의 요소 변경이 다른 요소들의 변경을 요구하는 위험을 줄이는 것을 목적으로 하며 요소들간의 내부 의존성을 줄이는 것을 추구하는 디자인 목표입니다.
Tight Coupling vs Loose Coupling
일반적으로 Tight Coupling은 대부분의 경우 코드의 유연성과 재사용성을 감소시키고 변경을 훨씬 더 어렵게 만들고 테스트 가능성을 저하시킵니다. 애플리케이션을 변경하거나 확장해야 할 때 oose Coupling 아키텍처로 설계하는 경우 요구 사항이 변경되면 각 요소들의 결합도가 낮기때문에 상호간 영향도를 줄인채 일부만 변경이 가능합니다.
- Tight Coupling은 테스트 가능성(test-ability) 낮지만 Loose Coupling은 테스트 가능성을 향상시킵니다.
- Tight Coupling은 인터페이스 개념을 제공하지 않습니다. 그러나 Loose Coupling은 구현이 아닌 인터페이스에 대한 프로그램의 GOF 원칙을 따르는 데 도움이 됩니다.
- Tight Coupling에서는 두 클래스 간에 코드를 교환하는 것이 쉽지 않습니다. 그러나 Loose Coupling에서 코드/모듈/객체/구성 요소의 다른 부분을 교환하는 것이 훨씬 쉽습니다.
- Tight Coupling에는 변경 기능이 없습니다. 그러나 Loose Coupling은 유연하게 변경 가능합니다.
오탈자 및 오류 내용을 댓글 또는 메일로 알려주시면, 검토 후 조치하겠습니다.