Dev-Kyuu
article thumbnail

 

์Šคํ”„๋ง์„ ํ•˜๋‹ค๋ณด๋ฉด ์ง„์งœ ๋„ˆ์–ด์–ด์–ด์–ด์–ด๋ฌด ๋„ˆ์–ด์–ด์–ด์–ด์–ด์–ด๋ฌด ๋ฌด์‹œํ•˜๊ณ ์‹ถ์ง€๋งŒ 

๋“ค์ˆจ์— 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)๋ผ๊ณ  ํ•œ๋‹ค.

 

 

 

 

 

 

profile

Dev-Kyuu

@kyuu_ng

ํฌ์ŠคํŒ…์ด ์ข‹์•˜๋‹ค๋ฉด "์ข‹์•„์š”โค๏ธ" ๋˜๋Š” "๊ตฌ๋…๐Ÿ‘๐Ÿป" ํ•ด์ฃผ์„ธ์š”!