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์ด ์ผ์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค

Tree-shaking์ด๋ž€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ฝ”๋“œ๋ฅผ ์‚ญ์ œํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋งํ•œ๋‹ค. ์ตœ์ข… ๋ฒˆ๋“ค ํฌ๊ธฐ๋ฅผ ์ค„์—ฌ ์ตœ์ ํ™” ๊ฐ€๋Šฅ

Enum ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋˜, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋กœ ์ƒ์„ฑ๋˜์ง€ ์•Š๊ฒŒ ํ•˜๋ ค๋ฉด const enum ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์–ธ์ œ ์‚ฌ์šฉํ•ด์•ผ ์ข‹์„๊นŒ?

  • ํƒœ๊ทธ๋“œ ์œ ๋‹ˆ์˜จ(๋ธŒ๋žœ๋”ฉ)์— ์‚ฌ์šฉํ•˜๋ฉด ์ข‹๋‹ค.

  • ๋‹จ, ๊ฐ™์€ 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