객체 의존성
: 객체가 특정 객체에 상호작용을 하는 것
: 현재 객체가 다른 객체와 상호작용 (참조)하고 있다면 현재 객체는 다른 객체에 의존성을 가진 것
: 참조하는 모듈이 바뀌면 의존하는 다른 모듈까지 변경되어야한다

의존성 주입
: 의존 관계를 외부에서 결정하고 주입하는 것
: 객체에 의해서 의존성이 주입되는 것이 아니라 프레임워크 등 외부에 의해서 의존성이 주입되는 설계 패턴
- 의존성 주입 방법
1) 생성자를 통한 전달
2) setter를 통한 전달
3) 멤버 변수를 통한 전달
- 장점
: 종속성이 감소한다
: 재사용성이 증가한다
: 더 많은 테스트 코드를 작성할 수 있다
: 코드를 읽기 쉬워진다
예제 코드
//users-service.js
const User = require('./User');
const UsersRepository = require('./users-repository');
async function getUsers() {
return UsersRepository.findAll();
}
async function addUser(userData) {
const user = new User(userData);
return UsersRepository.addUser(user);
}
module.exports = {
getUsers,
addUser
}
: 위 코드에서 user-service.js는 비즈니스 로직을, user-respository.js에서는 데이터를 정의하고 있다
: service가 특정 repository와 연결되어 있어 다른 repository를 연결한다면 비즈니스 로직까지 변경해야한다
: 게다가 jest를 통해 테스트를 한다고 할대 userRepository에 Mocking된 객체를 만들어줘야한다
- 개선
//users-service.js
const User = require('./User');
function UsersService(usersRepository) { // 매개 변수로 넘긴다.
async function getUsers() {
return usersRepository.findAll();
}
async function addUser(userData) {
const user = new User(userData);
return usersRepository.addUser(user);
}
return {
getUsers,
addUser
};
}
module.exports = UsersService
: repository를 매개변수로 받아서 repository에 상관없이 코드를 실행할 수 있다
: 즉, user-service는 repository와 결합되어있지 않은 상태이다
Reference
[Design Pattern] DI란 (Dependency Injection) - Heee's Development Blog
Step by step goes a long way.
gmlwjd9405.github.io
[node.js] DI(의존성 주입) 구현하기
DI (Dependency Injection) 의존성 주입(DI)는 잘 알려진 기술이다. IoC 컨테이너를 이용한 DI는 여러 모듈의 확장성과 독립성에 큰 도움을 준다. 특히 Spring에서 Java Bean을 이용하여 DI를 구현하는 것이 국
charming-kyu.tistory.com
'개발 > JavaScript & TypeScript' 카테고리의 다른 글
| 프로젝트 내에서 타입 관리하기 (0) | 2023.12.28 |
|---|---|
| 타입스크립트로 구현하는 좋은 예외(Exception) 처리 (0) | 2023.12.28 |
| 타입스크립트 클린코드 (0) | 2023.12.28 |
| nodejs / typescript / express API 문서 자동화 도입기 (실패) (0) | 2023.12.28 |
| 자바스크립트에 타입스크립트 적용 (0) | 2023.11.20 |