본문 바로가기
Spring 프레임워크/예제

예제 05 의존 주입 (Contructor Injection)

by Hwanii_ 2023. 8. 1.
728x90

1.

TV 인터페이스

 

 

RemoteControl 인터페이스

 

 

2.

각각의 인터페이스들을 구현한 SamsungTV, LgTV, SamsungRC, LgRC 클래스

 

 

 

 

 

3.

applicationContext.xml 

 

 

1)

lazy-init = "true" 를 하면,

LookUp 했을 때만, 스프링 컨테이너가 해당 자료형의 객체를 인스턴스화 해준다.

 

lazy-init은 디폴트 값이 "false" 이다.

그래서, lazy-init = "true" 명시 해놓지 않으면,

스프링 컨테이너가 시작될 때, 해당 자료형의 객체를 즉각 인스턴스화 해준다.

 

[ 참고 ]

 

lazy-init = "true" 속성이 설정되어 있으면,

 

해당 객체는 스프링 컨테이너에서 처음으로 사용되는 시점에 초기화 된다.

 

즉,

getBean() 메서드가 호출되는 순간 == 해당 객체가 실제로 필요한 시점

에 초기화가 된다.

 

이를 통해 컴파일 되는 시작 시점에, 모든 객체를 생성 하지 않고,

필요한 객체만 생성하여, 자원을 효율적으로 관리 할 수 있다.

 

2)

<bean class = "패키지명.자료형 (클래스명) id = "참조변수명" />

을 하면, 인자가 없는 디폴트 (기본) 생성자를 호출 한다는 의미의 코드 이다.

 

위의 이미지와 같이, 생성자 오버로딩이 되서  인자가 1개 이상이라면, 

<constructor-arg ref = "인자의값" />

<constructor-arg value = "인자의값" />

 

으로 나타내면 된다.

 

ref = "" 는 인자가 객체 일 때,

value = "" 는 인자가 객체가 아닐 때 이다.

 

3)

생성자의 argument (인자) 로 사용되는 객체는

인스턴스화가 되어 있어야 사용이 가능하기에,

 

인자로 사용되는 객체의 자료형을 작성해서, 인스턴스화를 해줘야 한다.

 

 

4)

 

 

Client.java (front) 가 위의 이미지와 같을 때,

 

getBean() 메서드는 스프링 컨테이너에서 객체를 룩업 하는 기능을 수행 한다.

 

룩업은 컨테이너에서 객체를 검색해서 해당 객체를 가져오는 작업을 의미 한다.

 

[ 참고 ]

 

스프링 컨테이너는 .xml 설정 파일 또는 어노테이션을 통해 객체를 정의 한다.

 

getBean() 메서드는 주어진 객체의 이름 또는 ID 에 해당하는 객체를,

스프링 컨테이너에서 찾아서 반환 한다.

 

따라서, 

 

 

getBean(String name) 메서드는 Object 타입의 데이터를 반환 하니까,

 

TV 인터페이스 타입의 참조변수 tv와 tv2에 반환된 값을 넣기 위해,

다운 캐스팅 하는 모습을 확인 할 수 있다.

 

5)

 

 

인터페이스의 다형성이 실현된 모습을 확인 할 수 있다.

 

반응형