โ† ๋ชฉ๋ก์œผ๋กœ
Enum and const enum

TypeScript์˜ enum๊ณผ const enum์˜ ์ฐจ์ด๋ฅผ ๋น„๊ตํ•˜๊ณ , ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ด…์‹œ๋‹ค.

enum๊ณผ const enum์˜ ์ฐจ์ด์ 

1. enum์˜ ๋™์ž‘ ๋ฐฉ์‹

enum์„ ์‚ฌ์šฉํ•˜๋ฉด TypeScript๋Š” ์ด๋ฅผ ์‹ค์ œ JavaScript ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๊ฐenum๋ฉค๋ฒ„๋Š” ์ด ๊ฐ์ฒด์˜ ์†์„ฑ์ด ๋˜๋ฉฐ, ์ด ์†์„ฑ์„ ํ†ตํ•ด ๊ฐ’์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฐฉ์‹์€ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ณ , ๋Ÿฐํƒ€์ž„์—์„œ๋„ enum์˜ ๋ฉค๋ฒ„๋ฅผ ๋™์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

enum Direction {
  Up,
  Down,
  Left,
  Right,
}

์œ„ ์ฝ”๋“œ๋Š” ์ปดํŒŒ์ผ ํ›„ ๋‹ค์Œ๊ณผ ๊ฐ™์€ JavaScript ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค:

var Direction;
(function (Direction) {
  Direction[(Direction['Up'] = 0)] = 'Up';
  Direction[(Direction['Down'] = 1)] = 'Down';
  Direction[(Direction['Left'] = 2)] = 'Left';
  Direction[(Direction['Right'] = 3)] = 'Right';
})(Direction || (Direction = {}));

2. const enum์˜ ๋™์ž‘ ๋ฐฉ์‹

๋ฐ˜๋ฉด, const enum์€ ์ปดํŒŒ์ผ ์‹œ ๋ชจ๋“  ์ฐธ์กฐ๊ฐ€ ์ƒ์ˆ˜ ๊ฐ’์œผ๋กœ ์ธ๋ผ์ธ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ, const enum์€ ๋Ÿฐํƒ€์ž„์— ์‹ค์ œ ๊ฐ์ฒด๋กœ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์ปดํŒŒ์ผ๋œ ์ฝ”๋“œ์˜ ํฌ๊ธฐ๊ฐ€ ์ค„์–ด๋“ค๊ณ  ์„ฑ๋Šฅ์ด ์ตœ์ ํ™”๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ const enum์€ ๋ชจ๋“ˆ ๊ฒฝ๊ณ„๋ฅผ ๋„˜์–ด ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, ๋””๋ฒ„๊น… ์‹œ ์–ด๋ ค์›€์„ ๊ฒช์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const enum Direction {
  Up,
  Down,
  Left,
  Right,
}

์œ„ ์ฝ”๋“œ๋Š” ์ปดํŒŒ์ผ ํ›„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ธ๋ผ์ธ๋œ ์ƒ์ˆ˜๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค:

var direction = 0; /* Up */

enum๊ณผ const enum์˜ ๋‹จ์ 

๋‘ ๋ฐฉ์‹ ๋ชจ๋‘ ์žฅ๋‹จ์ ์ด ์žˆ์ง€๋งŒ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹จ์ ๋„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ๋ชจ๋“ˆ ๊ฒฝ๊ณ„ ๋ฌธ์ œ - const enum์€ ๋ชจ๋“ˆ ๊ฐ„์˜ ์ƒํ˜ธ์ž‘์šฉ์ด ์–ด๋ ค์›Œ ๋ชจ๋“ˆํ™”๋œ ์ฝ”๋“œ์—์„œ๋Š” ์‚ฌ์šฉํ•˜๊ธฐ ๊นŒ๋‹ค๋กญ์Šต๋‹ˆ๋‹ค.
  • ๋””๋ฒ„๊น… ๋ฌธ์ œ - const enum์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ๋””๋ฒ„๊น… ์‹œ ๊ฐ’์ด ์ธ๋ผ์ธ๋œ ์ˆซ์ž๋กœ ํ‘œ์‹œ๋˜์–ด ๋ฌธ์ œ๋ฅผ ์ถ”์ ํ•˜๊ธฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋Ÿฐํƒ€์ž„ ์˜ค๋ฒ„ํ—ค๋“œ - ์ผ๋ฐ˜ enum์€ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋Ÿฐํƒ€์ž„ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋Œ€์ฒด ์ฝ”๋“œ: ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์„ ์‚ฌ์šฉํ•œ enum ๊ตฌํ˜„

์ด๋Ÿฌํ•œ ๋‹จ์ ์„ ํ”ผํ•˜๋ฉด์„œ๋„ ๋น„์Šทํ•œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด, ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์„ ์‚ฌ์šฉํ•œ ๋ฐฉ๋ฒ•์„ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์—†์• ๊ณ , const enum๊ณผ ์œ ์‚ฌํ•œ ์ตœ์ ํ™”๋ฅผ ์ œ๊ณตํ•˜๋ฉด์„œ๋„, ๋ณด๋‹ค ์œ ์—ฐํ•œ ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const Direction = {
  Up: 0,
  Down: 1,
  Left: 2,
  Right: 3,
} as const;

type Direction = (typeof Direction)[keyof typeof Direction];

๊ฐ๊ฐ์˜ ๋‹จ์ ์„ ํ”ผํ•˜๋ฉด์„œ ๋น„์Šทํ•œ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜๋‹ค๋ฉด as const ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์ด ์ข‹์€ ๋Œ€์•ˆ์ž…๋‹ˆ๋‹ค.