TypeScript์ enum๊ณผ const 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 = {}));
๋ฐ๋ฉด, const enum์ ์ปดํ์ผ ์ ๋ชจ๋ ์ฐธ์กฐ๊ฐ ์์ ๊ฐ์ผ๋ก ์ธ๋ผ์ธ ์ฒ๋ฆฌ๋ฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก, const enum์ ๋ฐํ์์ ์ค์ ๊ฐ์ฒด๋ก ์กด์ฌํ์ง ์์ผ๋ฉฐ, ์ปดํ์ผ๋ ์ฝ๋์ ํฌ๊ธฐ๊ฐ ์ค์ด๋ค๊ณ ์ฑ๋ฅ์ด ์ต์ ํ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ const enum์ ๋ชจ๋ ๊ฒฝ๊ณ๋ฅผ ๋์ด ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ๋๋ฒ๊น
์ ์ด๋ ค์์ ๊ฒช์ ์ ์์ต๋๋ค.
const enum Direction {
Up,
Down,
Left,
Right,
}
์ ์ฝ๋๋ ์ปดํ์ผ ํ ๋ค์๊ณผ ๊ฐ์ด ์ธ๋ผ์ธ๋ ์์๋ก ๋ณํ๋ฉ๋๋ค:
var direction = 0; /* Up */
๋ ๋ฐฉ์ ๋ชจ๋ ์ฅ๋จ์ ์ด ์์ง๋ง, ๋ค์๊ณผ ๊ฐ์ ๋จ์ ๋ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
const enum์ ๋ชจ๋ ๊ฐ์ ์ํธ์์ฉ์ด ์ด๋ ค์ ๋ชจ๋ํ๋ ์ฝ๋์์๋ ์ฌ์ฉํ๊ธฐ ๊น๋ค๋กญ์ต๋๋ค.const 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 ๊ฐ์ฒด ๋ฆฌํฐ๋ด์ด ์ข์ ๋์์
๋๋ค.