๐ฉ ์์กด์ฑ ์ฃผ์ ์ ๊ฐ๋ ๊ณผ ํ์์ฑ
[ ์์กด์ฑ ์ฃผ์ ์ด๋โ]
Spring ํ๋ ์์ํฌ๋ 3๊ฐ์ง ํต์ฌ ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ์ ์ง์ํ๊ณ ์๋ค. ๊ทธ ์ค ํ๋๊ฐ ์์กด์ฑ ์ฃผ์ (Dependency Injection, DI) ์ด๋ค. DI๋ ์ธ๋ถ์์ ๋ ๊ฐ์ฒด ๊ฐ์ ๊ด๊ณ๋ฅผ ๊ฒฐ์ ํด์ฃผ๋ ๋์์ธ ํจํด์ผ๋ก, ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ด์ ๋ฌ์ ๊ธ๋์ค ๋ ๋ฒจ์์๋ ์์กด๊ด๊ณ๊ฐ ๊ณ ์ ๋์ง ์๋๋ก ํ๊ณ ๋ฐํ์ ์์ ๊ด๊ณ๋ฅผ ๋์ ์ผ๋ก ์ฃผ์ ํ์ฌ ์ ์ฐ์ฑ์ ํ๋ณดํ๊ณ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ ์ ์๊ฒ ํด์ค๋ค.
public class testController{
private testService service;
}
์์ ์ฝ๋๋ฅผ ๋ณด๋ฉด testController ๊ฐ์ฒด๊ฐ testService ๊ฐ์ฒด์ ์์กด์ฑ์ด ์๋ค๊ณ ํ๋ค.
์ด ๋์ ๊ด๊ณ๋ฅผ ๋งบ์ด์ฃผ๋ ๊ฒ์ ์์กด์ฑ ์ฃผ์ ์ด๋ผ๊ณ ํ๋ฉฐ ๋ค์ํ ์ฃผ์ ๋ฐฉ๋ฒ์ด ์กด์ฌํ๋ค.
1. ์์ฑ์ ์ฃผ์
2. ํ๋ ์ฃผ์
3. ์์ ์ ์ฃผ์
์ด์ ๊ฐ์ ์ฌ๋ฌ๊ฐ์ง ์์กด์ฑ ์ฃผ์ ๋ฐฉ๋ฒ์ด ์กด์ฌํ๋ค. ์ด ๊ธ์์๋ ์์ฑ์ ์ฃผ์ ์ ์์ฃผ๋ก ๋ค๋ฃฐ ๊ฒ์ด๋ค.
๊ทธ ์ด์ ๋ ํ๋ ์ฃผ์ ์ด๋ ์์ ์ ์ฃผ์ ์ ๋งค์ฐ ํฐ ๋จ์ ์ด ์กด์ฌํ๊ธฐ ๋๋ฌธ์ด๋ค. ์์ธํ ๋ด์ฉ์ ๋ค์ ๊ธ์์ ์ค๋ช ํ๋๋ก ํ๊ฒ ๋ค.
[ ์์กด์ฑ ์ฃผ์ (Dependency Injection) ์ด ํ์ํ ์ด์ ]
์์กด์ฑ ์ฃผ์ ์ด ํ์ํ ๊ฐ์ฅ ํฐ ์ด์ ๋ ์ ์ง๋ณด์ ์ธก๋ฉด์์ ํจ์จ์ ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์๋ฅผ ๋ค์ด์ ๋ณด๋ฉด ์ฝ๋ค.
public class Car{
private ATire tire;
public Car(){
this.tire = new ATire();
}
ATire๋ฅผ ์ฅ์ฐฉํ์ฌ ํ๋งคํ๋ Car ํด๋์ค๊ฐ ์๋ค๊ณ ๊ฐ์ ํ์.
์์ ์์๋ ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ์ ์ด ์กด์ฌํ๋ค.
- ๋ ํด๋์ค๊ฐ ๊ฐํ๊ฒ ๊ฒฐํฉ๋์ด ์๋ค.
- ๊ฐ์ฒด๋ค ๊ฐ์ ๊ด๊ณ๊ฐ ์๋๋ผ ํด๋์ค ๊ฐ์ ๊ด๊ณ๊ฐ ๋งบ์ด์ง๋ค.
1. ๋ ํด๋์ค๊ฐ ๊ฐํ๊ฒ ๊ฒฐํฉ๋์ด ์๋ค.
์์ Car ํด๋์ค๋ ATire์ ๊ฐํ๊ฒ ๊ฒฐํฉ๋์ด ์๋ค๋ ๋ฌธ์ ์ ์ด ์๋ค. ๋ ํด๋์ค๊ฐ ๊ฐํ๊ฒ ๊ฒฐํฉ๋์ด ์์ ๋ ๋ค๋ฅธ Tire๋ก ๋ฐ๊พธ๊ณ ์ถ๋ค๋ฉด ์์ฑ์์ ๋ณ๊ฒฝ์ด ํ์ํ๋ค. ์ด๋ ์ ์ฐ์ฑ์ด ๋จ์ด์ง๊ณ ํ์ด์ด๋ฅผ ๊ต์ฒดํ ๋๋ง๋ค ์์ฑ์๋ฅผ ๋ณ๊ฒฝํด์ฃผ์ด์ผ ํ๋ค. ์ด๋ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์๋ ์ด๊ธ๋๊ณ ์ข์ง ์์ ํ๋ก๊ทธ๋๋ฐ์ด๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์์์ ๋ ์ฌ๋ฆด ์ ์์ง๋ง ์์์ ์ ์ฝ์ด ๋ง๊ณ ํ์ฅ์ฑ์ด ๋จ์ด์ง๋ฏ๋ก ํผํ๋ ๊ฒ์ด ์ข๋ค.
2. ๊ฐ์ฒด๋ค ๊ฐ์ ๊ด๊ณ๊ฐ ์๋๋ผ ํด๋์ค ๊ฐ์ ๊ด๊ณ๊ฐ ๋งบ์ด์ง๋ค.
์ฌ๋ฐ๋ฅธ ๊ฐ์ฒด์งํฅ ์ค๊ณ๋ฅผ ํ๊ธฐ ์ํด์๋ ๊ฐ์ฒด๋ค ๊ฐ์ ๊ด๊ณ๊ฐ ๋งบ์ด์ ธ์ผ ํ๋ค. ํ์ง๋ง ์์ ์์๋ ํด๋์ค๋ค ๊ฐ์ ๊ด๊ณ๋ก ๋งบ์ด์ ธ ์๋ค. ๊ฐ์ฒด๋ค ๊ฐ์ ๊ด๊ณ๊ฐ ๋งบ์ด์ก๋ค๋ฉด ๋ค๋ฅธ ๊ฐ์ฒด์ ๊ตฌ์ฒด ํด๋์ค(ATire ์ธ์ง BTire์ธ์ง)๋ฅผ ์์ง ๋ชปํ๋๋ผ๋ ์ธํฐํ์ด์ค์ ํ์ (Tire)์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
์ด์ ๊ฐ์ ๋ฌธ์ ์ ๋ค์ด ์ผ์ด๋๋ ๊ฒ์ Spring์์๋ DI๋ฅผ ์ ์ฉํ์ฌ ํด๊ฒฐํ์๋ค.
ํ์ฌ์ ์์๋ก๋ ๋ณ๋ก ๋ฌธ์ ์ ์ด ๋ณด์ด์ง ์์์๋ ์๋ค. ๋ ๋ํ ์ฒ์์ ์์กด์ฑ ์ฃผ์ ์ ๊ตณ์ด ํด์ผํ๋ ํ์์ฑ์ ๋๋ผ์ง ๋ชปํ๊ณ ์ดํด๊ฐ ์ ๋์ง ์์๋ค. ํ์ง๋ง ์ดํ๋ฆฌ์ผ์ด์ ์ด ์ปค์ง๊ณ ํ๋๊ฐ ๋ง์์ง๋ค๋ฉด ๋ง์ด ๋ฌ๋ผ์ง๋ค. ํ์ด์ด๋ฅผ ๋งค์ผ ๊ต์ฒดํ๋ค๊ณ ํ๋ฉด ๋งค๋ฒ ์ ์ฝ๋๋ฅผ ๋ฐ๊ฟ์ฃผ์ด์ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ํ์ด์ด ๋ฟ๋ง ์๋๋ผ ๋ค๋ฅธ ๋ถํ๋ค๋ ์กด์ฌํ๊ณ ๊ทธ ๋ถํ์ ๋งค๋ฒ ๋ค๋ฅธ ํ์ฌ ์ ํ์ ์ฌ์ฉํ๋ค๋ฉด ์ ์ง๋ณด์๋ฅผ ํ๊ธฐ ๋งค์ฐ ์ด๋ ค์์ง๋ค. ์ด๋ฌํ ์ด์ ๋ค ๋๋ฌธ์ Spring์์๋ DI๋ฅผ ์ง์ํ๊ณ ์ด๋ฅผ ์ฐ๋ฆฌ๋ ์ฌ์ฉํด์ผ ํ๋ ๊ฒ์ด๋ค.
๊ฐ๋จํ ๋ค์ ๋งํ๋ฉด ์์กด๊ด๊ณ๋ ๊ฐ์ฒด๋ค ๊ฐ์ ๊ด๊ณ๋ก ์ด๋ฃจ์ด์ ธ์ผํ๊ณ ํด๋์ค๋ค ๊ฐ์ ๊ด๊ณ๋ก ์ด๋ฃจ์ด์ง๋ฉด ์๋๋ค. ์์กด์ฑ ์ฃผ์ ์ ํจ์ผ๋ก์ ๋ด๊ฐ ์ ํํ ์ ์๋ ๊ฐ์ฒด์ ํญ์ด ๋์ด์ง๋ค๊ณ ๋ณด๋ฉด๋๋ค.
'๐ป BackEnd > ๐ข Spring | SpringBoot' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐ข [Spring] Eclipse ์คํ๋ง(Spring) ํ๋ก์ ํธ ์์ฑ (0) | 2023.07.10 |
---|---|
๐ข [Spring] ์คํ๋ง ์์กด์ฑ ์ฃผ์ (DI) - [2] (0) | 2023.07.07 |
๐ข [Spring] ์คํ๋ง ํ์ผ ์ ๋ก๋ (0) | 2023.06.30 |
๐ข [Spring] ์คํ๋ง ์ค์ ํ์ผ (XML) (0) | 2023.06.28 |
๐ข [Spring] ์คํ๋ง ๋น(Bean) ์ด๋? (0) | 2023.06.23 |