배워서 남주는 개발자 :)

Web

javaScript Coupling Decoupling 디자인 패턴 / 객체간 의존성 결합도

핏짜보이 2022. 4. 3. 21:09
반응형
  • 각 객체간 의존성/ 결합도가 높을수록 예상치 못한 문제(Side Effect)가 발생할 가능성이 높아집니다.

이를 해결할 수 있는 Decoupling이라는 개념이 존재하는데 Decoupling을 위한 디자인 패턴은 어떤게 존재할까요?

 

 

 

[1]커플링이란?

https://ui.toast.com/weekly-pick/ko_20150522 

 

커플링 - 서로 다른 객체/ 모듈간의 관계를 의미한다. 관계의 방법은 조금씩 다르지만 거의 유사한 패턴이라 측정도 가능하다. 

종류는 6가지가 있고, 각각의 커플링 점수가 높을수록 강한 결합을 의미한다.

 

1)Content Coupling - 5점

가장 강한 결합 단계이다. 특정 객체에서 다른 객체의 매서드를 직접 호출하거나 상태를 수정하는 형태의 코드를 뜻한다.

 

2)Common Coupling - 4점

컨텐츠 커플링보다 조금 약한 결합도를 나타낸다. 객체가 다른 객체와 전역 변수를 공유하는 형태이다.

 

3)Control Coupling - 3점

커먼 커플링보다 조금더 약한 결합도를 나타낸다. 이 커플링은 플래그나 파라미터를 통해 외부 객체의 동작을 제어하는 형태의 코드를 나타낸다.

싱글톤 객체를 만들며 env라는 플래그를 넘기는 아래 예제를 통해 확인할 수 있다. 

 

4)Stamp Coupling - 2점

특정 레코드(두 개 이상의 데이터를 넘기는 구조)를 전달하지만, 데이터 중 일부만 사용되는 구조의 코드를 나타낸다.

해당 예제에서는 makeBread 메서드에 3개의 데이터가 전달되었지만, 내부적으로는 2개의 프로퍼티만 사용되는 형태이다.

 

5)Data Coupling - 1점

제일 낮은 결합도의 커플링이다. 객체끼리 서로 이벤트를 주고받는 형태의 코드를 말한다.

 

6)No Coupling - 0점

두 객체 간에 아무런 연관 관계가 없는 상태를 뜻한다.

 

 

[2]디자인 패턴이란?

https://readystory.tistory.com/114 

기존의 환경 내에서 반복적으로 일어나는 문제들을 어떻게 풀어나갈 것인가에 대한 일종의 솔루션

 

디자인 패턴을 파악하는 방법

1)패턴 이름 

패턴의 이름은 해당 패턴의 솔루션을 담고 있는 경우가 많다. 따라서 설계에 대한 생각을 더욱 쉽게 할 수 있고, 개발자들 간의 의사소통이 원활해진다.

 

2)문제

어떤 패턴을 사용하는 가를 서술하며 해결할 문제와 그 배경을 뜻한다. 문제를 제시함으로써 패턴을 적용하는 것이 의미가 있다.

 

3)해법 및 구현

위의 문제에 대해 어떻게 해결할 수 있을 것인가에 대한 해결책을 제시하고 구현하는 것이 좋다.

 

4)결과

디자인 패턴을 적용해서 얻는 결과와 장단점을 파악하는 것이 좋다.

 

 

[3]Decoupling 을 위한 디자인 패턴 - 컴포넌트 패턴

https://boycoding.tistory.com/118 

컴포넌트 패턴

한 개체가 여러 분야를 서로 커플링 없이 다룰 수 있게 하는 디자인 패턴이다.

게임 개발시 물리/렌더링/AI코드 등을 작성하게 되는데 만약 이런 코드들이 한 클래스 안에 섞여있다면 협업시 개발속도도 느려지고 디버깅에 많은 어려움을 겪게 된다. 즉 결합이 강한 커플링의 상태가 되는 것이다. 

이런 상황을 해소 하기 위해 분야별로 담당하는 파트를 나눠서 설계해야 할 필요가 있다.

 

컴포넌트 패턴을 사용하면 클래스의 행동에 따라 세부기능들을 나눈 다음, 서로 통신이 필요한 경우에만 결합하여 사용할 수 있다.

 

컴포넌트 패턴을 사용하면 얻는 장점은 두 가지 이다.

1)단일 상속 문제를 해결 할 수 있다.

다중상속을 지원하지 않는 언어에서, 컴포넌트 패턴을 통해 기능을 붙여나가면 다중 상속의 효과를 낼 수 있다. 

 

2)코드의 재활용이 가능하다.

특정 기능만 분리해서 작성하기 때문에 범용적으로 작성해둔다면, 여러 클래스에서 사용이 가능하다.

이를 통해 코드의 길이를 줄일 있다.

728x90