๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Spring/Spring Quick Start

์ƒ์„ฑ์ž ์ธ์ ์…˜(Constructor Injection) ์ด์šฉํ•˜๊ธฐ

1. ๊ธฐ๋ณธ

์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” XML ์„ค์ • ํŒŒ์ผ์— ๋“ฑ๋ก๋œ ํด๋ž˜์Šค๋ฅผ ์ฐพ์•„์„œ ๊ฐ์ฒด ์ƒ์„ฑํ•  ๋•Œ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์—†๋Š” ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ง€๋Š” ์ƒ์„ฑ์ž๋Š” ๋ฐ”๋กœ ์ƒ์„ฑ์ž ์ธ์ ์…˜(Constructor Injection)์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฒ˜๋ฆฌํ•œ๋‹ค.

public class SamsungTV {
	private SonySpeaker speaker;
	private int price;

	public SamsungTV(){ }
	public SamsungTV(SonySpeaker speaker){
		this.speaker = speaker;
	}
	public SamsungTV(SonySpeaker speaker, int price){
		this.speaker = speaker;
		this.price = price;
	}
}
<bean id="tv" class="polymorphism.SamsungTV"> <!-- ์ƒ์„ฑ ์‹œ -->
	<constructor-arg ref="sony"></constructor-arg> <!-- ์ธ์ž๊ฐ€ id๊ฐ€ sony์ธ ์• ์•ผ -->
</bean>

<bean id="sony" class="polymorphism.SonySpeaker"></bean> <!-- ๋จผ์ € ์ƒ์„ฑ๋˜์–ด์•ผํ•จ -->
  • ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ bean ๋“ฑ๋ก๋œ ์ˆœ์„œ๋Œ€๋กœ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ, ๋ชจ๋“  ๊ฐ์ฒด๋Š” ๊ธฐ๋ณธ ์ƒ์„ฑ์ž ํ˜ธ์ถœ์„ ์›์น™์œผ๋กœ ํ•œ๋‹ค.

  • ๊ทธ๋Ÿฐ๋ฐ ์ด ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ์ž ์ธ์ ์…˜์œผ๋กœ ์˜์กด์„ฑ ์ฃผ์ž…๋  SonySpeaker๊ฐ€ ๋จผ์ € ์ƒ์„ฑ๋˜์—ˆ์œผ๋ฉฐ, SonySpeaker ๊ฐ์ฒด๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„๋“ค์ด๋Š” ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ–ˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

2. ๋‹ค์ค‘ ๋ณ€์ˆ˜ ๋งคํ•‘

์ดˆ๊ธฐํ™”ํ•ด์•ผ ํ•  ๋ฉค๋ฒ„๋ณ€์ˆ˜๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์ด๋ฉด <constructor-arg> ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐœ์ˆ˜๋งŒํผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค.

<bean id="tv" class="polymorphism.SamsungTV"> 
	<constructor-arg ref="sony"></constructor-arg> 
	<constructor-arg value="2700000"></constructor-arg>
</bean>

<bean id="sony" class="polymorphism.SonySpeaker"></bean>
  • value ์†์„ฑ: ์ „๋‹ฌํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ณ ์ •๋œ ๋ฌธ์ž์—ด์ด๋‚˜ ์ •์ˆ˜ ๊ฐ™์€ ๊ธฐ๋ณธํ˜• ๋ฐ์ดํ„ฐ

  • ref ์†์„ฑ: ์ „๋‹ฌํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋œ ๋‹ค๋ฅธ ๊ฐ์ฒด

index ์†์„ฑ์„ ์ด์šฉํ•˜๋ฉด ์–ด๋–ค ๊ฐ’์ด ๋ช‡ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋งคํ•‘ํ• ์ง€ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค.

<bean id="tv" class="polymorphism.SamsungTV"> 
	<constructor-arg index="0" ref="sony"></constructor-arg> 
	<constructor-arg index="1" value="2700000"></constructor-arg>
</bean>

<bean id="sony" class="polymorphism.SonySpeaker"></bean>

3. ์˜์กด ๊ด€๊ณ„ ๋ณ€๊ฒฝ

<bean id="tv" class="polymorphism.SamsungTV"> <!-- ์—ฌ๊ธฐ์„œ ํ‹ฐ๋น„ ์ข…๋ฅ˜๋ฅผ! -->
	<constructor-arg ref="sony"></constructor-arg> <!-- ์—ฌ๊ธฐ์„œ ์Šคํ”ผ์ปค ์ข…๋ฅ˜๋ฅผ! -->
	<constructor-arg value="2700000"></constructor-arg>
</bean>

<bean id="sony" class="polymorphism.SonySpeaker"></bean>
<bean id="apple" class="polymorphism.AppleSpeaker"></bean>

 

์–ด๋–ค ์ž๋ฐ” ์ฝ”๋“œ๋„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ ! ์Šคํ”„๋ง ์„ค์ • ํŒŒ์ผ๋งŒ์œผ๋กœ TV ์ข…๋ฅ˜๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๊ณ  ์Šคํ”ผ์ปค์˜ ์ข…๋ฅ˜๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.