-
[Spring / SpringBoot] ์์กด์ฑ ์ฃผ์ ๊ณผ ์ ์ด์ ์ญ์ ๐ปProgramming/SpringBoot 2023. 10. 10. 17:36
๐ ์์กด์ฑ ์ฃผ์ (Dependency Injection)
- ์ด๋ค ๊ฐ์ฒด์ ๊ฐ๋ฐ์๊ฐ ์๋ "์คํ๋ง ์ปจํ ์ด๋"๊ฐ ๋ ๋ค๋ฅธ ๊ฐ์ฒด์ ์์กด์ฑ์ ๋งบ์ด์ฃผ๋ ํ์
- ํด๋์ค๊ฐ ์์กดํ๋ ๋ค๋ฅธ ํด๋์ค๋ค์ ์ธ๋ถ์์ ์ฃผ์ ์ํค๋ ๊ฒ์ด๋ค.
๐ ์์กด์ฑ ์ฃผ์ ์ ์ ์ฉํ์ง ์์ ๊ฒฝ์ฐ
- Person.java
public class Person { .. }
- CreateRoom.java
public class Room { private Person Person; public CreateRoom() { person = new Person(); } }
๐ ์ด ์ฝ๋์ ๋ฌธ์ ์
- ๋ ํด๋์ค๊ฐ ๊ฐํ๊ฒ ๊ฒฐํฉ๋์ด ์๋ค.
- ๊ฐํ ๊ฒฐํฉ์ด๋ ์ด๋ค ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด์ ๊ฐํ ์์กด์ฑ์ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ ์๊ธฐํ๋ค.
- ์๋ฅผ ๋ค์ด A ํด๋์ค์ ๋ด๋ถ์์ B๋ผ๋ ๊ฐ์ฒด๋ฅผ ์ง์ ์์ฑํ๋ค๋ฉด, B ๊ฐ์ฒด๋ฅผ C๊ฐ์ฒด๋ก ๋ฐ๊พธ๊ณ ์ถ์ ๊ฒฝ์ฐ์ A ํด๋์ค๋ ์์ ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๊ฐํ ๊ฒฐํฉ์ด๋ผ๊ณ ํ๋ค.
- ๊ฐ์ฒด๋ค ๊ฐ์ ๊ด๊ณ๊ฐ ์๋ ํด๋์ค ๊ฐ์ ๊ด๊ณ๊ฐ ๋งบ์ด์ง๋ค.
๐ ์์กด์ฑ ์ฃผ์ ์ ์ ์ฉํ ๊ฒฝ์ฐ
- Person.java
@Component public class Person { .. }
- @Component: ๊ฐ๋ฐ์๊ฐ ์ง์ ์์ฑํ Class๋ฅผ Bean์ผ๋ก ๋ฑ๋กํ๊ธฐ ์ํ Annotation. (ํ๋ง๋๋ก ๋๊ฐ ๋ ๋์ ์๋ฐ ๊ฐ์ฒด๋ฅผ ๊ด๋ฆฌํด์ค ๋ผ๋ฉฐ ๊ถํ์ ์ค ๊ฒ.) ์ฌ๊ธฐ์ Bean์ด๋ ์คํ๋ง ์ปจํ ์ด๋๊ฐ ๊ด๋ฆฌํ๋ ์๋ฐ ๊ฐ์ฒด๋ฅผ ์๋ฏธํ๋ค.
- Room.java
public class Room { @Autowired private Person person; }
๐ ์์กด์ฑ ์ฃผ์ ์ ๋ฆฌ
Spring์ ์์กด์ฑ ์ฃผ์ ์ ๋์์ฃผ๋ DI ์ปจํ ์ด๋๋ก์จ, ๊ฐํ๊ฒ ๊ฒฐํฉ๋ ํด๋์ค๋ค์ ๋ถ๋ฆฌํ๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ์คํ ์์ ์ ๊ฐ์ฒด๊ฐ์ ๊ด๊ณ๋ฅผ ๊ฒฐ์ ํด ์ค์ผ๋ก์จ, ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ณ ์ ์ฐ์ฑ์ ํ๋ณดํด์ค๋ค. (์์์ ํตํด์๋ ๊ฐ์ฒด๊ฐ์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ ์ ์๋๋ฐ, ์์๋ณด๋ค ํจ์ฌ ์ ์ฐํ๋ค.)
๋จ, ํ ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ฃผ์ ๋ฐ์ผ๋ ค๋ฉด ๋ ๊ฐ์ฒด ๋ชจ๋ ์คํ๋ง ์ปจํ ์ด๋์ Bean์ผ๋ก ๋ฑ๋กํด์ฃผ์ด์ผ ํ๋ค.
- ๋ ๊ฐ์ฒด ๊ฐ์ ๊ด๊ณ๋ผ๋ ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ
- ๋ ๊ฐ์ฒด๊ฐ์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถค(์ ์ง๋ณด์์ ์ฉ์ด)
- ๊ฐ์ฒด์ ์ ์ฐ์ฑ์ ๋์.
- ํ ์คํธ ์์ฑ์ ์ฉ์ดํ๊ฒ ํจ.
๐ ์ ์ด์ ์ญ์ (Inversion on Control)
- ์ ์ด์ ์ญ์ ์ ์์กด์ฑ ์ฃผ์ ์ ์์ ๊ฐ๋ ์ผ๋ก, ์คํ๋ง ์ปจํ ์ด๋๊ฐ ํ์์ ๋ฐ๋ผ ๊ฐ๋ฐ์ ๋์ Bean-๊ฐ์ฒด๋ค์ ๊ด๋ฆฌ ํด์ฃผ๋ ๊ฒ.
- ์๋๋ ๊ฐ๋ฐ์๊ฐ ์ง์ ๊ฐ์ฒด๋ฅผ ์ ์ดํ๋ค. (new๋ฅผ ํตํด ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ๊ฐ์ฒด๋ฅผ ์ญ์ ํด์ฃผ๋ ๋ฑ..)
- ํ์ง๋ง Spring์ xmlํ์ผ์ด๋ ์ด๋ ธํ ์ด์ ์ ์ด์ฉํ ๋ฐฉ์์ผ๋ก ๊ฐ์ฒด๋ฅผ ๋ฑ๋กํ๋ฉด, ์คํ๋ง ์ปจํ ์ด๋์์ Bean์ ์๋ช ์ฃผ๊ธฐ(์์ฑ -> ์์กด์ฑ ์ค์ -> ์ด๊ธฐํ -> ์๋ฉธ)์ ์ ๋ถ ๊ด๋ฆฌํด์ค๋ค.
์ฆ, ๊ฐ์ฒด๋ฅผ ์ ์ดํ๋ ๊ฒ์ด ๊ฐ๋ฐ์๊ฐ ์๋ ์คํ๋ง ์ปจํ ์ด๋์ด๋ฏ๋ก ์ด๊ฒ์ ์ ์ด์ ์ญ์ ์ด๋ผ๊ณ ํ๋ค.
๐ ์ ๋ฆฌ
Spring์์๋ ์ ์ด์ ์ญ์ ์ ํตํด ํ์์ ๋ฐ๋ผ ๊ฐ๋ฐ์ ๋์ ์คํ๋ง ์ปจํ ์ด๋๊ฐ ๊ฐ์ฒด๋ค์ ์ ์ดํ๋๋ก ํ๋ค.
์ ์ด์ ์ญ์ ์ ํตํด ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ ์ค์ด๊ณ , ์ ์ง ๋ณด์๋ฅผ ์ฉ์ดํ๊ฒ ํ ์ ์๋ค.
๐ References
'๐ปProgramming > SpringBoot' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ