๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“‚ Language/JavaScript

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ symbol์€ ์–ธ์ œ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์„๊นŒ?

by Dev. Ella 2023. 9. 19.

์˜๋ฌธ์ด ๋“  ์ด์œ 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ symbol์€ ECMAScript6(2015)์— ๋„์ž…๋œ 7๋ฒˆ์งธ ํƒ€์ž…์ด๋ผ๊ณ  ๋“ค์–ด๋Š” ๋ดค์ง€๋งŒ, ๊ทธ๋‹ค์ง€ ๊นŠ๊ฒŒ ํŒŒ๋ณธ์ ์ด ์—†์—ˆ๋˜ ๊ฒƒ ๊ฐ™์•„์„œ ๊นŠ๊ฒŒ ๊ณต๋ถ€ํ•˜๋Š” ์ค‘์ด๋‹ค. ์ƒ๊ฐํ•ด ๋ณด๋‹ˆ (๋ชฐ๋ผ์„œ ๊ทธ๋žฌ์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ) ์ฝ”๋”ฉ์„ ํ•  ๋•Œ๋„ ์ ๊ทน์ ์œผ๋กœ ์‚ฌ์šฉํ• ๋งŒํ•œ ์ƒํ™ฉ์ด ์—†๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

 

ํ•˜์ง€๋งŒ ์•Œ์•„๋‘๋ฉด ๋‚˜์ค‘์— ๋‹ค ์“ธ ๋ฐ๊ฐ€ ์žˆ์„ ํ…Œ๋‹ˆ ์–ธ์ œ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์€์ง€, ์‚ฌ์šฉํ–ˆ์„ ๋•Œ์˜ ์žฅ์ ๋„ ํ•œ๋ฒˆ ์ •๋ฆฌํ•ด ๋ณด์ž.

 

 

์ผ๋‹จ, symbol์ด๋ž€?

์ฑ… <๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Deep Dive>์— ๋”ฐ๋ฅด๋ฉด, symbol์— ๋Œ€ํ•œ ์„ค๋ช…์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

์‹ฌ๋ณผ(symbol)์€ ES6์—์„œ ๋„์ž…๋œ 7๋ฒˆ์งธ ๋ฐ์ดํ„ฐ ํƒ€์ž…์œผ๋กœ, ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•œ ์›์‹œ ํƒ€์ž…์˜ ๊ฐ’์ด๋‹ค. ์‹ฌ๋ณผ ๊ฐ’์€ ๋‹ค๋ฅธ ๊ฐ’๊ณผ ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ์œ ์ผ๋ฌด์ดํ•œ ๊ฐ’์ด๋‹ค. ๋”ฐ๋ผ์„œ ์ฃผ๋กœ ์ด๋ฆ„์˜ ์ถฉ๋Œ ์œ„ํ—˜์ด ์—†๋Š” ์œ ์ผํ•œ ํ”„๋กœํผํ‹ฐ ํ‚ค๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.

 

 

์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์•Œ์•„๋ณด์ž

์•„๋ž˜์˜ ๋‘ ๊ฐ€์ง€ ์˜ˆ์‹œ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด symbol์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์™€, ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ๋ฅผ ํ•œ๋ˆˆ์— ๋น„๊ตํ•ด ๋ณด์ž.

 

์˜ˆ์‹œ 1: symbol์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ์ฝ”๋“œ

๋™์„œ๋‚จ๋ถ ๋„ค ๊ฐ€์ง€ ๋ฐฉํ–ฅ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ฝ”๋“œ๋ฅผ ์˜ˆ๋กœ ๋“ค์–ด๋ณด์ž.

// ๋™์„œ๋‚จ๋ถ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ƒ์ˆ˜๋ฅผ ์ •์˜
// ์ด๋•Œ ๊ฐ’ 1~4์—๋Š” ํŠน๋ณ„ํ•œ ์˜๋ฏธ๊ฐ€ ์—†๊ณ  ์ƒ์ˆ˜ ์ด๋ฆ„์— ์˜๋ฏธ๊ฐ€ ์žˆ์Œ
const Direction = {
    EAST: 1,
    WEST: 2,
    SOUTH: 3,
    NORTH: 4
};

// ๋ณ€์ˆ˜์— ์ƒ์ˆ˜๋ฅผ ํ• ๋‹น
const myDirection = Direction.EAST;

if (myDirection === Direction.EAST) {
    console.log('You can go there'); // You can go there
}

 

์œ„ ์˜ˆ์ œ์™€ ๊ฐ™์ด ๊ฐ’์—๋Š” ํŠน๋ณ„ํ•œ ์˜๋ฏธ๊ฐ€ ์—†๊ณ , ์ƒ์ˆ˜ ์ด๋ฆ„ ์ž์ฒด์— ์˜๋ฏธ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ์ด๋•Œ, ์ƒ์ˆ˜ ๊ฐ’ 1, 2, 3, 4๋Š” ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋‹ค๋ฅธ ๋ณ€์ˆ˜ ๊ฐ’๊ณผ ์ค‘๋ณต๋  ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ ๋‹ค๋ฅธ ์ฝ”๋“œ์—์„œ ๋™์ผํ•œ ์ˆซ์ž๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์Œ, ๊ทธ๋ ‡๋‹ค๋ฉด ์ด๋ฒˆ์—๋Š” symbol์„ ์‚ฌ์šฉํ•ด ๋ณด์™„ํ•œ ์ฝ”๋“œ์™€ ๋น„๊ตํ•ด๋ณด์ž.

 

์˜ˆ์‹œ 2: symbol์„ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ

// ๋™์„œ๋‚จ๋ถ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ƒ์ˆ˜๋ฅผ ์ •์˜
// ์ค‘๋ณต๋  ๊ฐ€๋Šฅ์„ฑ์ด ์—†๋Š” symbol๋กœ ์ƒ์ˆ˜ ๊ฐ’์„ ์ƒ์„ฑ
const Direction = {
    EAST: Symbol('east'),
    WEST: Symbol('west'),
    SOUTH: Symbol('south'),
    NORTH: Symbol('north')
};

// ๋ณ€์ˆ˜์— ์ƒ์ˆ˜๋ฅผ ํ• ๋‹น
const myDirection = Direction.EAST;

if (myDirection === Direction.EAST) {
    console.log('You can go there'); // You can go there
}

 

์œ„ ์ฝ”๋“œ์—์„œ๋Š” ๋ณ€๊ฒฝ ๋ฐ ์ค‘๋ณต๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ๋ฌด์˜๋ฏธํ•œ ์ƒ์ˆ˜ ๋Œ€์‹ ,  ์ค‘๋ณต๋  ๊ฐ€๋Šฅ์„ฑ์ด ์—†๋Š” ์œ ์ผ๋ฌด์ดํ•œ ์ด๋ฆ„์ด ๋ช…ํ™•ํ•˜๊ฒŒ ๋ถ€์—ฌ๋˜์—ˆ๋‹ค. ์ƒ์„ฑ๋œ symbol ๊ฐ’์€ ์™ธ๋ถ€๋กœ ๋…ธ์ถœ๋˜์ง€ ์•Š์•„ ํ™•์ธํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, ๋‹ค๋ฅธ ๊ฐ’๊ณผ ์ ˆ๋Œ€ ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ์œ ์ผ๋ฌด์ดํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ ์•ˆ์ •์„ฑ์ด ์ƒ๊ธด๋‹ค.

 

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์˜๋ฏธ๊ฐ€ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ ๋‹ค๋ฅธ ์ฝ”๋“œ์—์„œ ๋™์ผํ•œ Symbol ๊ฐ’์„ ๋งŒ๋“ค์–ด๋„ ์‹ค์ œ๋กœ๋Š” ๋‹ค๋ฅธ symbol ๊ฐ’์ด๋ฏ€๋กœ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

 

symbol ์‚ฌ์šฉ ์‹œ ์žฅ์ 

์œ„์˜ ์˜ˆ์‹œ ์ฝ”๋“œ๋ฅผ ๋ฏธ๋ฃจ์–ด ๋ณด์•˜์„ ๋•Œ, symbol์„ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ์˜ ์žฅ์ ์€ ํฌ๊ฒŒ ์„ธ ๊ฐ€์ง€๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

1. ๊ณ ์œ ์„ฑ ๋ณด์žฅ

Symbol์€ ํ•ญ์ƒ ๊ณ ์œ ํ•˜๋ฉฐ ์ค‘๋ณต๋  ๊ฐ€๋Šฅ์„ฑ์ด ์—†๋Š” ๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๋ฏ€๋กœ, ์‹ค์ˆ˜๋กœ ๊ฐ’์ด ์ถฉ๋Œํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ์ฒด ์†์„ฑ์˜ ํ‚ค ๋˜๋Š” ๋‹ค๋ฅธ ์ƒํ™ฉ์—์„œ ๊ณ ์œ ํ•œ ์‹๋ณ„์ž๋ฅผ ๋งŒ๋“ค ๋•Œ ์œ ์šฉํ•˜๋‹ค.

 

2. ์ด๋ฆ„ ์ถฉ๋Œ ๋ฐฉ์ง€

Symbol์€ ์ด๋ฆ„ ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ์ฝ”๋“œ์™€์˜ ์ƒํ˜ธ์ž‘์šฉ ์‹œ ์ถฉ๋Œ ๊ฐ€๋Šฅ์„ฑ์ด ๊ฐ์†Œํ•œ๋‹ค.

 

3. ์˜๋ฏธ ๋ถ€์—ฌ

Symbol์— ์ด๋ฆ„์„ ๋ถ™์ผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ฝ”๋“œ๋ฅผ ์ฝ์„ ๋•Œ ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š”์ง€ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

๐Ÿ“Ž ๋‚ด์šฉ ์ฐธ์กฐ

- ์ฑ… <๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Deep Dive>

๋Œ“๊ธ€