๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

#1 Language ๐Ÿ‘„/1-3 Typescript

[Typescript] ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ Decorators

  • ๋ฉ”ํƒ€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ•˜๋Š” ๋ฐ ๋งค์šฐ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ ๋จ
    • ๋ฉ”ํƒ€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ž€?
    • end user๊ฐ€ ํŽ˜์ด์ง€๋ฅผ ๋ฐฉ๋ฌธํ•˜๋Š”๋ฐ, ๋ณดํ†ต ๊ณง๋ฐ”๋กœ ์˜ํ–ฅ์„ ์ฃผ๊ธฐ์— ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ
    • ๋Œ€์‹ ์— ์ฝ”๋“œ๋ฅผ ์“ฐ๋Š” ๋ฐ ์ ํ•ฉํ•˜๋„๋ก ๋งŒ๋“ค์–ด ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๋“ค์ด ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๊ฒŒ ํ•จ
    • ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋Š” ์‹ค์ฒดํ™”๋˜๊ธฐ ์ „ ํด๋ž˜์Šค๊ฐ€ ์ •์˜๋งŒ ๋ผ๋„ ์‹คํ–‰ ๋จ
function Logger(constructor: Function) {
  console.log("Logging...");
  console.log(constructor);
}

@Logger
class Person1 {
  name = "Yum";

  constructor() {
    console.log("Creating person object...");
  }
}

const pers = new Person1();

console.log(pers);
  • ์œ„์™€ ๊ฐ™์ด ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ๋งŒ๋“œ๋Š” ๋Œ€์‹ , ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒฉํ† ๋ฆฌ(factory)๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Œ
๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒฉํ† ๋ฆฌ (factory)
function Logger(logString: string) {
  return function (constructor: Function) {
    console.log("Logging...");
    console.log(constructor);
  };
}

@Logger("LOGGING - PERSON")
class Person1 {
  name = "Yum";

  constructor() {
    console.log("Creating person object...");
  }
}

const pers = new Person1();

console.log(pers);
function Logger(logString: string) {
  return function (constructor: Function) {
    console.log("Logging...");
    console.log(constructor);
  };
}

function WithTemplate(template: string, hookId: string) {
  return function (_: Function) {
    const hookEl = document.getElementById(hookId);
    if (hookEl) {
      hookEl.innerHTML = template;
    }
  };
}

// @Logger("LOGGING - PERSON")
@WithTemplate("<h1> My Person Object <h2/>", "app")
class Person1 {
  name = "Yum";

  constructor() {
    console.log("Creating person object...");
  }
}

const pers = new Person1();

console.log(pers);
LIST