Enum
Enum(์ด๊ฑฐํ)์ด๋?
์๋ฐ์คํฌ๋ฆฝํธ์ ์๋ ํ์ ์ด์ง๋ง, ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ฐ์ผ๋ก ์ฌ์ฉํ ์ ์๋ ํ์
์ฌ๋ฌ ์์๋ฅผ ๋์ดํ๋ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋๋ค.
enum
์ด๋ผ๋ ์์ฝ์ด๋ก ์ ์ธํ๋ค.
enum Node {
Mesh, // enum ๋ด๋ถ์ ์๋ ์ด๋ฆ์ ๋ฉค๋ฒ(member)๋ผ ๋ถ๋ฅธ๋ค.
Texture,
Decal,
}
enum์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ก ๋ณํ๋๋ค.
var Node = {
0: 'Mesh',
1: 'Texture',
2: 'Decal',
Mesh: 0,
Texture: 1,
Decal: 2,
}
enum์ ๋ฉค๋ฒ ์์๋๋ก 0๋ถํฐ ์ซ์๊ฐ ํ ๋น๋๋ค.
์์์ ์ซ์๋ฅผ ํ ๋นํ๊ฒ ๋๋ฉด ๊ทธ ๋ค์ ๋ฉค๋ฒ์ ๊ฐ์ ์ด์ ๊ฐ์ +1๋ก ํ ๋น๋๋ค.
๋ฌธ์์ด๋ ํ ๋น ๊ฐ๋ฅํ๋ฐ, ํ ๋ฉค๋ฒ๋ฅผ ๋ฌธ์์ด๋ก ํ ๋นํ๋ฉด ๊ทธ ๋ค์ ๋ฉค๋ฒ๋ค์ ์ ๋ถ ์ง์ ๊ฐ์ ํ ๋นํด์ผ ํ๋ค.
enum ํ์ ์ ์์ฑ์ ๊ฐ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
const a = Node.Mesh; // 0
const b = Node[Node.Mesh]; // 'Mesh'
enum์ ๊ฐ ๋ณด๋ค ํ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ ๋ง๋ค.
ํ์ ์ผ๋ก ์ฌ์ฉํ๊ฒ ๋๋ฉด ๋ฉค๋ฒ์ ์ ๋์จ๊ณผ ๋น์ทํ ์ญํ ์ ํ๋ค.
// node: 'Mesh' | 'Texture' | 'Decal'
const logNode = (node: Node) => {
console.log(Node[node]);
}
๋จ์
Enum์ ์์ง ๋ถ์์ ํ๋ค.
const logNode = (node: Node) => {}
logNode(Node.Mesh);
logNode('Mesh'); // Error (node์ ํ์
์ 'Mesh' | 'Texture' | 'Decal' ์ด์ง๋ง ์๋ฌ ๋ฐ์
Enum์ ์ฌ์ฉํ๋ฉด
Tree-shaking
์ด ๋์ง ์๋๋ค.JavaScript์ ์กด์ฌํ์ง ์๋ ๊ฒ์ ๊ตฌํํ๊ธฐ ์ํด TypeScript ์ปดํ์ผ๋ฌ๋ IIFE(์ฆ์ ์คํ ํจ์)๋ฅผ ํฌํจํ ์ฝ๋๋ฅผ ์์ฑํ๊ฒ ๋๋๋ฐ IIFE๋ฅผ '์ฌ์ฉํ์ง ์๋ ์ฝ๋'๋ผ๊ณ ํ๋จํ ์ ์์ด์ tree-shaking์ด ์ผ์ด๋์ง ์๋๋ค
๊ทธ๋ ๋ค๋ฉด ์ธ์ ์ฌ์ฉํด์ผ ์ข์๊น?
ํ๊ทธ๋ ์ ๋์จ(๋ธ๋๋ฉ)์ ์ฌ์ฉํ๋ฉด ์ข๋ค.
๋จ, ๊ฐ์ enum์ ๋ฉค๋ฒ์ฌ์ผ ์๋ก ๊ตฌ๋ถ๋๋ค. ๋ค๋ฅธ enum์ ๋ฉค๋ฒ๋ผ๋ฆฌ๋ ๊ตฌ๋ถ๋์ง ์์ ์ ์๋ค.
enum Node {
Mesh,
Decal
}
interface MeshNode {
type: Node.Mesh,
}
interface DecalNode {
type: Node.Decal,
}
const MeshOrDecal = (node: MeshNode | DecalNode) => {
if(node.type === Node.Mesh) {
node; // MesNode
} else {
node; // DecalNode
}
}
Last updated