Skip to content

Latest commit

ย 

History

History
81 lines (49 loc) ยท 1.89 KB

DI.md

File metadata and controls

81 lines (49 loc) ยท 1.89 KB

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

Spring Framework์˜ ํ•ต์‹ฌ ๊ฐœ๋… 3๊ฐ€์ง€

์†Œ์Šค ์ฝ”๋“œ์˜ ๋ณต์žก๋„๋ฅผ ์ค„์ด๊ณ , ํšจ์œจ์„ ๋†’์ด๊ณ , ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด Spring์—์„œ๋Š” ๋‹ค์Œ์˜ 3๊ฐ€์ง€๋ฅผ ์ด์šฉํ•œ๋‹ค.

  1. DI
  2. IoC Container
  3. AOP

DI์˜ ์ •์˜

์˜์กด์„ฑ ์ฃผ์ž…์ด๋ผ๋Š” ๋ง ๊ทธ๋Œ€๋กœ, ๊ฐ์ฒด ๊ฐ„ ์—ฐ๊ฒฐ์„ ์œ„ํ•ด ํ•œ ๊ฐ์ฒด ๋‚ด์—์„œ ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ์‹์ด ์•„๋‹Œ ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ด์šฉํ•˜๋Š” ๊ธฐ๋ฒ•

DI์˜ ์žฅ์ 

๊ฒฐํ•ฉ๋ ฅ์ด ๋†’์€ ์ฝ”๋“œ์˜ ๋ฌธ์ œ์ 

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ๊ฒฐํ•ฉ๋ ฅ์ด ๋†’์€ ์ฝ”๋“œ๋ผ๊ณ  ๋ณธ๋‹ค.

class A {
	
	B1 b1;

	public A() {
		b1 = new B1();
	}

}

class B1 {

}

class B2 {

}

๋งŒ์•ฝ B1์„ ๋‚˜์ค‘์— ๊ฐœ๋ฐœํ•œ B2๋กœ ๊ต์ฒดํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด B1 ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ชจ๋“  ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

๋”ฐ๋ผ์„œ ๊ฒฐํ•ฉ๋ ฅ์ด ๋†’์€ ์ฝ”๋“œ๋Š” ๋‹ค์Œ์˜ ๋ฌธ์ œ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

  1. ์†Œ์Šค ์ฝ”๋“œ์˜ ์ผ๋ถ€๋ฅผ ์ˆ˜์ •ํ•˜๊ณ ์ž ํ•  ๋•Œ, ์—ฐ๊ด€๋œ ๋ชจ๋“  ๋ถ€๋ถ„์„ ์ˆ˜์ •ํ•ด์•ผ ํ•œ๋‹ค. ์ด๋Š” ๋ณต์žกํ•˜๊ณ  ์œ„ํ—˜ํ•œ ์ผ์ด ๋  ๊ฒƒ์ด๋‹ค.
  2. ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ํ•„์š”๋กœ ํ•˜๋Š” ๋ชจ๋“  ํด๋ž˜์Šค ๋‚ด์—์„œ new๋ฅผ ํ†ตํ•ด ์ƒˆ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด, ๋„ˆ๋ฌด ๋งŽ์€ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ๋จ

DI๋ฅผ ํ†ตํ•œ ํ•ด๊ฒฐ

DI๋ฅผ ์ด์šฉํ•œ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

class A {
	
	B b;

	public A(B b) {
		this.b = b;
	}

}

interface B {

}

class B1 implements B {

}

class B2 implements B {

}

์ด์ œ B1์„ B2๋กœ ๊ต์ฒดํ•˜๊ณ ์ž ํ•œ๋‹ค ํ•ด๋„ A๋ฅผ ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ์—†๊ฒŒ ๋˜์—ˆ๋‹ค.

๋”ฐ๋ผ์„œ, DI๋Š” ์œ„์—์„œ ๋ช…์‹œํ•œ ๋ฌธ์ œ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•ด๊ฒฐํ•œ๋‹ค.

  1. ์†Œ์Šค ์ฝ”๋“œ์˜ ์ผ๋ถ€(B1)๋ฅผ ์ˆ˜์ •ํ•˜๊ณ ์ž ํ•˜๋ฉด ํ•ด๋‹น ๋ถ€๋ถ„๋งŒ ์ˆ˜์ •ํ•˜๋ฉด ๋œ๋‹ค.
  2. B ๊ด€๋ จ ์ธ์Šคํ„ด์Šค๋Š” ํ•œ ๋ฒˆ๋งŒ ์ƒ์„ฑ๋˜์–ด ์—ฌ๋Ÿฌ ๊ฐ์ฒด์— ์ฃผ์ž…๋˜์–ด ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค. (์‹ฑ๊ธ€ํ†ค ๊ฐ€๋Šฅ)