여행을 개발하다

의존성 주입2(Dependency Injection) - 멤버 변수로 ArrayList가 포함된 객체, 생성자로 Bean초기화하기 본문

Spring/Spring

의존성 주입2(Dependency Injection) - 멤버 변수로 ArrayList가 포함된 객체, 생성자로 Bean초기화하기

yhtragramming 2019. 5. 16. 10:28

안녕하세요!

 

오늘은 지난 포스팅에 이어 '멤버 변수로 ArrayList가 포함된 객체를 초기화하는 방법'과,

'생성자로 초기화하는 방법'에 대해 알아보고자 합니다.


이해가 조금 어려우시다고요?

지난 번 임의로 student 클래스를 만들어서 예제를 보여드렸었는데,

여기서 추가로 한 학생의 '취미(hobby)'까지 멤버 변수로 넣는다고 가정하겠습니다.

 

물론, 취미는 한 개이면 다행이지만, 그렇지 않을 경우를 상정해서 여러개를 받도록하죠.

그래서 변수 또한 ArrayList<String> 자료형이 되고요, 변수명은 간단히 'hobby'로 지정합니다.

 

멤버 변수 초기화도 setter 대신에 생성자로 초기화할 수 있도록,

기본 생성자와 함께 또다른 생성자를 하나를 더 만들어주었습니다.

여기까지 완료되었다면, 기존에 해왔던 방식대로 xml 파일에 bean을 하나 만들었는데요.

문제는 ArrayList<String>형으로 선언한 hobby라는 변수는 어떻게 초기화를 하는가입니다.

 

 

1. 멤버 변수로 ArrayList가 포함된 객체 초기화

스프링에서 멤버 변수로 ArrayList가 포함된 객체를 초기화하는 방법은 <list>와 <value>태그를 이용하는 것입니다.

 

<property> 태그로 멤버의 이름을 적어주는 것은 동일하지만, 값을 넣어주는 <value> 태그를 바로 쓰는 것이 아니라 <list> 태그를 이용하여 목록을 하나둘씩 추가해주는 것이죠.

 

그리고 MainClass에서 동일하게 호출해주시면 됩니다.

 

결과도 잘 나오구요!

 

 

2. 생성자로 초기화하는 방법

이번에는 생성자로 초기화하는 방법입니다.

생성자를 이용한 초기화도 원리는 비슷하지만, 반드시 생성자의 인수의 순서를 지켜야 한다는 것에 유의해야 합니다. 그래서 생성자의 인수가 어떤 것인지를 따로 명시할 필요가 없습니다.

 

다음 생성자를 보면 인수로 받는 멤버 변수의 순서는 name, age, hobby가 됩니다.

 

xml 파일에서 생성자를 사용해서 초기화할 때는 <constructor-arg>태그를 사용합니다.

그리고 name, age, hobby 순으로 값을 입력해줍니다.

 

이를 Main 클래스에서 호출하면, 다음과 같이 이상없이 출력됩니다.

 

 

그런데 제가 실수로 멤버 변수의 순서를 헷갈려서 다음과 같이 bean을 생성했다고 가정하겠습니다.

hobby, name, age 순으로요..

 

그 결과 Main 클래스에서 호출하면 에러가 발생합니다.

(아 눈 아퍼...ㅎㅎ)

 


지금까지 '멤버 변수로 ArrayList가 포함된 객체를 초기화하는 방법'과,

'생성자로 초기화하는 방법'에 대해 알아보았습니다!!

 

좋은 하루 보내세요 : )

Comments