๐ŸŠ Spring์˜ ์˜์กด์„ฑ ์ฃผ์ž…(DI)

Spring์—์„œ์˜ ์˜์กด์„ฑ ์ฃผ์ž… ๋ฐฉ๋ฒ•

Filed Injection(ํ•„๋“œ ์ฃผ์ž…)

	@Component
	public class Controller{
		@Autowired
		private Service servic
	
	...
	}

์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋˜๋Š” ์ด์œ 

- ๋‹จ์ผ์ฑ…์ž„์˜ ์›์น™ ์œ„๋ฐ˜ํ•˜๊ธฐ ์‰ฌ์›Œ์ง„๋‹ค.
- ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•˜๊ธฐ ์‰ฝ๊ธฐ ๋•Œ๋ฌธ์—, @Autoqwired์•„๋ž˜์— ๊ฐœ์ˆ˜ ์ œํ•œ์—†์ด ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.
- ์ด๋•Œ, ํ•˜๋‚˜์˜ class๊ฐ€ ๋งŽ์€ ์ฑ…์ž„์„ ๊ฐ–๊ณ , ์ˆœํ™˜์ฐธ์กฐ๊ฐ€ ์ด๋ค„์งˆ ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—
์˜์กด์„ฑ์ด ๋†’์•„์ ธ, ์‚ฌ์šฉ์„ ํ”ผํ•˜๋Š”๊ฒƒ์ด ์ข‹๋‹ค.

Setter Injection(์ˆ˜์ •์ž ์ฃผ์ž…)

	@Component
	public class Controller{
		private Service servic
	
		@Autowired
		private void setService(Service servic){
			this.service = service;
		}
	}

์„ ํƒ์ ์ธ ์˜์กด์„ฑ์„ ์‚ฌ์šฉํ• ๋•Œ ์œ ์šฉํ•˜๋‹ค. ์Šคํ”„๋ง 3.x ์—์„œ๋Š” ์ˆ˜์ •์ž ์ฃผ์ž…์„ ๊ถŒ์žฅํ•˜๊ณ ์žˆ๋‹ค.

๋ฌธ์ œ์ 

- ์ˆ˜์ •์ž ์ฃผ์ž…์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด, service๊ตฌํ˜„์ œ๋ฅผ ์ฃผ์ž…ํ•˜์ง€ ์•Š์•„๋„ 
controller๊ฐ์ฒด๋Š” ์ƒ์„œ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ๋•Œ๋ฌธ์— ๋„ํฌ์ธํ„ฐ์ต์…‰์…˜์ด ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค.
์ฃผ์ž…์ด ํ•„์š”ํ•œ ๊ฐ์ฒด๊ฐ€ ์ฃผ์ž…๋˜์ง€ ์•Š์•„๋„ ์–ผ๋งˆ๋“ ์ง€ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋Š”๊ฒƒ์ด ๋ฌธ์ œ๋‹ค.

Contructor Injection(์ƒ์„ฑ์ž ์ฃผ์ž…)

	@Component
	public class Service{
		private DAO dao;
	
		//์ƒ์„ฑ์ž
		@Autowired //์ƒ๋žต๊ฐ€๋Šฅ
		public Service(DAO dao){
			this.dao = dao;
		}
	}
	
	@Component
	public class Controller{
		private final Service servic = new Service( new DAO( ) );


		/* Spring์‚ฌ์šฉ์‹œ */
		
		private final Service service;
			
		// ์ƒ์„ฑ์ž ์ฃผ์ž…
		@Autowired
		public Controller(Service service) {
			this.service = service;
		}

	}

์ƒ์„ฑ์ž ์ฃผ์ž…์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์ด์œ 

  • Spring Framework ์—์„œ ๊ถŒ์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ, ํ•„์ˆ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š” ์˜์กด์„ฑ ์—†์ด๋Š” ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์ง€ ๋ชปํ•˜๋„๋ก ๊ฐ•์ œํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•˜๊ณ  ์žˆ๋‹ค.
  • Spring 4.3 ๋ฒ„์ „ ์ดํ›„๋ถ€ํ„ฐ๋Š” Class๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ DI Framework๋กœ ๋ถ€ํ„ฐ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋‹จ์ผ ์ƒ์„ฑ์ž์— ํ•œํ•ด์„œ @Autowired๋ฅผ ๋ถ™์ด์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
  • ํ•„๋“œ ์ฃผ์ž…๊ณผ ์ˆ˜์ •์ž ์ฃผ์ž…์€ final๋กœ ์„ ์–ธํ•  ์ˆ˜ ์—†์ง€๋งŒ, ์ƒ์„ฑ์ž ์ฃผ์ž…์€ final๋กœ ํ•„๋“œ ๊ฐ์ฒด๋ฅผ ์„ ์–ธํ•˜์—ฌ ๋Ÿฐํƒ€์ž„์— ๋ถˆ๋ณ€์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค.
  • ์•ž์„œ ์„ค๋ช…ํ•œ ํ•„๋“œ ์ฃผ์ž…์˜ ๋ชจ๋“  ๋‹จ์ ์„ ๋ณด์™„ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ƒ์„ฑ์ž ์ฃผ์ž…์˜ ๊ฒฝ์šฐ์—๋„ ์ˆœํ™˜์ฐธ์กฐ๊ฐ€ ๋˜‘๊ฐ™์ด ์ผ์–ด๋‚  ์ˆ˜ ์žˆ์ง€๋งŒ, ํ•„๋“œ, ์ˆ˜์ •์ž ์ฃผ์ž…๊ณผ ๋‹ค๋ฅด๊ฒŒ ๋Ÿฐํƒ€์ž„ ์‹œ๊ฐ€ ์•„๋‹ˆ๋ผ, ์ปดํŒŒ์ผ ์‹œ ๋ฏธ์—ฐ์— ์ฐพ์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค.