ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๋ฐ˜์‘ํ˜•

Spring DI / IoC

java์˜ Class์ƒ์†, Interface๋ฅผ ์ด์šฉํ•œ ์ถ”์ƒํ™”๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๊ฐœ๋ฐœ๋ฐฉ๋ฒ•์œผ๋กœ

Spring์€ DI/IoC๋ฅผ ๊ฐ•๋ ฅํ•˜๊ฒŒ ์ง€์›ํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค.

  - Ioc (Invension of Control) ์ œ์–ด์˜ ์—ญ์ „

  ํ”„๋กœ๊ทธ๋žจ์„ ์ œ์–ดํ•˜๋Š” ํŒจํ„ด ์ค‘ ํ•˜๋‚˜๋กœ ๋ฏธ๋ฆฌ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด ๋†“๊ณ  ๊บผ๋‚ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹

  - DI (Dependency Injection) ์˜์กด์„ฑ ์ฃผ์ž…

  ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ๋งŒ๋“ค์–ด๋‘” ๊ฐ์ข… ํด๋ž˜์Šค(bean)๋“ค์€ ์„œ๋กœ ์˜์กด์ ์ด๋‹ค.

  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์„œ ์™ธ๋ถ€์—์„œ ๋”ฐ๋กœ ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•

 

DI๋Š” IoCํŒจํ„ด์˜ ๊ตฌํ˜„๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋กœ DI์— ๋”ฐ๋ผ ํ”„๋กœ๊ทธ๋žจ์˜ ํ๋ฆ„์ด ์™„์ „ํžˆ ๋ณ€๊ฒฝ๋œ๋‹ค.

์Šคํ”„๋ง์€ DI๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋งŽ์€ ํ”„๋ ˆ์ž„ ์›Œํฌ ๋ชจ๋“ˆ๋“ค์ด ๋งŒ๋“ค์–ด์ง„๋‹ค.

 

Spring์€ DI Framework ํ˜น์€ IoC Framework๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

 

 

์Šคํ”„๋ง์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ณธ ๊ฐœ๋… - ํด๋ž˜์Šค์•ˆ์˜ ํด๋ž˜์Šค

 

์˜์กด์ฃผ์ž…ํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ• (xml ํŒŒ์ผ์„ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง„๋‹ค)

1. ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•œ ์˜์กด์„ฑ ์ฃผ์ž…

public Hotel(Chef chef) {
	this.chef = chef;
}

<bean id="hotel" class="day01.ex01.construct.Hotel">
	<constructor-arg ref="chef" />
</bean>

id="๊ฐ์ฒด์ด๋ฆ„", class="ํด๋ž˜์Šค๊ฐ€ ์œ„์น˜ํ•  ๊ฒฝ๋กœ" 

์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•œ ์˜์กด๊ฐ์ฒด ์ฃผ์ž…

 

2. setter๋ฅผ ํ†ตํ•œ ์˜์กด์„ฑ ์ฃผ์ž…

public void setUrl(String url) {
		this.url = url;
}

public void setUid(String uid) {
	this.uid = uid;
}

public void setUpw(String upw) {
	this.upw = upw;
}

<bean id="DBdev1" class="day01.ex03.setter.DatabaseDev">
	<property name="url" value="jdbc:mysql://localhost:3306/test/"></property>
	<property name="uid" value="spring"></property>
	<property name="upw" value="spring"></property>
</bean>

name="์„ธํ„ฐ์˜์ด๋ฆ„", value="๋‚ด๊ฐ€ ๋„ฃ๊ณ ์‹ถ์€ ๊ฐ’", ref="๊ฐ์ฒด"

 

setter๋ฅผ ํ†ตํ•œ ์˜์กด๊ฐ์ฒด ์ฃผ์ž…

 

๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€