320x100
320x100
객체 의존성
: 객체가 특정 객체에 상호작용을 하는 것
: 현재 객체가 다른 객체와 상호작용 (참조)하고 있다면 현재 객체는 다른 객체에 의존성을 가진 것
: 참조하는 모듈이 바뀌면 의존하는 다른 모듈까지 변경되어야한다
의존성 주입
: 의존 관계를 외부에서 결정하고 주입하는 것
: 객체에 의해서 의존성이 주입되는 것이 아니라 프레임워크 등 외부에 의해서 의존성이 주입되는 설계 패턴
- 의존성 주입 방법
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
300x250
728x90
'Programming > JavaScript' 카테고리의 다른 글
Bun v1.1 출시 (1) | 2024.04.27 |
---|---|
배열에 비동기 작업을 실시할 때 알아두면 좋은 지식 (0) | 2023.11.07 |
메모리 관점에서의 비구조화 할당 (0) | 2023.11.07 |
[js] 자바스크립트에서 정규식으로 특정 값만 검색해서 원하는대로 replace (0) | 2023.08.19 |
if-else 보다는 if-if 코드의 가독성 (0) | 2023.08.19 |