Metadata - nkiateam/angular-tutorial GitHub Wiki
Metadata๋ Angular์๊ฒ ํด๋์ค๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋์ง์ ๋ํด ์๋ ค์ค๋๋ค.
์์ Component์์ ์ค๋ช
ํ HeroListComponent
์์ ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ด ๋จ์ง ํด๋์ค์ผ๋ฟ์ด๋ผ๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. ๊ทธ ์์๋ ํ๋ ์์ํฌ์ ์ฆ๊ฑฐ๋ ์ฐพ์๋ณผ ์ ์๊ณ , ๋ํ ๊ทธ์์๋ Angular์ฒ๋ผ ๋ณด์ด๋ ์ด๋ค ๊ฒ๋ ์์ต๋๋ค.
์ฌ์ค HeroListComponent
๋ ๋จ์ง ํด๋์ค์
๋๋ค. ์ฐ๋ฆฌ๊ฐ Angular์๊ฒ ์๋ ค์ฃผ๊ธฐ ์ ๊น์ง๋ ์ปดํฌ๋ํธ๊ฐ ์๋๋๋ค.
์ฐ๋ฆฌ๋ Angular์๊ฒ HeroListComponent
๊ฐ ์ปดํฌ๋ํธ๋ผ๋ ๊ฒ์ ์๋ ค์ฃผ๊ธฐ ์ํด์๋ ํด๋์ค์ Metadata๋ฅผ ๋ถ์ฌ ์ฃผ์ด์ผ ํฉ๋๋ค.
Typescript์์๋ Metadata๋ฅผ decorator๋ฅผ ์ฌ์ฉํ์ฌ ๋ถ์ฌ์ค ์ ์์ต๋๋ค. ์๋ ์์ ์์๋ HeroListComponent
์ ๋ํ Metadata๋ฅผ ์ ์ํฉ๋๋ค.
@Component({
moduleId: module.id,
selector: 'hero-list',
templateUrl: 'hero-list.component.html',
providers: [ HeroService ]
})
export class HeroListComponent implements OnInit {
/* . . . */
}
์ฌ๊ธฐ์ @Component
decorator๋ ๋ฐ๋ก ์๋์ ์ ์ธ๋ ํด๋์ค๊ฐ ์ปดํฌ๋ํธ๋ก ์๋ณํ ์ ์๊ฒ ํด์ค๋๋ค.
๋ํ @Component
decorator๋ Angular๊ฐ ์ปดํฌ๋ํธ์ View๋ฅผ ํํํ๋๋ฐ ํ์๋ก ํ๋ ์ ๋ณด๋ฅผ ๊ฐ์ง ๊ตฌ์ฑ ๊ฐ์ฒด๋ฅผ ์ ์ํฉ๋๋ค.
์๋์ ๋ช๊ฐ์ง @Component ์ค์ ์ต์ ์ด ์์ต๋๋ค.
- moduleId : templateUrl๊ณผ ๊ฐ์ ๋ชจ๋ ์๋์ (module-relative)์ธ URL์ ๋ํ ๊ธฐ๋ณธ ์ฃผ์(module.id)์ ์์ค๋ฅผ ์ง์ ํฉ๋๋ค.
โป from StackOverflow : module.id๋ CommonJS ์ฌ์ฉ์ ์๋ํ๋ฏ๋ก, ์ผ๋ฐ์ ์ผ๋ก ์ ๊ฒฝ์ฐ์ง ์์๋ ๋๋ ๋ถ๋ถ์ด๋ฉฐ, ๋จ์ํ module.id๋ก ์ ์ํฉ๋๋ค. ๋ง์ฝ, webpack์ ์ฌ์ฉํ์ฌ ๋ฒ๋ค๋ง ํ๋ ๊ฒฝ์ฐ Webpack Plugin์ด ์๋์ผ๋ก moduleId๋ฅผ ํธ๋ค๋ง ํ๊ธฐ ๋๋ฌธ์ module.id๋ ํ์ ์์ต๋๋ค.
- selector: angular์๊ฒ ์ปดํฌ๋ํธ์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ ์ฝ์ ํ๊ธฐ ์ํ CSS ์ ํ์์ ๋๋ค. ์ด๋ ๋ถ๋ชจ HTML์์ ์ ๊ฐ์ ํ๊ทธ๋ฅผ ์ ๋ณด๋ฅผ ์๋ฏธํฉ๋๋ค.
- templateURL: ์ปดํฌ๋ํธ์ HTML template์ ๋ชจ๋ ์๋ ๊ฒฝ๋ก์ ๋๋ค.
- providers: ์ปดํฌ๋ํธ๊ฐ ํ์๋ก ํ๋ ์๋น์ค์ ๋ํ ์์กด์ฑ ์ฃผ์ ๊ณต๊ธ์๋ค์ ๋ฐฐ์ด๋ก, ์ปดํฌ๋ํธ์ ์์ฑ์๊ฐ ํ์๋ก ํ๋ ์๋น์ค์ ๋ํด ์ค์ ํ๋ ํ๋์ ๋ฐฉ๋ฒ์ ๋๋ค.(์ ์์ ์์ ์์ฑ์์ HeroService๋ฅผ ์ง์ ํจ์ผ๋ก์จ ์์ ๋ค์ ๋ชฉ๋ก์ ์กฐํํ ์ ์๋ค.)
@Component
์์ Metadata๋ Angular์๊ฒ ์ ์ํ ์ปดํฌ๋ํธ์ ๋ํ ์ฃผ์ building block์ ์ด๋ป๊ฒ ๊ฐ์ ธ์ฌ ์ ์๋์ง ์๋ ค์ค๋๋ค.
๊ฒฐ๊ตญ Template๊ณผ Metadata, Component๊ฐ ๋ชจ์ฌ์ ํ๋์ View๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
Angular์ ํ๋์ ๊ฐ์ด๋ํ๋ ์ ์ฌํ ํํ์ decorator๋ค์ @Injectable, @Input, @Output ๋ฑ์ด ์์ต๋๋ค. ์ํคํ ์ณ์ ์ผ๋ก ์ค์ํ ์์๋ Angular๊ฐ ๋ญ ํ๋์ง ์๊ธฐ ์ํด์๋ ์ฝ๋์ ๋ฐ๋์ metadata๋ฅผ ์ถ๊ฐํ์ฌ์ผ ํ๋ค๋ ์ ์ ๋๋ค.