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๋ฅผ ๋ฑ๋กํ์ญ์์ค.