커플링, 디커플링
커플링과 디커플링은 소프트웨어 시스템에서 두 엔티티 간 관계를 성명하는 용어이다.
한 클래스가 다른 클래스를 사용할 때 해당 클래스에 '의존'한다고 말하며 그 둘이 coupled 되었다고 말한다.
그들 중 적어도 한 클래스는 다른 클래스에 대해 알고 있다.
디커플링은 이러한 클래스 간의 결합이 느슨하게 되어있을 때를 뜻한다.
느슨한 결합(loose coupling)이라고도 하고 디커플링(decoupling)이라고도 한다.
디커플링을 해야 하는 이유
ClassA가 ClassB에 크게 의존하는 경우 ClassB가 변경될 때 ClassA가 영향을 받을 가능성이 높다.
반대로 ClassA가 ClassB에 적게 의존하는 경우 ClassB가 변경될 때 ClassA가 영향을 받을 가능성이 낮다.
그렇기 때문에 클래스 간(엔티티 간) 결합은 약할수록(디커플링 될수록) 좋은 것이다.
예를 들어, 운전자가 엔진의 작동 방식에 대해 특정한 가정을 한다고 상상해보자. 그 가정과 다르게 작동하는 엔진이 장착된 새 차를 구입하면 ㅡ혹은 엔진을 교체하면ㅡ 이전의 가정은 모두 틀린 가정이 될 것이다. 컴퓨터에서 이와 같이 코드를 작성했다면 이제 제대로 작동하지 않는 잘못된 코드가 된 것이다. 그 누구도 이러한 상황은 원치 않을 것이다.
만약, 운전자로서 자동차에 대해 갖고 있는 최소한의 가정 ㅡ자동차에는 핸들, 브레이크, 가속 페달이 있다ㅡ 만 가지고 있다면 자동차가 바뀌던 엔진이 바뀌던 운전자에게 아무런 영향을 끼치지 않을 것이다. 이것이 느슨한 결합(loose coupling)이며 우리가 디커플링을 해야 하는 이유이다.
디커플링을 달성하는 방법
느슨한 결합을 달성하는 중요한 기술은 캡슐화이다. 클래스가 다른 클래스에게 내부 세부 정보를 숨기고 다른 클래스와 통신할 때는 인터페이스를 이용하여 통신하는 방법을 사용하는 것이다.
예를 들어, Car 클래스를 정의하는 경우 해당 인터페이스는 아마도 drive(), stop() 등등의 기본적인 것들이 될 것이다. Car 클래스의 다른 모든 세부 사항(ex: 엔진 작동 방식)은 다른 클래스에게는 숨겨 Car에 대해 너무 많은 정보를 알지 못하도록 막는다. ClassA가 ClassB에 대해 너무 많이 알고 있으면 그 둘은 강력한 결합이 되기 때문이다.
'프로그래밍 기초' 카테고리의 다른 글
클린 아키텍처 번역 (0) | 2023.03.28 |
---|---|
int와 Integer의 차이 (0) | 2022.11.05 |
의존성 주입(dependency injection) - 번역 (0) | 2022.10.22 |
dist 폴더 (0) | 2022.10.13 |
CLI란? (0) | 2022.10.13 |