๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
IT/Spring

[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] ์ธํ”„๋Ÿฐ ๊ฐ•์˜ ์ •๋ฆฌ(๊ฐ์ฒด ์ง€ํ–ฅ ์›๋ฆฌ ์ ์šฉ - IoC, DI, ๊ทธ๋ฆฌ๊ณ  ์ปจํ…Œ์ด๋„ˆ)

by YeonBu 2023. 10. 22.
728x90

/* ์ด ๊ธ€์€ ๊น€์˜ํ•œ๋‹˜์˜ ๊ฐ•์˜๋ฅผ ๋ณด๊ณ  ์ •๋ฆฌํ•˜๋ ค๊ณ  ์ž‘์„ฑํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.

   ๊ฐœ์ธ์ ์ธ ๊ณต๋ถ€๋ฅผ ์œ„ํ•ด ์˜ฌ๋ฆฌ๋Š” ๊ธ€์ด๋ฏ€๋กœ ์ค‘๊ฐ„ ์ค‘๊ฐ„ ์ฝ”๋“œ๋Š” ์ƒ๋žต๋˜์—ˆ์Šต๋‹ˆ๋‹ค. */

 

 

์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ - ์ธํ”„๋Ÿฐ | ๊ฐ•์˜

์Šคํ”„๋ง ์ž…๋ฌธ์ž๊ฐ€ ์˜ˆ์ œ๋ฅผ ๋งŒ๋“ค์–ด๊ฐ€๋ฉด์„œ ์Šคํ”„๋ง์˜ ํ•ต์‹ฌ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•˜๊ณ , ์Šคํ”„๋ง ๊ธฐ๋ณธ๊ธฐ๋ฅผ ํ™•์‹คํžˆ ๋‹ค์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค., ์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•˜๊ณ , ์„ฑ์žฅํ•˜๋Š” ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜์–ด๋ณด์„ธ์š”! ๐Ÿ“ข

www.inflearn.com

 

 

 

IoC, DI, ์ปจํ…Œ์ด๋„ˆ

 

 

1. ์ œ์–ด์˜ ์—ญ์ „ IoC(Inversion of Control)

 

โ—พ ๊ธฐ์กด ํ”„๋กœ๊ทธ๋žจ์—์„œ๋Š” ๊ตฌํ˜„ ๊ฐ์ฒด๊ฐ€ ์Šค์Šค๋กœ ํ•„์š”ํ•œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์—ฐ๊ฒฐํ•˜๊ณ , ์‹คํ–‰ํ–ˆ๋‹ค๋ฉด AppConfig๊ฐ€ ๋“ฑ์žฅํ•˜๊ณ  ๋‚˜์„œ ์ œ์–ด์˜ ํ๋ฆ„์— ๋Œ€ํ•œ ๊ถŒํ•œ์„ ๋ชจ๋‘ ๊ฐ€์ ธ๊ฐ€๊ฒŒ ๋œ๋‹ค.

โ—พ ์ด๋ ‡๋“ฏ ํ”„๋กœ๊ทธ๋žจ์˜ ์ œ์–ด ํ๋ฆ„์„ ์ง์ ‘ ์ œ์–ดํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์™ธ๋ถ€์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์„ `์ œ์–ด์˜ ์—ญ์ „` ์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

๐Ÿ’ก ์ž ๊น

: ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ฐจ์ด

 

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

 โ—พ ํ”„๋ ˆ์ž„์›Œํฌ : ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ์ œ์–ดํ•˜๊ณ  ๋Œ€์‹  ์‹คํ–‰ํ•˜๋ฉฐ ๊ฐœ๋ฐœ์ž๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ •์˜ํ•œ ๊ทœ์น™์„ ๋”ฐ๋ผ์•ผ ํ•œ๋‹ค.

 โ—พ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ : ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ , ํ•„์š”ํ•  ๋•Œ ํ•จ์ˆ˜๋‚˜ ํด๋ž˜์Šค๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ œ์–ด์˜ ํ๋ฆ„์„ ๋‹ด๋‹น.

 

์ƒ์‚ฐ์„ฑvs์œ ์—ฐ์„ฑ

 โ—พ ํ”„๋ ˆ์ž„์›Œํฌ : ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœํ•˜๋ฉด ๊ทœ์น™์„ ๋”ฐ๋ผ์•ผํ•˜์ง€๋งŒ ์ผ๋ฐ˜์ ์ธ ๊ตฌ์กฐ์™€ ํ‘œ์ค€์„ ์ค€์ˆ˜ํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœ.

 โ—พ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ : ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋” ๋งŽ์€ ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ๊ตฌ์กฐ์™€ ํ‘œ์ค€์„ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ •์˜ํ•ด์•ผ ํ•จ.

 

์˜ˆ์‹œ

 โ—พ ํ”„๋ ˆ์ž„์›Œํฌ : Spring, JUnit, Django, Angular, Express ...

 โ—พ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ : jQuery, React, Redux ...

 

 

 

2. ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…(Dependency Injection)

 

โ—พ ์˜์กด๊ด€๊ณ„๋Š” ์ •์ ์ธ ํด๋ž˜์Šค ์˜์กด๊ด€๊ณ„์™€ ์‹คํ–‰ ์‹œ์ ์— ๊ฒฐ์ •๋˜๋Š” ๋™์ ์ธ ๊ฐ์ฒด(์ธ์Šคํ„ด์Šค) ์˜์กด๊ด€๊ณ„๋ฅผ ๋ถ„๋ฆฌํ•ด์„œ ์ƒ๊ฐํ•ด์•ผ ๋จ.

 

โ—พ ์ •์ ์ธ ํด๋ž˜์Šค ์˜์กด๊ด€๊ณ„

ํ™”์‚ดํ‘œ ๋ฐฉํ–ฅ์œผ๋กœ ์˜์กดํ•œ๋‹ค๊ณ  ๋ณด๋ฉด ๋จ

: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  ํด๋ž˜์Šค๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” import ์ฝ”๋“œ๋งŒ ๋ณด๊ณ  ์˜์กด๊ด€๊ณ„๋ฅผ ์‰ฝ๊ฒŒ ํŒŒ์•…, ๋ถ„์„์ด ๊ฐ€๋Šฅํ•˜๋‹ค

: ์œ„์˜ ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ์„ ๋ณด๋ฉด `OrderServiceImpl`์€ `MemberRepository`, `DiscountPolicy`์— ์˜์กดํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Ÿฌํ•œ ํด๋ž˜์Šค ์˜์กด๊ด€๊ณ„ ๋งŒ์œผ๋กœ๋Š” ์‹ค์ œ ์–ด๋–ค ๊ฐ์ฒด๊ฐ€ `OrderServiceImpl`์— ์ฃผ์ž… ๋ ์ง€๋Š” ์•Œ ์ˆ˜ ์—†๋‹ค.

 

โ—พ ๋™์ ์ธ ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค ์˜์กด ๊ด€๊ณ„ 

: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ์‹œ์ (๋Ÿฐํƒ€์ž„)์— ์™ธ๋ถ€์—์„œ ์‹ค์ œ ๊ตฌํ˜„ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌํ•ด์„œ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„์˜ ์‹ค์ œ ์˜์กด๊ด€๊ณ„๊ฐ€ ์—ฐ๊ฒฐ ๋˜๋Š” ๊ฒƒ์„ `์˜์กด๊ด€๊ณ„ ์ฃผ์ž…` ์ด๋ผ๊ณ  ํ•œ๋‹ค

: ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๊ทธ ์ฐธ์กฐ๊ฐ’์„ ์ „๋‹ฌํ•ด์„œ ์—ฐ๊ฒฐ๋œ๋‹ค.

: ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์„ ์‚ฌ์šฉํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ , ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ˜ธ์ถœํ•˜๋Š” ๋Œ€์ƒ์˜ ํƒ€์ž… ์ธ์Šคํ„ด์Šค๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

: ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์„ ์‚ฌ์šฉํ•˜๋ฉด ์ •์ ์ธ ํด๋ž˜์Šค ์˜์กด๊ด€๊ณ„๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ , ๋™์ ์ธ ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค ์˜์กด๊ด€๊ณ„๋ฅผ ์‰ฝ๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

3. IoC ์ปจํ…Œ์ด๋„ˆ, DI ์ปจํ…Œ์ด๋„ˆ

 

โ—พ AppConfig์ฒ˜๋Ÿผ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋ฉด์„œ ์˜์กด๊ด€๊ณ„๋ฅผ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ๊ฒƒ์„ `IoC ์ปจํ…Œ์ด๋„ˆ`, `DI ์ปจํ…Œ์ด๋„ˆ`๋ผ๊ณ  ํ•œ๋‹ค.

โ—พ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์— ์ดˆ์ ์„ ๋งž์ถ”์–ด ์ตœ๊ทผ์—๋Š” ์ฃผ๋กœ DI ์ปจํ…Œ์ด๋„ˆ ๋ผ๊ณ  ํ•œ๋‹ค.

(ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹์ด๋ฆ„ ๊ฐ„์ง€๋‚œ๋‹ค๊ณ  ํ•˜์…จ์Œใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹)

 

 

 

 

๋ฐ˜์‘ํ˜•

'IT > Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] ์ธํ”„๋Ÿฐ ๊ฐ•์˜ ์ •๋ฆฌ(์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์™€ ์Šคํ”„๋ง ๋นˆ - ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ)  (0) 2023.10.25
[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] ์ธํ”„๋Ÿฐ ๊ฐ•์˜ ์ •๋ฆฌ(๊ฐ์ฒด ์ง€ํ–ฅ ์›๋ฆฌ ์ ์šฉ - ์Šคํ”„๋ง์œผ๋กœ ์ „ํ™˜ํ•˜๊ธฐ)  (0) 2023.10.25
[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] ์ธํ”„๋Ÿฐ ๊ฐ•์˜ ์ •๋ฆฌ(๊ฐ์ฒด ์ง€ํ–ฅ ์›๋ฆฌ ์ ์šฉ - ์ƒˆ๋กœ์šด ๊ตฌ์กฐ์™€ ํ• ์ธ ์ •์ฑ… ์ ์šฉ, ์ข‹์€ ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„์˜ 5๊ฐ€์ง€ ์›์น™ ์ ์šฉ)  (0) 2023.10.21
[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] ์ธํ”„๋Ÿฐ ๊ฐ•์˜ ์ •๋ฆฌ(๊ฐ์ฒด ์ง€ํ–ฅ ์›๋ฆฌ ์ ์šฉ - AppConfig ๋ฆฌํŒฉํ„ฐ๋ง)  (0) 2023.10.21
[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] ์ธํ”„๋Ÿฐ ๊ฐ•์˜ ์ •๋ฆฌ(๊ฐ์ฒด ์ง€ํ–ฅ ์›๋ฆฌ ์ ์šฉ - ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ)  (0) 2023.10.20