๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Today I Learned

DI, IoC

Today I Learn โœ๐Ÿผ 

 

  • ์˜ค๋Š˜ ํ•˜๋ฃจ ๊ฐ€์žฅ ์ธ์ƒ ๊นŠ์—ˆ๋˜ ๋ฐฐ์›€์—๋Š” ๋ญ๊ฐ€ ์žˆ์—ˆ์ง€?

๊ฐ•์˜๋ฅผ ๋“ค์œผ๋ฉด์„œ bean ๋“ฑ๋ก ์ด์•ผ๊ธฐ๊ฐ€ ๋‚˜์™”๋‹ค. ๋ฉด์ ‘ ์Šคํ„ฐ๋””์—์„œ๋„ ์ •ํ™•ํ•˜๊ฒŒ DI์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜์ง€ ๋ชปํ–ˆ๋‹ค. ๋ฌดํ•œ๋ฃจํ”„ ๋‹จํ†ก๋ฐฉ์—์„œ IoC์— ๋“ฑ๋ก๋œ ๋นˆ์— ๋Œ€ํ•œ ์งˆ๋ฌธ์ด ์žˆ์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ์•Œ์ง€ ๋ชปํ–ˆ๊ธฐ์— ์ด๋ฒˆ์— ์ •๋ฆฌ๋ฅผ ํ–ˆ๋‹ค. 

 

  • ๊ทธ ๋ฐฐ์›€๊นŒ์ง€ ๋‹ค๊ฐ€๊ฐ€๋Š”๋ฐ ์–ด๋–ค ์–ด๋ ค์›€์ด ์žˆ์—ˆ์ง€?

์ง€๊ธˆ๊นŒ์ง€ ์Šคํ”„๋ง ๊ฐ•์˜๋Š” ์—„์ฒญ๋‚˜๊ฒŒ ๋งŽ์ด ๋“ค์—ˆ๋‹ค. DI, IoC๋„ ์—ฌ๋Ÿฌ๋ฒˆ ๊ณต๋ถ€ํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์˜ค๋Š˜์ด ์œ ํŠœ๋ธŒ 5๋ถ„ ์š”์•ฝ์œผ๋กœ ์ธํ•ด ์ •๋ง ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

 

 

  • ๊ทธ ์–ด๋ ค์›€์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋‚˜์˜ ์‹œ๋„๋“ค์€ ๋ฌด์—‡์ด ์žˆ์—ˆ์ง€?

๊ฐœ๋ฐœ ๊ณต๋ถ€ํ•  ๋•Œ๋งˆ๋‹ค DI, IoC ๊ณต๋ถ€๋ฅผ ํ–ˆ๋‹ค.

 

 

  • ๊ทธ ๊ณผ์ •์—์„œ ๋‚˜๋Š” ๋ฌด์—‡์„ ๊นจ๋‹ฌ์•˜๊ณ , ์–ด๋–ค ๊ฐ์ •/์ƒ๊ฐ์ด ๋“ค์—ˆ์—ˆ์ง€?

๊ฐœ๋ฐœ์€ ๊ธฐ๋ณธ์„ ์•Œ์•„์•ผ ํ•œ๋‹ค. ๊ธฐ๋ณธ์„ ์•Œ๋ฉด ๋ชจ๋“ ๊ฒŒ ์–ด๋–ป๊ฒŒ ๋Œ์•„๊ฐ€๋Š”์ง€ ์„ธ์ƒ์ด ๋ณด์ด๊ฒŒ ๋œ๋‹ค.

 

 

  • ์ด ์ƒํƒœ์—์„œ ์ดํ›„ ๋” ๋‚˜์€ ๋‚ด๊ฐ€ ๋˜๋ ค๋ฉด ๋ฌด์—‡์„ ๋ณด์™„ํ•˜์ง€?

๊ธฐ์ˆ  CS ๋ฉด์ ‘ ์Šคํ„ฐ๋””๋Š” ๊พธ์ค€ํžˆ ํ•ด์•ผ๊ฒ ๋‹ค. ์งˆ๋ฌธ์„ ๋ฐ›์•˜์„ ๋•Œ '๋‹ต๋ณ€์„ ํ•˜์ง€ ๋ชปํ•œ๋‹ค == ๋ชจ๋ฅธ๋‹ค'


์˜์กด์„ฑ ์ฃผ์ž…์ด๋ž€?

Dependency Injection

 

ioc์ปจํ…Œ์ด๋„ˆ == ๋งค๊ฐœ์ฒด

๋ชจ๋“  ๋ชจ๋“ˆ์„ ๋“ฑ๋กํ•œ๋‹ค.

 

์‚ฌ์šฉ์ฒ˜์—์„œ ์ง์ ‘ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ

ํ•„์š”ํ• ๋•Œ ioc ์ปจํ…Œ์ด๋„ˆ๊ฐ€ 

์˜์กด์„ฑ์ด ์žˆ๋Š” ๋ชจ๋“ˆ์„ ์ฃผ์ž…ํ•ด์ฃผ๋Š” ๋ฐฉ์‹

 

๊ฐœ๋ฐœ์ž๊ฐ€ ์ปจํŠธ๋กคํ•˜์ง€ ์•Š๊ณ  ioc ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ปจํŠธ๋กค์„ ํ•˜๋‹ˆ

์ œ์–ด์˜ ์—ญ์ „ ํ˜„์ƒ์ด ๋ฐœ์ƒํ•œ๋‹ค.

 


'์˜์กดํ•œ๋‹ค' ๋œป ๋ฌด์—‡์ธ๊ฐ€?

 

์œ ํŠœ๋ธŒ: 5๋ถ„๊ฐœ๋ฐœ์ง€์‹ ์ด๋ฏธ์ง€

 

ํด๋ž˜์ŠคA๋Š” B์— ์˜์กดํ•œ๋‹ค.

ํด๋ž˜์ŠคA ์ฝ”๋“œ์—๋Š” B๋ฅผ ์˜์กดํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค.

ํด๋ž˜์ŠคA ๋Š” ์ง์ ‘ ํด๋ž˜์ŠคB๋ฅผ ์ƒ์„ฑํ•ด์„œ ์“ฐ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์™ธ๋ถ€์—์„œ ํด๋ž˜์ŠคB๋ฅผ ์ƒ์„ฑํ•ด์„œ ์ฃผ์ž…ํ•ด์ค€๋‹ค.

 


์ œ์–ด์˜ ์—ญ์ „

Inversion of Control

์œ ํŠœ๋ธŒ: 5๋ถ„๊ฐœ๋ฐœ์ง€์‹ ์ด๋ฏธ์ง€

๊ธฐ์กด์—๋Š” ์˜์กด์„ฑ์„ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ปจํŠธ๋กค ํ–ˆ๋‹ค.

 

ioc๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์˜์กด์„ฑ์ด ์—ญ์ „๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— == ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์˜์กด์„ฑ์„ ์ œ์–ดํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

ํด๋ž˜์ŠคA๊ฐ€ ํด๋ž˜์ŠคB๋ฅผ ์ง์ ‘ ์ƒ์„ฑ, ์ฐธ์กฐํ•จ

์ค‘๊ฐ„์— ๋งค๊ฐœ์ฒด๋ฅผ ๋‘๊ณ  

๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์˜์กด์„ฑ์„ ์ œ์–ดํ•˜๋˜ ๊ฒƒ์„

๋งค๊ฐœ์ฒด์—๊ฒŒ ์ œ์–ด๊ถŒ์„ ๋นผ์•—๊ฒจ์„œ ๋” ์ด์ƒ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ œ์–ด์˜ ์ฃผ์ฒด๊ฐ€ ์•„๋‹ˆ๋‹ค.

 

์ด ๋งค๊ฐœ์ฒด๊ฐ€ ioc ์ปจํ…Œ์ด๋„ˆ์ด๋‹ค.

 


IOC ์ปจํ…Œ์ด๋„ˆ?

์˜์กด์„ฑ ๊ด€๋ฆฌ

์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑ ํ›„ ์ฃผ์ž…

๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œ

ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๋‹ด๋‹นํ•œ๋‹ค.

 


DI๋Š” ์–ด๋–ป๊ฒŒ ํ•˜๋Š”๊ฐ€?

์ด๋ ‡๊ฒŒ new๋กœ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ 

์ƒ์„ฑ์ž, ์–ด๋…ธํ…Œ์ด์…˜ ์ฒ˜๋Ÿผ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

 


DI ์žฅ์ 

1. ์˜์กด์„ฑ์ด ์ค„์–ด๋“ ๋‹ค

์‚ฌ์šฉํ•˜๋Š” ํด๋ž˜์Šค์—์„œ ์ง์ ‘ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ioc ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ†ตํ•ด์„œ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

2. ๋ณ€ํ™”์— ๊ฐ•ํ•˜๋‹ค

์˜์กดํ•˜๊ณ  ์žˆ๋Š” ๋ชจ๋“ˆ์˜ ๋ผ์ดํ”„ ์‚ฌ์ดํด์„ ์ „ํ˜€ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์˜์กดํ•˜๊ณ  ์žˆ๋Š” ๋ชจ๋“ˆ์ด ๋ณ€๊ฒฝ๋˜์–ด๋„ ์‹ ๊ฒฝ์“ธ ํ•„์š” ์—†๋‹ค.

 

3. ๋”ฐ๋ผ์„œ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•จ

 

4. ์ฝ”๋“œ ์ค„์–ด๋“ฆ

์ƒ์„ฑ, ์‚ญ์ œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ ์•ˆํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ค„์–ด๋“ฆ

 

5. ํ…Œ์ŠคํŠธ ํŽธํ•จ

์™ธ๋ถ€์—์„œ ์ฃผ์ž… ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์—, ์ž์‹ ์ด ์›ํ•˜๋Š” ๊ฐ์ฒด ์ƒํƒœ๋ฅผ ๋งŒ๋“ค์–ด์„œ ์ฃผ์ž…ํ•˜๋ฉด ๋œ๋‹ค.

'Today I Learned' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

ํ”„๋กœ์ ํŠธ ์‹œ์ž‘  (0) 2024.08.23
API ์„ค๊ณ„ ์›์น™  (0) 2024.08.20
Redis, Spring  (0) 2024.08.07
Spring Security? OAuth2 ?  (0) 2024.08.06
MSA, Spring Cloud  (0) 2024.08.06