๐Ÿค”์˜์กด์„ฑ(Dependency)์˜ ์ •์˜์™€ ์œ„ํ—˜์„ฑ

Daehyeon Yunยท2023๋…„ 8์›” 1์ผ

Spring boot

๋ชฉ๋ก ๋ณด๊ธฐ
2/8
post-thumbnail

์˜์กด์„ฑ(Dependency)๋ž€?

Dependency(๋˜๋Š” ์˜์กด์„ฑ)์€ ์ฝ”๋“œ์—์„œ ๋‘ ๋ชจ๋“ˆ๊ฐ„์˜ ์—ฐ๊ฒฐ์ด๋‹ค.
๊ฐ์ฒด์ง€ํ–ฅ์–ธ์–ด์—์„œ๋Š” ๋‘ ํด๋ž˜์Šค๊ฐ„์˜ ๊ด€๊ณ„๋ผ๊ณ  ๋งํ•œ๋‹ค.
์ผ๋ฐ˜์ ์œผ๋กœ ๋‘˜ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋‹ค๋ฅธ ํ•˜๋‚˜๋ฅผ ์–ด๋– ํ•œ ์šฉ๋„๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.


์˜์กด์„ฑ(Dependency)๊ฐ€ ์œ„ํ—˜ํ•œ ์ด์œ 

๋‘ ๋ชจ๋“ˆ์ด ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์–ด ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ์ด ๋ฐ”๋€Œ๋ฉด ์˜์กดํ•œ ๋‹ค๋ฅธ ๋ชจ๋“ˆ๊นŒ์ง€ ๋ณ€๊ฒฝ์ด ์ด๋ฃจ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ์˜์กด์„ฑ(Dependency)๋Š” ์œ„ํ—˜ํ•˜๋‹ค.

๐Ÿค” ๋˜ํ•œ, ํ•œ ๋ชจ๋“ˆ์—์„œ ๋‹ค๋ฅธ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ—€์„ ๋•Œ ํ…Œ์ŠคํŠธ๋ฅผ ํ•œ๋‹ค ๊ฐ€์ •์„ ํ•˜๋ฉด ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ–ˆ์„ ๋•Œ ํ˜„์žฌ ๋ชจ๋“ˆ์—์„œ์˜ ์‹คํŒจ์ธ์ง€, ์˜์กดํ•˜๋Š” ๋ชจ๋“ˆ์˜ ์‹คํŒจ์ธ์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค.


์œ„ํ—˜ํ•œ Dependency๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•

์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection)์„ ์‚ฌ์šฉํ•œ๋‹ค.
'new'๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“ˆ ๋‚ด์—์„œ ํŠน์ • ๋ชจ๋“ˆ์„ ์ดˆ๊ธฐํ™”ํ•˜์ง€ ์•Š์œผ๋ ค๋ฉด ๊ฐ์ฒด ์ƒ์„ฑ์„ ๋‹ค๋ฅธ ๊ณณ์—์„œ ํ•œ ๋’ค, ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋ฉด ํ•ด๊ฒฐ๋œ๋‹ค.

์˜์กด์„ฑ ์ฃผ์ž…์€ IoC(Inversion of Control)๊ฐœ๋…์„ ๋ฐ”ํƒ•์œผ๋กœ ์ด๋ฃจ์–ด์ง€๊ธฐ์— ํด๋ž˜์Šค๊ฐ€ ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ์˜์กด์„ฑ(Dependency)๋ฅผ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค.

Javaํด๋ž˜์Šค๊ฐ€ new์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด ๋‹ค๋ฅธ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ํ•ด๋‹น ํด๋ž˜์Šค์™€ ๋…๋ฆฝ์ ์œผ๋กœ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ์ด๋ฅผ ํ•˜๋“œ์ข…์†์„ฑ์ด๋ผ๊ณ  ํ•œ๋‹ค.

ํด๋ž˜์Šค ์™ธ๋ถ€์—์„œ ์ข…์†์„ฑ์„ ์ œ๊ณตํ•œ๋‹ค๋ฉด?

  1. ํด๋ž˜์Šค๋ฅผ ์žฌ์‚ฌ์šฉ ํ•  ๊ฐ€๋Šฅ์„ฑ์„ ๋†’์ด๊ณ , ๋‹ค๋ฅธ ํด๋ž˜์Šค์™€ ๋…๋ฆฝ์ ์œผ๋กœ ํด๋ž˜์Šค๋ฅผ ํ…Œ์ŠคํŠธ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ด์ ์ด ์žˆ๋‹ค.
  2. ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์˜ ํŠน์ • ๊ตฌํ˜„์ด ์•„๋‹Œ, ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š”๋ฐ ๋งค์šฐ ํšจ๊ณผ์ ์ด๋‹ค.

์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection)์˜ ๋ฐฉ๋ฒ•

  1. ์ƒ์„ฑ์ž๋ฅผ ์‚ฝ์ž…(Contructor)
  2. ๋ฉค๋ฒ„ ๋ณ€์ˆ˜(ํ•„๋“œ) ์‚ฝ์ž…(Field)
  3. ๋ฉ”์†Œ๋“œ(ํŒŒ๋ผ๋ฏธํ„ฐ) ์‚ฝ์ž…(Method)

JSR330์— ๋”ฐ๋ฅธ ์ข…์†์„ฑ ์ฃผ์ž… ์ˆœ์„œ

๐Ÿ’กSpring 3.0์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด JSR-330 ์–ด๋…ธํ…Œ์ด์…˜(์˜์กด์„ฑ ์—ญ์ „)์˜ ์ง€์›์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ•ด๋‹น ์–ด๋…ธํ…Œ์ด์…˜๋“ค์€ ์Šคํ”„๋ง ์–ด๋…ธํ…Œ์ด์…˜๋“ค๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ์Šค์บ”๋œ๋‹ค. ํ•ด๋‹น ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํด๋ž˜์Šค path์— ๊ด€๋ จ jar ํŒŒ์ผ๋“ค์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.

  1. ์ƒ์„ฑ์ž(Constructor)
  2. ๋ฉค๋ฒ„ ๋ณ€์ˆ˜(Field)
  3. ๋ฉ”์†Œ๋“œ(Method)

@Inject๋กœ ์ฃผ์„์ฒ˜๋ฆฌ๋œ ๋ฉ”์†Œ๋“œ๋‚˜ ํ•„๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ์ˆœ์„œ๋Š” JSR330์— ์˜ํ•ด ์ •์˜๋˜์ง€ ์•Š๋Š”๋‹ค.

  • @Moudle : ํ•ด๋‹น ์–ด๋…ธํ…Œ์ด์…˜ ๋œ ํด๋ž˜์Šค๋Š” ์‚ฝ์ž… ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ์ œ๊ณต๋˜๋ฉฐ ํด๋ž˜์Šค๋Š” @Provides ์–ด๋…ธํ…Œ์ด์…˜ ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ์ •์˜ํ•œ๋‹ค. ํ•ด๋‹น ๋ฉ”์†Œ๋“œ์˜ return๋œ ์˜ค๋ธŒ์ ํŠธ๋Š” ์ข…์†์„ฑ ์‚ฝ์ž…์— ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค. (@Module -> @Provides)
  • @Inject : ์˜์กด์„ฑ์„ ์ •์˜ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ
  • @Component : ํ•ด๋‹น ์–ด๋…ธํ…Œ์ด์…˜ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ฐ์ฒด ์ œ๊ณต์ž(Module)์™€ ์˜์กด ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๊ฐ์ฒด ์‚ฌ์ด์˜ ์—ฐ๊ฒฐ์„ ์ •์˜ํ•˜๋ฉฐ ํ•ด๋‹น ์—ฐ๊ฒฐ์— ๋Œ€ํ•œ ํด๋ž˜์Šค๋Š” Dagger์— ์˜ํ•ด ์ƒ์„ฑ๋œ๋‹ค.

Dependency Injector๋ž€?

  • ๋ชจ๋“ˆ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•˜๋Š” ๋ชจ๋“ˆ์„ ๋งํ•œ๋‹ค.

์ฐธ๊ณ 

tony-programming
NoodleMan

profile
์—ด์‹ฌํžˆ ์‚ด์•„์•ผ์ง€

0๊ฐœ์˜ ๋Œ“๊ธ€