1. 스프링의 의존성 관리 방법

① Dependency Lookup

② Dependency Injection : 객체 사이의 의존 관계를 스프링 설정 파일에 등록된 정보를 바탕으로 컨테이너가 자동으로 처리

- Constructor Injection (생성자 인젝션)

- Setter Injection (Setter 인젝션)

 

2. 의존성 관계 (이런 방법은 사용하지 않으니 참고만 하도록 한다.) → 의존성 주입이 필요한 이유

 

- SonySpeaker 클래스 생성

package polymorphism;

public class SonySpeaker {
	public SonySpeaker() {
		System.out.println("===> SonySpeaker 객체 생성");
	}
	
	public void volumeUp() {
		System.out.println("SonySpeaker --- 소리 올린다.");
	}
	
	public void volumeDown() {
		System.out.println("SonySpeaker --- 소리 내린다.");
	}
}

 

- SamsungTV 클래스에서 SonySpeaker 객체 사용

package polymorphism;

public class SamsungTV implements TV {
	private SonySpeaker speaker;	//SonySpeaker 객체 생성 준비
	
	public SamsungTV() {
		System.out.println("===> SamsungTV 객체 생성");
	}
	
	public void powerOn() {
		System.out.println("SamsungTV --- 전원 켠다.");
	}
	
	public void powerOff() {
		System.out.println("SamsungTV --- 전원 끈다.");
	}
	
	public void volumeUp() {
		speaker = new SonySpeaker();	//SonySpeaker 객체 생성
		speaker.volumeUp();
	}
	
	public void volumeDown() {
		speaker = new SonySpeaker();	//SonySpeaker 객체 생성
		speaker.volumeDown();
	}
}

 

- 실행 클래스

package polymorphism;

import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;

public class TVUser {
	public static void main(String[] args) {
		//1. Spring 컨테이너 구동
		AbstractApplicationContext factory = new GenericXmlApplicationContext("applicationContext.xml");
	
		//2. Spring 컨테이너로부터 필요한 객체를 요청(Lookup)		
		TV tv = (TV) factory.getBean("tv");	//이름이 tv인 객체(bean의 id)를 getBean() 메소드를 이용하여 요청
		tv.powerOn();
		tv.volumeUp();
		tv.volumeDown();
		tv.powerOff();
		
		//3. Spring 컨테이너 종료
		factory.close();
    }
}
INFO : org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loading XML bean definitions from class path resource [applicationContext.xml]
INFO : org.springframework.context.support.GenericXmlApplicationContext - Refreshing org.springframework.context.support.GenericXmlApplicationContext@1c655221: startup date [Wed Jan 19 11:50:29 KST 2022]; root of context hierarchy
===> SamsungTV 객체 생성
SamsungTV --- 전원 켠다.
===> SonySpeaker 객체 생성
SonySpeaker --- 소리 올린다.
===> SonySpeaker 객체 생성
SonySpeaker --- 소리 내린다.
SamsungTV --- 전원 끈다.
INFO : org.springframework.context.support.GenericXmlApplicationContext - Closing org.springframework.context.support.GenericXmlApplicationContext@1c655221: startup date [Wed Jan 19 11:50:29 KST 2022]; root of context hierarchy

→ SonySpeaker 객체가 쓸데 없이 두번 생성되며, SonySpeaker에서 다른 speaker로 변경하고자 할 때, volumeUp(), volumeDown() 메소드 내 소스를 모두 수정해야 하는 번거로움이 있음 → 이를 "의존성 주입"으로 해결!!

 

 

 

+ Recent posts