DI ( Dependency Injection )은 객체 간의 결합을 느슨하게 만들어주는 개념이다.
1. 객체간의 강한 결합 vs 느슨한 결합
2. 왜 느슨한 결합이 좋은 것 인가?
3. Spring에서 DI를 어떻게 사용하면 되는 것 인가?
1. 객체간의 강한 결합 vs 느슨한 결합
public interface BookDAO{}
public class MagazineDAO implements BookDAO{ String monthly = ""; }
public class NovelDAO implements BookDAO{}
public interface Book{}
public class MagazineServiceImpl implements Book{
private BookDAO bookDAO;
public MagazineServiceImpl() {
//강한 결합
//MagazineService 객체가 생성되는 시점에
//MagazineDAO를 생성하여 사용하게 된다.
bookDAO = new MagazineDAO();
}
}
public class NovelServiceImpl implements Book{
private BookDAO bookDAO;
public NovelServiceImpl(BookDAO bookDAO) {
//느슨한 결합
//NovelService 객체가 생성되는 시점에
//BookDAO가 자동으로 주입되어 사용하게 된다.
this.bookDAO = bookDAO;
}
}
2. 왜 강한 결합을 사용하면 안 좋은 것인가?
강한 결합을 사용하는 것이 반드시 나쁜 것이 아니다.
작은 프로젝트에서 강한 결합을 사용하도 무방하다.
그러나, 대형 프로젝트에서는 많은 클래스 객체들이 생성되고, 관리되어야 하기 때문에 느슨한 결합을 사용하는 게 유리하다.
추가적으로, 코드의 재사용성이나 단위테스트에도 느슨한 결합이 강한 결합보다 유리하다.
3. Spring에서 DI를 어떻게 사용하면 되는 것인가?
Spring에서는 대표적으로 XML을 사용하여 객체 간의 의존성을 정의하여 사용한다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- NovelService 객체 정의 -->
<bean id="NovelService" class="com.example.cls.NovelServiceImpl">
<!-- bookDAO라는 이름으로 NovelService Injection을 정의 -->
<property name="bookDAO" ref="bookDAO"/>
</bean>
<!-- bookDAO 객체 정의 -->
<bean id="bookDAO" class="com.example.cls.NovelDAO">
</bean>
</beans>
'프로그래밍 > Spring' 카테고리의 다른 글
[Spring]AOP(Aspect Oriented Programming) Schema-Based (0) | 2021.01.26 |
---|---|
[Spring]AOP(Aspect Oriented Programming) @AspectJ (0) | 2021.01.22 |
[Spring]AOP(Aspect Oriented Programming) (0) | 2021.01.21 |
Spring Boot @Transactional 설정 및 유의점 (0) | 2018.02.19 |
[Spring] DB Connection timeout (0) | 2016.01.21 |