Dependency injection - nkiateam/angular-tutorial GitHub Wiki

Dependency injection

Dependency injection์€ ํด๋ž˜์Šค์˜ ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค์— ํ•„์š”ํ•œ ์™„์ „ํ•œ ์ข…์†์„ฑ์„ ์ œ๊ณตํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์ข…์†์„ฑ์€ ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค. Angular๋Š” ์ƒˆ๋กœ์šด ๊ตฌ์„ฑ ์š”์†Œ์— ํ•„์š”ํ•œ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ์ข…์†์„ฑ ์ฃผ์ž…์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

app/hero-list.component.ts (constructor)

  constructor(private service: HeroService) { }

Angular๊ฐ€ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋งŒ๋“ค๋ฉด ๋จผ์ € ๊ตฌ์„ฑ ์š”์†Œ์— ํ•„์š”ํ•œ ์„œ๋น„์Šค๋ฅผ injector์— ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.

injector๋Š” ์ด์ „์— ์ƒ์„ฑ ํ•œ ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์š”์ฒญ ๋œ ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค๊ฐ€ ์ปจํ…Œ์ด๋„ˆ์— ์—†์œผ๋ฉด injector๋Š” ์„œ๋น„์Šค๋ฅผ Angular๋กœ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ์ „์— ์ปจํ…Œ์ด๋„ˆ์— ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์š”์ฒญ ๋œ ๋ชจ๋“  ์„œ๋น„์Šค๊ฐ€ ํ™•์ธ๋˜๊ณ  ๋ฐ˜ํ™˜๋˜๋ฉด Angular๋Š” ํ•ด๋‹น ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์„ฑ ์š”์†Œ์˜ ์ƒ์„ฑ์ž๋ฅผ ์ธ์ˆ˜๋กœ ํ˜ธ์ถœ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด dependency injection ์ž…๋‹ˆ๋‹ค.

HeroService์˜ ์ฃผ์ž… ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

injector์— HeroService๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์„๊นŒ? ์š”์•ฝํ•˜์ž๋ฉด HeroService provider๋ฅผ injector์— ๋“ฑ๋กํ•œ ์ ์ด ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. provider๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ Service Class ์ž์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๋ฐ˜ํ™˜ ํ•  ์ˆ˜์žˆ๋Š” Service์ž…๋‹ˆ๋‹ค.

provider๋ฅผ Module ๋˜๋Š” ๊ตฌ์„ฑ ์š”์†Œ์— ๋“ฑ๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์„œ๋น„์Šค์˜ ๋™์ผํ•œ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ชจ๋“  ๊ณณ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋„๋ก provider๋ฅผ root Module์— ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค.

app/app.module.ts (module providers)
  providers: [
    BackendService,
    HeroService,
    Logger
  ],

๋˜๋Š” @Component ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ์˜ providers ์†์„ฑ์—์žˆ๋Š” ๊ตฌ์„ฑ ์š”์†Œ ์ˆ˜์ค€์— ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.

app/hero-list.component.ts (component providers)
  @Component({
    moduleId: module.id,
    selector:    'hero-list',
    templateUrl: 'hero-list.component.html',
    providers:  [ HeroService ]
  })

๊ตฌ์„ฑ ์š”์†Œ ์ˆ˜์ค€์— ๋“ฑ๋กํ•˜๋ฉด ํ•ด๋‹น ๊ตฌ์„ฑ ์š”์†Œ์˜ ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๊ฐ€ ๋‚˜์˜ฌ ๋•Œ๋งˆ๋‹ค ์„œ๋น„์Šค์˜ ์ƒˆ ์ธ์Šคํ„ด์Šค๋ฅผ ์–ป๊ฒŒ๋ฉ๋‹ˆ๋‹ค.

์˜์กด์„ฑ ์ฃผ์ž…์— ๋Œ€ํ•ด ๊ธฐ์–ตํ•ด์•ผ ํ•  ์  :

  • Dependency Injection์€ Angular ํ”„๋ ˆ์ž„ ์›Œํฌ์— ์—ฐ๊ฒฐ๋˜์–ด ์–ด๋””์„œ๋‚˜ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

  • injector๊ฐ€ ์ฃผ์š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค.

    • injector๋Š” ์ƒ์„ฑ ํ•œ ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค
    • injector๋Š” provider๋กœ๋ถ€ํ„ฐ ์ƒˆ๋กœ์šด ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • provider๋Š” ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

  • provider์— injector๋ฅผ ๋“ฑ๋กํ•˜์‹ญ์‹œ์˜ค.