Metadata - nkiateam/angular-tutorial GitHub Wiki

Metadata

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๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ์•ผ ํ•œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.

โš ๏ธ **GitHub.com Fallback** โš ๏ธ