DI 를 공부하던 중 깨달음을 얻고 더 적절한 예시와 설명을 하기위해서 추가로 작성해봅니다 ㅎㅎ
DI, 의존관계 주입이란
Dependency Injection은 의존성 주입이라고도 하며, 객체 간의 의존성을 외부에서 주입하여 결합도를 낮추고 유연한 코드를 작성하는 방법입니다.
말 그대로 메서드 안에 파라미터값을 통해 필요한 메서드나 데이터들을 추가하여 사용하는 것으로 이해하면 편합니다!
바로 예시를 들어가보겠습니다
우선 DI를 사용하지 않는 경우입니다
public class UserServiceImpl implements UserService {
private UserRepository userRepository = new UserRepositoryImpl();
public void addUser(User user) {
userRepository.save(user);
}
}
UserServiceImpl 안에서 private 를 통해 UserRepository 를 선언하고 그 밑에 addUser 메서드 안에서 UserRepository 를 사용하게 됩니다.
위 코드에서는 UserRepository 의 구현이 변경되면 UserServiceImpl 도 함께 변경해야 할 가능성이 높아집니다.
이렇게 되면 코드의 결합도가 높아지고, 재사용성과 테스트 용이성이 낮아집니다.
이후 DI 를 사용한 경우를 보겠습니다.
public class UserServiceImpl implements UserService {
private UserRepository userRepository;
public UserServiceImpl(UserRepository userRepository) {
this.userRepository = userRepository;
}
public void addUser(User user) {
userRepository.save(user);
}
}
@Configuration
public class AppConfig {
@Bean
public UserService userService(UserRepository userRepository) {
return new UserServiceImpl(userRepository);
}
@Bean
public UserRepository userRepository() {
return new UserRepositoryImpl();
}
}
UserServiceImpl 은 UserRepository 의 구현체에 의존하지 않습니다.
대신, 생성자를 통해 UserRepository 객체를 주입받습니다. 이렇게 되면, UserRepository 의 다른 구현체를 사용하거나, 테스트를 위해 가짜 객체를 사용하기 쉬워집니다. 또한 UserRepositoryImpl 의 구현이 변경되더라도 UserServiceImpl 은 영향을 받지 않습니다!
이전에 썼던 DI의 예시보다 위 예시가 더 간결하고 이해하기 좋을 것 같아 가져와봤습니다
DI 의존성 주입을 이해하는데 더욱 더 도움이 되었기를..
'개발지식' 카테고리의 다른 글
EAI(Enterprise Application Integration)이란? (0) | 2024.02.24 |
---|---|
싱글톤 패턴(Singleton Pattern)이란 (0) | 2024.02.23 |
index 가 뭔지, 동작원리에 대해 설명해보세요(실제 기술면접 질문) (0) | 2024.02.13 |
도커(Docker)란! 컨테이너(Container)란! 쿠버네티스(Kubernetes)란! 무엇인가! (0) | 2024.02.12 |
[SPRING] 스프링 프레임워크의 처리 흐름 (4) | 2024.02.07 |