DI(Dependency Injection) 의 개념
DI는 스프링만의 기능이 아니라, OOP 프로그래밍에서 자주 이용되는 프로그래밍 방법 중 하나이다. 말 그대로 의존하는 객체를 주입하는 것이 바로 DI 인데, 의존성이라는 뜻을 이해해보자. 아래에 "일체형 배터리"와 "분리형 배터리"를 통해 비유해보았다.
정리하자면, DI에서 구현하고자 하는 것은 바로 "분리형 배터리"로 코드를 유연하게 하기 위해, 객체를 분리하여 필요할때만 사용할 수 있게 하는 것이다.
다양한 의존 객체 주입 방법
이제, 스프링에서 의존객체를 주입하는 다양한 방법에 대해서 알아보자.
1. 생성자를 이용한 의존 객체 주입
이 방법은 생성자를 통해 생성될때 파리미터로 넘겨받아 의존성을 주입해주는 방식입니다.
가장 먼저, 객체를 만들기 원하는 클래스에 매개변수를 가지는 생성자를 만든다.
public StudentRegisterService(StudentDao studentDao){
this.studentDao = studentDao;
}
이어서 applicationContext 파일에 <bean> 설정을 해준다.
<bean id="studentDao" class="ems.member.dao.StudentDao"></bean>
<bean id="registerService" class="ems.member.service.StudentRegisterService">
<constructor-arg ref="studentDao"></constructor-arg>
</bean>
2. setter를 이용한 의존 객체 주입
이 방법은 setter메서드를 호출하여 의존성 주입을 처리하는 방법이다. setter 메서드는 스프링 컨테이너가 자동으로 호출하며, 호출하는 지점은 <bean> 객체 생성 직후이다. 따라서 setter인젝션이 동작하기 위해서는 setter메서드뿐만 아니라 기본 생성자도 반드시 필요하다.
setter 메서드에 생성자를 다음과 같이 적어준다.
public void setJdbcUrl(String jdbcUrl) {
this.jdbcUrl = jdbcUrl;
}
public void setUserId(String userId) {
this.userId = userId;
}
public void setUserPw(String userPw) {
this.userPw = userPw;
}
이어서 <bean>을 설정해보자.
<bean id="dataBaseConnectionInfoDev" class="ems.member.DataBaseConnectionInfo">
<property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:xe" />
<property name="userId" value="scott" />
<property name="userPw" value="tiger" />
</bean>
setter 인젝션에선 <contructor-arg> 대신 <property>를 사용한다. name 속성 값은 호출하고자하는 메서드 이름으로, name속성 값이 jdbcUrl이라고 되어있으면 호출되는 메서드는 setJdbcUrl이다. 반드시 name 속성 변수 이름에서 첫 글자를 대문자로 바꾸고 앞에 'set'을 붙인 것이 호출 할 메서드 이름이다.
속성 | 의미 |
ref | 다른 <bean>객체를 인자로 넘길 때 사용 |
value | 기본형 데이터를 넘길 때 사용 |
3. List 타입의 의존 객체 주입
여러 데이터가 들어오는 List 타입의 경우에는 <property>의 value값을 사용할 수 없다. 대신 <list> 속성을 사용해서 그 안에 <value> 속성들을 넣어 준다.
public void setDevelopers(List<String> developers) {
this.developers = developers;
}
<property name="developers">
<list>
<value>Cheney.</value>
<value>Eloy.</value>
<value>Jasper.</value>
<value>Dillon.</value>
<value>Kian.</value>
</list>
</property>
4. Map 타입의 의존 객체 주입
Key, Value쌍으로 오는 Map 타입의 경우에도 다음과 같이 해주면된다.
public void setAdministrators(Map<String, String> administrator) {
this.administrator = administrator;
}
<property name="administrators">
<map>
<entry>
<key>
<value>Cheney</value>
</key>
<value>cheney@springPjt.org</value>
</entry>
<entry>
<key>
<value>Jasper</value>
</key>
<value>jasper@springPjt.org</value>
</entry>
</map>
</property>
'Web[웹] > Spring Framework' 카테고리의 다른 글
[Spring] 어노테이션을 이용한 스프링 설정 (0) | 2019.11.21 |
---|---|
[Spring] 의존객체 자동 주입 : @Autowired와 @Resource (0) | 2019.11.20 |
[Spring] 스프링 설정 파일 분리와 빈 스코프(Bean Scope) (0) | 2019.11.20 |
[Spring] 따라해보는 스프링 프로젝트 생성 (0) | 2019.11.18 |
[Spring] 스프링 프레임워크란 도대체 무엇인가? (0) | 2019.11.15 |