느슨한결합(loose-coupling)& 의존성주입(DI) 본문
느슨한 결합 (loose-coupling)
느슨한 결합은 객체 간의 연결고리를 헐겁게 하는 것,
즉 다른 Class를 직접적으로 사용하는 의존성을 줄이는 것을 의미하며,
객체 간 매우 강한 연결고리를 갖는 강한 결합(tight coupling)과 반대되는 개념이다.
강한 결합(tight coupling)의 특징
- 하나의 객체를 변경하게 되면 다른 객체들을 변경을 요구되어 변경점들을 확인하고 쉽게 놓칠 수 있다.
- 결합이 강하게 되어있어 결합이 되어있지 않으면 사용을 할 수 없게 된다.
- new를 선언할 때마다 컴퓨터 메모리를 사용하게 되는데 비교적 강한 결합에서 new를 더 많이 사용해 메모리를 많이 잡아먹게 된다.
느슨한 결합의 특징
- 클래스/클래스를 느슨하게 결합되어 새로운 기능을 개발하거나 기존 기능을 수정하고 확장하는게 쉽다.
- 코드의 유지 보수가 쉽다.
- 테스트 대역으로 치환하기가 쉬워 유닛 테스트가 용이하다.
실습에서는 service 파일에서 작성된 class 를 호출하기 위해, controller 에서 매번 new 'class명'를 호출했었는데,
이제는 service 에 있는 class를 최상위 파일인 Index.js 에서 한번 호출한 뒤 활용하여 코드가 짧아지고, 읽기 편해졌다고 볼 수 있다.
이를 의존성 주입(DI)이라고 말하며, 한번 호출하여 사용하는 경우 싱글톤 패턴이라고도 한다.
싱글톤 패턴
한곳에서 선언한 것으로 전역적으로 활용이 가능한 것을 싱글톤 패턴이라고 한다.
new 선언 한번으로 모든 곳에서 사용이 가능하며,
강하게 결합되어 있는 상태에서 느슨한 결합으로 풀리게 된다.
의존성 주입(Depedency injection)
강한 결합을 느슨한 결합으로 전환시키는 방법이며, 제어의 역전의 기술 중 하나.
*제어의 역전(inversion of control) : 제어하는 위치를 다른 곳으로 이동시키는 것.
어떤 것을 컨트롤하는 함수를 하위 파일에서 상위 모듈로 제어를 바꾸는 방식.
* 단, 의존성 주입을 모두 싱글톤 패턴이라고 볼 순 없다.
자바스크립트에서는 폴더를 나눠 제어해 주어야 했지만, nestJs에서는 자동으로 가능하다.
의존성 주입을 행한 모습.
매개변수로 직접적으로 전달하여, 강한 결합을 해제시켜 느슨한 결합을 이루어 내었다.
'개발 > nest.js' 카테고리의 다른 글
nestJS - MySQL과의 연동 (0) | 2023.02.01 |
---|---|
typeScript Generic / Utility (1) | 2023.01.31 |
eslint & prettier (0) | 2023.01.30 |
TypeScript - decorator / public & private & protected & readonly (0) | 2023.01.28 |
nest.js - class 기초 / OOP / MVC 패턴 (0) | 2023.01.26 |