이번 절에서는 스프링 IoC 컨테이너를 사용하여 빈을 생성할 때 생성자와 프로퍼티를 설정하는 방법을 배운다.
1. 호출할 생성자 설정
이번 실습에서는 인스턴스에 대해 호출될 생성자를 지정하는 방법을 알아본다. 빈을 선언할 때 <constructor-arg> 엘리먼트를 이용하여 호출될 생성자를 지정할 수 있다.
- 실습 패키지 생성
exam 패키지 아래에 test04 패키지를 생성한다. test03 패키지의 모든 파일을 test04 패키지에 복사한다.
- beans.xml 빈 설정 파일
exam/test04/beans.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
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="score1" class="exam.test04.Score">
<constructor-arg><value type="java.lang.String">홍길동</value></constructor-arg>
<constructor-arg><value type="float">91</value></constructor-arg>
<constructor-arg><value type="float">92</value></constructor-arg>
<constructor-arg><value type="float">93</value></constructor-arg>
</bean>
<bean id="score2" class="exam.test04.Score">
<constructor-arg><value>임꺽정</value></constructor-arg>
<constructor-arg><value>81</value></constructor-arg>
<constructor-arg><value>82</value></constructor-arg>
<constructor-arg><value>83</value></constructor-arg>
</bean>
<bean id="score3" class="exam.test04.Score">
<constructor-arg type="java.lang.String" value="장보고"/>
<constructor-arg type="float" value="71"/>
<constructor-arg type="float" value="72"/>
<constructor-arg type="float" value="73"/>
</bean>
<bean id="score4" class="exam.test04.Score">
<constructor-arg value="이순신"/>
<constructor-arg value="100"/>
<constructor-arg value="98"/>
<constructor-arg value="99"/>
</bean>
<bean id="score5" class="exam.test04.Score">
<constructor-arg value="70" index="3"/>
<constructor-arg value="50" index="1"/>
<constructor-arg value="강감찬" index="0"/>
<constructor-arg value="60" index="2"/>
</bean>
</beans>
public Score() {}
public Score(String name, float kor, float eng, float math) {...}
exam.test04.Score 클래스에는 두 개의 생성자가 있다. <constructor-arg> 태그를 사용하여 호출될 생성자를 지정할 수 있다.
<constructor-arg> ... </constructor-arg>
호출할 생성자는 매개변수 값에 의해 결정된다. 호출할 생성자의 매개변수 순서대로 <constructor-arg> 태그를 사용하여 매개변수 값을 설정한다. 매개변수 값은 <value> 태그를 사용하여 지정한다.
<value type="java.lang.String">홍길동</value>
<value> 태그의 type 속성은 매개변수 타입이고, 콘텐츠(시작 태그와 끝 태그 사이의 내용)는 매개변수 값이다. Score() 생성자의 첫 번째 매개변수는 String 타입이므로 type 속성에 java.lang.String을 지정하였다. 매개변수 값 "홍길동"은 <value>의 시작 태그와 끝 태그의 사이에 넣었다.
<constructor-arg><value type="float">91</value></constructor-arg>
<constructor-arg><value type="float">92</value></constructor-arg>
<constructor-arg><value type="float">93</value></constructor-arg>
▶ 자바 코드로 표현하면?
new Score("홍길동", 91, 91, 91);
나머지 세 개의 매개변수는 float이라서 type 속성에 float을 지정하였다.
<constructor-arg><value>임꺽정</value></constructor-arg>
<constructor-arg><value>81</value></constructor-arg>
<constructor-arg><value>82</value></constructor-arg>
<constructor-arg><value>83</value></constructor-arg>
▶ 자바 코드로 표현하면?
new Score("임꺽정", 81, 82, 83);
생성자의 매개변수 값을 지정할 때 위와 같이 타입을 생략할 수 있다. 빈 컨테이너는 생성자를 호출할 때 <constructor-arg> 태그가 선언된 순서대로 매개변수 값을 넘긴다. 그리고 매개변수 타입에 맞추어 자동 형변환을 수행한다. String 타입에 대해서는 <value> 태그의 내용을 String 객체로 만들고, float 타입에 대해서는 <value> 태그의 내용을 float으로 만든다.
<constructor-arg type="java.lang.String" value="장보고"/>
<constructor-arg type="float" value="71"/>
<constructor-arg type="float" value="72"/>
<constructor-arg type="float" value="73"/>
▶ 자바 코드로 표현하면?
new Score("장보고", 71, 72, 73);
<value> 태그를 사용하지 않고도 생성자의 매개변수 값을 지정할 수 있다. <constructor-arg> 태그의 type 속성과 value 속성을 이용하면 된다. 또한, 자식 태그 <value>가 없기 때문에 <constructor-arg> 태그의 끝 태그를 생략할 수 있다. 대신 시작 태그의 끝이 '/>'로 끝나야 한다.
<constructor-arg value="이순신"/>
<constructor-arg value="100"/>
<constructor-arg value="98"/>
<constructor-arg value="99"/>
▶ 자바 코드로 표현하면?
new Score("이순신", 100, 98, 99);
다른 생성자와 혼동되지 않는다면 type 속성을 생략할 수 있다. value 속성의 값은 생성자의 매개변수 타입에 맞추어 자동 형변환 된다.
<constructor-arg value="70" index="3"/>
<constructor-arg value="50" index="1"/>
<constructor-arg value="강감찬" index="0"/>
<constructor-arg value="60" index="2"/>
▶ 자바 코드로 표현하면?
new Score("강감찬", 50, 60, 70);
index 속성을 이용하면 매개변수의 순서를 지정할 수 있다. 인덱스는 0부터 시작한다. 앞의 코드의 경우 매개변수들은 "강감찬", 50, 60, 70의 순서로 생성자에 전달된다. 이것을 자바 코드로 표현하면 다음과 같다.
참고도서 : https://freelec.co.kr/book/1674/
[열혈강의] 자바 웹 개발 워크북
[열혈강의] 자바 웹 개발 워크북
freelec.co.kr
'교재 실습 > 자바 웹 개발 워크북' 카테고리의 다른 글
| 137. 생성자와 프로퍼티 설정 (3) (0) | 2022.10.21 |
|---|---|
| 136. 생성자와 프로퍼티 설정 (2) (0) | 2022.10.20 |
| 134. XML 기반 빈 관리 컨테이너 (4) (3) | 2022.10.19 |
| 133. XML 기반 빈 관리 컨테이너 (3) (0) | 2022.10.17 |
| 132. XML 기반 빈 관리 컨테이너 (2) (3) | 2022.10.15 |
댓글