객체 의존성/결합도 & Decoupling

신용의·2022년 8월 8일
0

개발노트

목록 보기
3/3

객체간 의존성 / 결합도란?

응집도 (Cohesion)

👉모듈에 포함된 내부 요소들이 하나의 목적을 위해 연결 되어 있는 연관된 정도

겹합도 (Coupling)

👉다른 모듈과의 의존성 정도. 모듈 수정을 위해 다른 모듈의 변경을 요구하는 정도 로도 생각해 볼 수 있습니다.

대체적으로 결합도가 낮을수록 좋은 프로그램이라고 부른다.

💡 결합도가 높으면 변경하고 검토해야되는 모듈 수가 많아지는 단점이 있으니, 결합도는 낮을수록 검토해야되는 소스의 수가 적어져서 코드를 수정하기가 쉬워집니다.

💡 🚩 이상적: 높은 응집도 && 낮은 결합성

내부적인 응집도가 높아질 수록 다른 모듈과 낮은 결합성으로 이어질 가능성이 높다.


Decoupling?

사전적 의미는 탈 동조화이며, 경제 용어로 많이 사용되고 있다. 구글링을 해봐도 경제 관련 결과가 많이 나오는 것을 알 수 있다. 용어 자체는 큰 차이가 없으니 먼저 살펴 보자면: [참고]

커플링: 동조화 현상이라고도 하며, 함께 움직이는 경향을 보인다. 예를 들어, 중국의 경제가 호황이면 한국의 경제 또한 비슷한 양상으로 호황을 겪는 것이 보인다.

디커플링: 탈동조화 현상이라고도 하며, 커플링과 반대로 다르게 움직이는 것을 나타낸다. A라는 국가의 경제가 상승 곡선을 그리고 있더라도, B는 그와 상관없이 하향 곡선을 그리고 있을 수 있다.

👉 비슷한 맥락으로 코딩에서 또한 Coupling: 모듈간의 결합도를 낮추는 작업이라고 볼 수 있다.

디커플링 디자인 패턴 [참고]

  1. 싱글톤 (Singleton)

클래스의 단일 인스턴스만을 원할 때 이 패턴을 사용한다. 즉, 여러개의 인스턴스를 생성하는 것이 아니라 하나만 생성하는 것이다. 인스턴스가 없다면 새 인스턴스를 생성한다. 인스턴스가 있는 경우에는, 해당 인스턴스를 사용한다.

  • 싱클턴 방식은 단 하나의 클래스 인스턴스가 필요할 때 유용하다.
  • Nodejs에서는, module caching system을 활용해서 export한 모듈을 바로 쓸 수 있다.
  1. 팩토리 (Factory)

팩토리 디자인 패턴은, 객체를 생성하는데 사용되는 인터페이스 또는 추상 클래스를 정의 하는 것이다. 이렇게 생성된 인터페이스 및 추상클래스를 사용하여 다른 객체를 초기화 한다. 아래의 예를 살펴보자.

  • 팩토리 디자인 패턴은 객체 생성을 위한 인터페이스 및 추상 클래스를 제공한다.
  • 동일한 인터페이스 및 추상 클래스를 사용하여 다른 객체를 만들 수 있다.
  • 코드의 구조를 개선하고 유지관리가 더 쉬워 진다.
  1. 빌더 (Builder)

빌더 디자인 패턴 또한 마찬가지로 객체 구조와 객체를 분리할 수 있다. 따라서 복잡한 객체를 생성하는 코드를 단순화 한다. 단순한 객체를 만들 때는 과한 기능일 수 있지만, 복잡한 객체를 만들 때는 단순화 하는데 도움을 준다.

  1. 프로토타입 (Prototype)

자바스크립트는 프로토타입 기반 언어이기 때문에, 프로토타입으로 상속이 구현되어 있다. 이 말인 즉슨, 모든 객체는 어떤 객체를 상속하고 있다는 뜻이다.

따라서 이른바 예제 객체 라고 불리우는 프로토타입 객체의 값을 복제 하여 새로운 객체를 만든다. 이는 프로토 타입이 새 객체의 일종의 청사진 역할을 하는 것이다. 이 설계 패턴을 활용하면 객체에 정의된 함수가 참조에 의해 생성된다는 이점을 얻을 수 있다. 즉, 모든 객체가 해당 기능의 복사본을 보유하는 것이 아니라 동일한 기능을 가르키게 된다. 간단히 말해, 프로토타입 기능은 프로토타입에 상속된 모든 객체에 사용할 수 있다.

  • 자바스크립트는 프로토타입 기반 언어다.
  • 프로토타입 기반 상속을 사용한다.
  • 각 객체는 다른 객체로 부터 상속된다.
  • 새 객체는 프로토타입이라는 일종의 청사진에 따라 생성된다.
  • 프로토타입에 정의된 함수는 모든 새 클래스에서 상속된다.
  • 새 클래스는 개별 복사본을 갖는 대신 동일한 기능을 가리킨다.

참조: https://medium.com/@jang.wangsu/설계-용어-응집도와-결합도-b5e2b7b210ff

profile
Hasta la vista

0개의 댓글