안녕하세요, 여러분! 이전 글에서는 SpringBoot에서 중요하게 다루는 IOC(Inversion of Control)에 대해 알아보았습니다. 이번에는 그 중에서도 특히 중요한 DI(Dependency Injection)에 대해 자세히 살펴보도록 하겠습니다.
1. DI(Dependency Injection)란?
DI는 '의존성 주입'이라는 의미로, 한 클래스가 다른 클래스에 의존할 때, 이 의존성을 외부에서 주입하는 것을 말합니다. 예를 들어, 클래스 A가 클래스 B의 메서드를 사용해야 하는 경우, 클래스 A는 클래스 B에 의존하게 됩니다. 이 때, 클래스 B의 인스턴스를 클래스 A가 직접 생성하는 것이 아니라 외부에서 주입받아 사용하는 것이 DI의 개념입니다.
2. 왜 DI를 사용하는가?
DI를 사용하는 이유는 크게 두 가지입니다.
첫째, 각 클래스 간의 결합도(Coupling)를 낮출 수 있습니다. 결합도란 한 클래스가 다른 클래스에 얼마나 의존하는지를 나타내는 지표입니다. DI를 사용하면 의존성을 인터페이스나 추상 클래스로 제한할 수 있으므로, 구체적인 클래스에 대한 의존성이 줄어들고 결합도가 낮아집니다.
둘째, 코드의 테스트와 재사용성을 증가시킬 수 있습니다. DI를 통해 인스턴스를 외부에서 주입받게 되면, 테스트 시에는 테스트 용도의 인스턴스를, 실제 운용 시에는 실제 인스턴스를 주입할 수 있으므로 코드의 유연성이 증가합니다.
3. SpringBoot에서의 DI 예시
SpringBoot에서는 주로 @Autowired 어노테이션 또는 생성자를 통해 DI를 구현합니다. 아래에 그 예시를 보여드리겠습니다.
@Service
public class UserService {
private UserRepository userRepository;
@Autowired
public void setUserRepository(UserRepository userRepository) {
this.userRepository = userRepository;
}
}
위의 코드에서는 @Autowired 어노테이션을 이용해 UserRepository 인스턴스를 UserService에 주입하고 있습니다.
@Service
public class UserService {
private final UserRepository userRepository;
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
}
이 코드에서는 생성자를 통해 UserRepository 인스턴스를 UserService에 주입하고 있습니다.
결론
DI는 SpringBoot에서 코드의 결합도를 낮추고, 유연성과 재사용성을 높이는 중요한 기법입니다. 이를 통해 더욱 간결하고 유지보수하기 쉬운 코드를 작성할 수 있습니다. 다음 글에서는 이 DI를 활용하는 다양한 스프링 기법에 대해 알아보도록 하겠습니다. 감사합니다!
'spring' 카테고리의 다른 글
DispatcherServlet 이란? (0) | 2023.05.29 |
---|---|
Aspect-Oriented Programming (AOP): 개념, 장점, 그리고 위빙 (0) | 2023.05.29 |
SpringBoot에서 이해하기 쉬운 IOC(Inversion of Control) 살펴보기 (0) | 2023.05.21 |
spring framework를 사용하는 이유 (0) | 2023.03.19 |
mockito 개념 및 활용 (0) | 2021.07.31 |