์คํ๋ง์ ํ๋ค๋ณด๋ฉด ์ง์ง ๋์ด์ด์ด์ด์ด๋ฌด ๋์ด์ด์ด์ด์ด์ด๋ฌด ๋ฌด์ํ๊ณ ์ถ์ง๋ง
๋ค์จ์ IOC,, ๋ ์จ์ DI๊ฐ ๊ณ์์์์์์ ๋์์ ์ด๊ฑธ ์ด์ ๋์ด์ ๋ฌด์ํ๊ณ ์ง๋๊ฐ์ ์์ ์ ๋๋ก ๋์จ๋ค.
์ด๊ฑธ ๋ชจ๋ฅด๋ฉด ์คํ๋ง์ ๋ชจ๋ฅด๋์ !?!?!?!? ์ ๋ต์ Yes ์ธ๊ฐ๋ณด๋ค ใ ..
๊ทธ๋์ ์ฝ 2์ฃผ๊ฐ ์ธ๋ฉดํ์ง๋ง ์ค๋์ ํฐ๋ง์์ ๋จน๊ณ ์ง๋ฉดํ๊ธฐ๋กํ๋ค.
๋๋์ฒด IOC, DI๊ฐ ๋ญ๋ฐ ์ด๋ ๊ฒ ์ง์ฒ์ด๋๊ฑด๋ฐ ! ๐ง
๐ ๊ทธ๋์ DI, IOC๊ฐ ๋ญ๋ฐ?
Dependency Injection(์์กด์ฑ ์ฃผ์ )
ํ๋ก๊ทธ๋จ์ ๊ฐ์ฒด๋ค์ ์กฐ๋ฆฝ์ผ๋ก ๋ง๋ค์ด์ง๋๋ฐ, ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์ผ์ฒดํ ํ์๊ณผ ์กฐ๋ฆฝํ ํ์์ด ์๋ค.
์ผ์ฒดํ
: ๋ถํ(dependency) B๋ฅผ A์์ ์ง์ ์ ์ดํ์ฌ B์ ๊ฐ์ฒด๊ฐ ๋ณ๊ฒฝ๋๋ฉด, B์ ๊ฐ์ฒด๋ ๋ณ๊ฒฝ๋๊ฒ ๋๋ค.
: ๊ฒฐํฉ๋ ฅ์ด ๋์์ ํ๋์ ๊ฐ์ฒด๋ฅผ ๋ฐ๊พธ๋ฉด, ๊ทธ ๊ฐ์ฒด์ ์์กด์ฑ์ ๊ฐ์ง ๋ชจ๋ ๋ชจ๋๊น์ง ๋ณ๊ฒฝ๋์ด์ผ ํ๋ค๋ ๋ฌธ์ ์ ์ด ์ข ใด์ฌํ๋ค.
์กฐ๋ฆฝํ(DI)
: ๋ด๋ถ์์ ์์กด ๊ด๊ณ๋ฅผ ๊ฒฐ์ ํ๋๊ฒ์ด ์๋, ์ธ๋ถ์์ ์์กด๊ด๊ณ๊ฐ ๊ฒฐ์ ๋ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์์ ์ฌ์ฉํ๋๋ก ์กฐ๋ฆฝ(์ฃผ์ )ํ๋ค.
: ๊ฒฐํฉ๋ ฅ์ด ๋ฎ๊ธฐ๋๋ฌธ์ ๋ถํ(dependency)๋ฅผ ๋ฐ๊พธ๋๊ฒ ์ฉ์ดํ๋ค.
: ๋ถํ(dependency)์ ๋ง๋ค๊ณ ๐ ์์ฑ์๋ฅผ ํธ์ถํด์ ๐ ์ ์ฅํ๋ ๊ณผ์ ์ ์์กด์ฑ ์ฃผ์ ์ด๋ผ๊ณ ํจ
: ์กฐ๋ฆฝ์ ๊ณผ์ ์ ๊ฑฐ์ณ์ผํ๊ธฐ๋๋ฌธ์ ์กฐ๊ธ ๋ ๋ฒ๊ฑฐ๋ก์ธ ์ ์์
: ์กฐ๋ฆฝ(=์ฃผ์ )์ ๋ฐฉ๋ฒ์ Setter๋ฅผ ํตํ ์ฃผ์ ๊ณผ ์์ฑ์๋ฅผ ํตํฉ ์ฃผ์ ์ด ์์!
์ผ์ฒดํ๊ณผ ์กฐ๋ฆฝํ ํ๋ก๊ทธ๋จ์ ์ฐจ์ด๋ฅผ ๊ฐ๋จํ ๋งํ๋ฉด,
๋ง๋ค์ด์ ธ์๋ PC์ ๋ด๋ง๋๋ก ๋ง๋๋ ์กฐ๋ฆฝํ PC๋ฅผ ์๊ฐํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
๋ง๋ค์ด์๋ ์ผ์ฒดํ Pc๋ ์ฌ์ฉ์๊ฐ ์ด๋ ํ ๋ถํ์ผ๋ก ๋ง๋ค์๋์ง ๋ชฐ๋ผ๋ ๋์ง๋ง, ๋ถํ์ ์ฝ๊ฒ ๋ฐ๊ฟ ์ ์๋ค๋ ์ ์ด ์๊ณ
์กฐ๋ฆฝํ PC๋ ๋ด๊ฐ ์ํ๋ ์คํ์ผ๋ก ์ปดํจํฐ๋ฅผ ๋ง๋ค ์ ์์ง๋ง ๋์ ์กฐ๋ฆฝ์ ํด์ผํ๋ค๋ ๋จ์ ์ด ์๋๊ฑฐ๋ค.
Inversion of Control(์ ์ด์ ์ญ์ )
IOC๋ ํ๋ก๊ทธ๋จ์ ์ ์ด๊ถ์ ์ญ์ ์ํค๋ ๊ฐ๋ ์ธ๋ฐ, ํด๋น ๊ฐ๋ ์ ์ค๋ช ํ ๋๋ ํ ๋ฆฌ์ฐ๋ ์์น์ ๋ค์ด์ ์ค๋ช ์ ๋ง์ด ํ๋ ๊ฒ ๊ฐ๋ค.
ํ ๋ฆฌ์ฐ๋ ์์น์ "Don't call us. We'll call you." ์ด๋ ์ ์ด์ ์ญ์ ์ ๋ํ ๋น์ ์ ํํ์ผ๋ก,
๋ฐฐ์ฐ๋ค(๊ฐ์ฒด)์๊ฒ ์ํ์ฌ์์ ํ์ํ๋ฉด ์ฐ๋ฝํ ํ ๋ ์ฐ๋ฝํ์ง ๋ง๋ผ๋ ๋ป ์ด๋ผ๊ณ ํ๋ค.
์คํ๋ง์ ์ด์ฉํด์ ์ฝ๋๋ฅผ ์งค ๋ ์๊ฐ์ ํด๋ณด๋ฉด Controller, Service, Repository๋ฑ์ ์ฐ๋ฆฌ๊ฐ ์ง์ ๋ง๋ค๊ธฐ๋ ํ์ง๋ง
ํด๋น ๊ฐ์ฒด๋ค์ด ์ด๋ ์์ ์ ํธ์ถ๋๋์ง ์ด ๊ฐ์ฒด๋ค์ ๋ํ ์๋ช ์ฃผ๊ธฐ๋ฅผ ์ง์ ๊ด๋ฆฌํ์ง์๋๋ค.
ํ๋ ์์ํฌ๊ฐ ์๊ตฌํ๋๋๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ฉด ํ๋ ์์ํฌ๊ฐ ๊ฐ์ฒด๋ค์ ๊ฐ์ ธ๊ฐ์ ์ฌ์ฉํ๊ณ , ๋ฉ์๋๋ฅผ ํธ์ถํ๊ณ , ์์ฑ์ฃผ๊ธฐ๊ฐ ๋ง๋ฃ๋๋ฉด ์๋ฉธํ๋ ๊ฒ
์ด๊ฒ์ด ํ๋ก๊ทธ๋จ์ ์ ์ด๊ถ์ด ์ญ์ ๋ ๊ฒ์ด๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋ ์์ํฌ๋ฅผ ๋๊ณ ์ฐจ์ด์ ์ ์์๋ณธ๋ค๋ฉด,
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ ์ด ํ๋ฆ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ด์ด์ฃผ์ง ์๊ณ ํ์ํ ์์ ์ ์ ์ฌ ์ ์์ ๊ฐ์ ธ๋ค ์ฐ์ง๋ง
ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ ํ๋ ์์ํฌ๊ฐ ํ์์ฐ ์์ ์ ๊ฐ์ ธ๊ฐ ์ฌ์ฉํ๊ณ , ์๋ฉธ์์ผ์ ์ ์ด๊ถ์ด ํ๋ ์์ํฌ๋ก ์ญ์ ๋๋ค.
์ด๋ฌํ ๋ด์ฉ์ ํ๋ก๊ทธ๋จ์ ์ ์ด๊ถ์ด ์ญ์ ๋๋ค(IOC)๋ผ๊ณ ํ๋ค.
'๐ฝ Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Spring | @Transactional์ด ๋ญ๋ฐ (0) | 2022.12.15 |
---|---|
Spring | AOP๊ฐ ๋ญ๋ฐ (0) | 2022.12.15 |
Etc. 01 | Enterprise Application (0) | 2022.12.06 |
Spring | @Bean์ด ๋ญ๋ฐ (0) | 2022.12.05 |
Spring skill 01 | ์ธ์ฆ(Authentication)๊ณผ ์ธ๊ฐ(Authorization) (0) | 2022.12.04 |