[REAL Deep Dive into JS] 33. Symbol

young_palleteยท2022๋…„ 10์›” 11์ผ
0

REAL JavaScript Deep Dive

๋ชฉ๋ก ๋ณด๊ธฐ
34/46
post-custom-banner

๐Ÿšฆ ๋ณธ๋ก 

Symbol, ์™œ ํ•„์š”ํ•œ๊ฐ€.

Symbol์ด๋ผ๋Š” ํƒ€์ž…์€ 7๋ฒˆ์งธ๋กœ ES์—์„œ ํ‘œ์ค€ํ™”๋œ ํƒ€์ž…์ž…๋‹ˆ๋‹ค.
(๊ฐ€๋” ํ—ท๊ฐˆ๋ฆฌ๋Š” ๊ฒƒ์ด ์žˆ๋Š”๋ฐ, ๊ทธ๋ ‡๋‹ค๊ณ  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—๋Š” 7๊ฐœ์˜ ํƒ€์ž…๋งŒ ์กด์žฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. BigInt๋ผ๋Š” ํƒ€์ž…๋„ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.)

ํ•˜์ง€๋งŒ... ์‹ค์ œ๋กœ ํ”„๋กœ์ ํŠธํ•  ๋•Œ๋‚˜ ์ƒ๊ฐ๋ณด๋‹ค ์“ฐ์ง€๋Š” ์•Š๋Š” ํƒ€์ž…์ด๋ผ ์ž˜ ๋„˜์–ด๊ฐ€๋Š” ๊ฒƒ์ด ํ˜„์‹ค์ธ๋ฐ์š”.
๊ทธ๋ ‡์ง€๋งŒ, ํ‘œ์ค€ํ™”๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์€ ๋ฌด์–ธ๊ฐ€๊ฐ€ ๋ฌธ์ œ๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์ด๊ณ , ๋”ฐ๋ผ์„œ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ์ ์„ ์ธ์ง€ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด ์šฐ์„ ์ž…๋‹ˆ๋‹ค.

๋ฌด์—‡์ด ๋ฌธ์ œ์˜€์„๊นŒ์š”?

์ƒ์ˆ˜ ์—ญ์‹œ ํ•œ๊ณ„๋Š” ์กด์žฌํ•œ๋‹ค.

์šฐ๋ฆฌ๋Š” ์ฑ…์„ ์ญ‰ ํ›‘์–ด๋ณด๋ฉฐ, ์–ด๋– ํ•œ ์ƒํƒœ๋”๋ผ๋„ ๋ณ€๊ฒฝ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ์ƒ์ˆ˜๋ผ๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ, ์ƒ์ˆ˜์˜ ๊ฐ’์„ ๋ฒ ๋‚„ ์ˆ˜ ์žˆ๋‹ค๋ฉด ์–ด๋–จ๊นŒ์š”?
๋‹ค๋ฅธ ๋ณ€์ˆ˜๋กœ๋„ ํ•ด๋‹น ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹Œ ๋กœ์ง์— ์ ‘๊ทผํ•˜์—ฌ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ๊ฐ€ ๋˜๋ฏ€๋กœ ์•ˆ์ „์„ฑ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const Directions = Object.freeze({
	UP: 0,
  	DOWN: 1,
    LEFT: 2,
    RIGHT: 3
})

// ์˜ˆ์‹œ๋กœ, ํ•œ ๋ฒˆ ๋‹ค๋ฅธ ๋™๊ฒฐ๋œ ๊ฐ์ฒด๋ฅผ ํ•˜๋‚˜ ๋” ์ƒ์„ฑํ•œ๋‹ค.
const Direction = Object.freeze({
    UP: 3,
  	DOWN: 2,
    LEFT: 1,
    RIGHT: 0
})

// ํ˜„์žฌ `Directions` ๊ฐ์ฒด์˜ ํ‚ค๋“ค์ด ์ €์žฅ๋˜์–ด ์žˆ๋‹ค.
const directionArr = Object.keys(Directions);

const moveCallback = (d) => {
    // ์›ํ•˜๋Š” ๊ฒฐ๊ณผ ๊ฐ’์ด ํ•ด๋‹นํ•˜๋Š” ํ”„๋กœํผํ‹ฐ ํ‚ค๋ฅผ ํ† ๋Œ€๋กœ ์ถœ๋ ฅ๋  ๊ฒƒ์ด๋‹ค.
	console.log(`moved ${directionArr[d]}`); 
}

const move = (cb, direction) => {
	return moveCallback(direction)
}

// ์‹ค์ˆ˜๋กœ ์ธ์ˆ˜๋กœ ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ–ˆ๊ณ , 
// ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋กœ์ง์€ ๋™์ž‘ํ•˜๋‚˜ ์›ํ•˜๋Š” ๊ฐ’์ด ์ถœ๋ ฅ๋˜์ง€ ์•Š๋Š”๋‹ค.
move(moveCallback, Direction.UP) // moved RIGHT

์ฆ‰, ๋ˆ„๊ตฌ๋‚˜ ์›ํ•˜๋Š” ์ƒ์ˆ˜๊ฐ’์„ ํ‰๋‚ด๋‚ผ ์ˆ˜ ์žˆ๊ธฐ์—, ์•ˆ์ „์„ฑ์ด ๋–จ์–ด์ง„๋‹ค๋Š” ๊ฒƒ์ด์ง€์š”.

๋ˆ„๊ตฌ๋‚˜ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ฌธ์ œ์ 

๋˜ํ•œ, ์ ‘๊ทผ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ๋„ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ํŠนํžˆ ์ด๋Š” ๋นŒํŠธ์ธ ๊ฐ์ฒด์— ํ”„๋กœํ† ํƒ€์ž…์„ ์ƒˆ๋กญ๊ฒŒ ๋งŒ๋“ค์—ˆ์„ ๋•Œ๊ฐ€ ๋ฌธ์ œ์ง€์š”.

๋Œ€์ฒด์ ์œผ๋กœ ๋งŽ์ด ๋งŒ๋“ค์–ด ์“ฐ๋Š” sum์ด ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค.

Array.prototype.sum = function () {
	return this.reduce((acc, cur) => acc + cur, 0)
}

๋งŒ์•ฝ ์ด๋Ÿฌํ•œ ๋ฉ”์„œ๋“œ๊ฐ€ ์‹ค์ œ๋กœ ํ‘œ์ค€ํ™”๋˜์—ˆ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”?
๊ทธ๋ ‡๋‹ค๋ฉด ํ‘œ์ค€ํ™”๋œ ๋ฉ”์„œ๋“œ๊ฐ€ ์‰๋„์ž‰๋˜์–ด, ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ด๋ฅผ ๋ชจ๋ฅด๋Š” ๊ฐœ๋ฐœ์ž๋“ค๊ณผ์˜ ์ž‘์—…์‹œ์— ํฐ ํ˜ผ๋™์ด ์žˆ๊ฒ ์ง€์š”? ๐Ÿ˜ญ

๋”ฐ๋ผ์„œ ๊ธฐ์กด์˜ ๊ฐœ๋ฐœ์ž๋“ค์€ ์ด๋Ÿฐ ์ƒ๊ฐ์„ ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

"์ ‘๊ทผํ•  ์ˆ˜๊ฐ€ ์—†์–ด ์ ˆ๋Œ€ ์ถฉ๋Œํ•  ์ˆ˜ ์—†๋Š” ์•ˆ์ „ํ•œ ํƒ€์ž… ๊ฐ’์ด ์—†์„๊นŒ"

์—ฌ๋Ÿฌ ํ‘œ์ค€ํ™” ๋…ผ์˜์— ๊ฑธ์ณ, ๊ฒฐ๊ตญ ์ด๋Ÿฌํ•œ ๊ธฐ๋Œ€์— ๋ถ€ํฅํ•˜๋Š” ๊ฐ’์ด ํƒ„์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ๋ฐ”๋กœ Symbol์ž…๋‹ˆ๋‹ค.

์‚ฌ์šฉ๋ฒ•

์ƒ๊ฐ๋ณด๋‹ค ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ๊ทธ์ € Symbol ๊ฐ์ฒด๋กœ ์ง์ ‘ ๊ฐ์‹ธ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.
์ด๋•Œ, ์ค‘์š”ํ•œ ๊ฑด ๊ฐ์‹ธ์ง„ ๊ฐ’์€ string์œผ๋กœ ์•”๋ฌต์  ํƒ€์ž… ๋ณ€ํ™˜์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

const hi = Symbol('hi'); // Symbol(hi)
// ํƒ€์ž…์€ string์œผ๋กœ ๋ณ€ํ™˜์ด ๋œ๋‹ค.

const test = function() {
  console.log('test!')
};
const symbolTest = Symbol(test); 
// Symbol(function() {
//  console.log('test!')
// })

์ด๋Ÿฌํ•œ ๊ฐ’์€ ๊ณ ์œ ์˜ ๊ฐ’์œผ๋กœ, ๋‹ค๋ฅธ ๋ฌธ์ž์—ด, ํ˜น์€ ๋˜‘๊ฐ™์€ ๊ฐ’์„ ๊ฐ–๊ณ  ์žˆ๋Š” ์‹ฌ๋ณผ๋กœ๋„ ๋น„๊ต๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
(๋งˆ์น˜ ์ฃผ์†Œ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ๋น„๊ตํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ง์ด์ฃ )

const hi = Symbol('hi'); // Symbol(hi)
console.log('hi' === hi) // false;

console.log(Symbol('hi') === hi) // false;

ํ˜น์—ฌ๋‚˜ ๋งŒ์•ฝ, ๋‚ด๋ถ€์˜ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”?
์ด๋Ÿด ๋•Œ๋Š” Symbol ํ”„๋กœํ† ํƒ€์ž… ๊ฐ์ฒด ์•ˆ์— ๋‚ด์žฅ๋œ Symbol.prototype.description๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

console.log(hi.description) // 'hi'

Symbol.for, Symbol.keyFor

๊ทธ๋Ÿฐ๋ฐ ๋งŒ์•ฝ ์ด๋Ÿฐ ์‹ฌ๋ณผ ํƒ€์ž…์ด ์—ฌ๋Ÿฌ ๊ณณ์— ์‚ฐ์žฌํ•œ๋‹ค๋ฉด, ์ด ์—ญ์‹œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒ ์ฃ ?
๋”ฐ๋ผ์„œ ์ด๋Ÿฌํ•œ ์‹ฌ๋ณผ ๊ฐ’์„ ์ „์—ญ์—์„œ ๊ด€๋ฆฌํ•ด์ค„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋Ÿฌํ•œ ์ „์—ญ ์‹ฌ๋ณผ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ๋“ฑ๋ก๋œ ํ‚ค์™€ ๊ฐ’์€, ์ผ๋ฐ˜ ์‹ฌ๋ณผ๋กœ๋Š” ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€๋Šฅํ•ด์š”.

const hi = Symbol('hi')
// keyFor์€ ์ „์—ญ ์‹ฌ๋ณผ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ๋“ฑ๋ก๋œ ์‹ฌ๋ณผ์„ ๊ฒ€์ƒ‰์„ ํ•˜๋Š” ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค. 
// ์ด๋•Œ ์ „๋‹ฌ๋ฐ›๋Š” ์ธ์ˆ˜๋Š” ์˜ค๋กœ์ง€ ์‹ฌ๋ณผ ํƒ€์ž…์ž…๋‹ˆ๋‹ค.
console.log(Symbol.keyFor(hi)); // undefined

๋”ฐ๋ผ์„œ ์ „์—ญ ์‹ฌ๋ณผ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ๋“ฑ๋กํ•˜๋Š” ๋ฐฉ๋ฒ•์€, Symbol.for์ž…๋‹ˆ๋‹ค.
Symbol.for์€ ์ข€ ํŠน์ดํ•˜๊ฒŒ ๋™์ž‘ํ•˜๋Š”๋ฐ์š”, ๋“ฑ๋ก๊ณผ ๊ฒ€์ƒ‰ ๋ชจ๋‘ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
์ผ๋‹จ ๊ฒ€์ƒ‰ํ•ด๋ณด๊ณ , ์•ˆ๋˜๋ฉด ์ง์ ‘ ์ž๊ธฐ๊ฐ€ ํ‚ค์™€ ๊ฐ’์„ ์ƒ์„ฑํ•ด๋ฒ„๋ฆฝ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  Symbol.keyFor ๋ฉ”์„œ๋“œ๋Š” ์˜ค์ง ๊ฒ€์ƒ‰๋งŒ ๊ฐ€๋Šฅํ•œ ๊ธฐ๋Šฅ์„ ํ•˜์ฃ .
๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋Š” ์‹ฌ๋ฒŒ ๊ฐ’์˜ ํ‚ค์ด๋ฉฐ, ์—†๋‹ค๋ฉด undefined์ž…๋‹ˆ๋‹ค.

const s = Symbol.for('hi');
console.log(Symbol.keyFor(s)); // 'hi'

ํ”„๋กœํผํ‹ฐ ์€๋‹‰ํ™”

ํ”„๋กœํผํ‹ฐ๋ฅผ ์ˆจ๊ธธ ์ˆ˜ ์žˆ๊ณ , ์ถฉ๋Œํ•˜์ง€ ์•Š๊ฒŒ ํ•œ๋‹ค๋Š” ์ ์€ ์•ˆ์ „ํ•˜๊ฒŒ ๋ฉ”์„œ๋“œ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜
์žˆ๋‹ค๋Š” ์žฅ์ ์„ ์ฃผ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.


const _s = (key) => Symbol.for(key)

Array.prototype[_s('sum')] = function () {
	return this.reduce((acc, cur) => acc + cur, 0)
}

console.log([1,2,3,4][_s('sum')]()) // 10

๋ชจ์–‘์ด ์ด์ƒํ•˜์ง€๋งŒ, ๋งŒ์•ฝ ํ•ด๋‹น ํ”„๋กœํผํ‹ฐ๋ฅผ ํ† ๋Œ€๋กœ ์ข€ ๋” ์„ธ๋ฐ€ํ•œ ์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค๋ฉด ์–ด๋–จ๊นŒ์š”? ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ๋Š” ์ œ๋Œ€๋กœ ๋ณด์ด์ง€ ์•Š์œผ๋‚˜ ๋‚ด๋ถ€์ ์œผ๋กœ ์ •์ƒ ๊ธฐ๋Šฅ์„ ํ•˜๊ฒŒ ๋˜๊ณ , ์ข€ ๋” ์•ˆ์ „ํ•œ ์ฝ”๋“œ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง€๋Š” ์žฅ์ ์ด ์ƒ๊น๋‹ˆ๋‹ค.

์ž˜ ์•Œ๋ ค์ง„ ์‹ฌ๋ณผ (Well-known Symbol)

์ด ์นœ๊ตฌ๋“ค์€ ์ข€ ๋ฒ”์šฉ์ ์œผ๋กœ ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์‹ฌ๋ณผ๋“ค์ด์—์š”.
์ด ์นœ๊ตฌ๋“ค์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์˜ ๋‚ด๋ถ€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์‚ฌ์šฉ๋˜๋Š” ์นœ๊ตฌ๋“ค์ธ๋ฐ, ๋Œ€ํ‘œ์ ์œผ๋กœ Symbol.iterator์™€ Symbol.search๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ Symbol.iterator์„ ๊ฐ–๊ฒŒ๋œ ๊ฐ์ฒด๋Š” iterableํ•œ ์†์„ฑ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ ์ด๊ฒƒ์ด ๊ทผ๊ฐ„์ด ๋˜์–ด for ... in ... ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ ๊ฒƒ์ด ์•„๋‹๊นŒ ์ถ”์ธกํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. (์–ด๋งˆ๋ฌด์‹œํ•˜์ฃ ?)

๊ฐœ์ธ์ ์œผ๋กœ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•  ๋•Œ๋„ ์œ ์šฉํ•˜๊ฒŒ ์ผ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

const iterableObject = {
    0: 1,
    1: 2,
    2: 3,
    3: 4,
    4: 5,
	[Symbol.iterator]() {
    	let cur = 0;
	    const max = Object.keys(iterableObject).length;
        
        return {
          next() {
            return { value: iterableObject[cur++], done: cur > max + 1 };
          }
        };
    }
};

// ์ด์ œ๋Š” ๊ฐ์ฒด ์ˆœํšŒ๋ฅผ ํ†ตํ•ด ๊ฐ’์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ตฐ์š”! ๐Ÿ˜ฎ
for (let i of iterableObject) {
	console.log(i)
}

// 1
// 2
// 3
// 4
// 5

์ด๋ ‡๊ฒŒ ์ดํ„ฐ๋ ˆ์ด์…˜ ํ”„๋กœํ† ์ฝœ์„ ์‹ฌ๋ณผ๋กœ ๊ตฌํ˜„ํ•˜๋‹ˆ, ์ด์ œ๋Š” ํ”„๋กœํผํ‹ฐ ํ‚ค๊ฐ€ ๊ฒน์น˜๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๋‘๋ ค์›€์—์„œ ๋ฒ—์–ด๋‚˜๊ฒŒ ๋˜์—ˆ๋‹ค๋Š” ์ ์ด, ์–ด๋–ป๊ฒŒ ๋ณด๋ฉด ํ‘œ์ค€์„ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๊ฐœ๋ฐœ์ž ๋ถ„๋“ค๊ป˜๋Š” ๊ฝค๋‚˜ ํฐ ์œ„์•ˆ์ด ๋  ๊ฒƒ ๊ฐ™์•„์š”!

๐Ÿ’ก ๊ทธ๋ ‡๋‹ค๋ฉด, Symbol.search๋Š” ๋ฌด์—‡์ผ๊นŒ์š”?

์ด ์นœ๊ตฌ๋Š” ์ธ๋ฑ์Šค ๊ฒ€์ƒ‰์— ๊ด€ํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ์‚ฌ์šฉ๋œ ์นœ๊ตฌ์—์š”.
์‹ค์ œ๋กœ String.prototype.search (๋ฌธ์ž์—ด์ด๋‚˜ ์ •๊ทœํ‘œํ˜„์‹ ํŒจํ„ด์— ๋งž์ถฐ ์ธ๋ฑ์Šค ๊ฒ€์ƒ‰์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์นœ๊ตฌ)๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ํ˜ธ์ถœ๋œ๋‹ค๊ณ  ํ•˜๋„ค์š”!

class SearchStr {
  constructor(value) {
    this.originalString = value;
    this.value = new RegExp(value);
  }
  
  [Symbol.search](string) {
    const idx = string.search(this.value);
    if (idx < 0) return null;
    
    return string.slice(idx, idx + this.originalString.length);
  }
}

// search๋กœ ํ˜ธ์ถœ๋  ๋•Œ, ํ•ด๋‹น ์›ํ•˜๋Š” ๋กœ์ง์ด ๋ฐ˜ํ™˜๋˜๊ฒŒ๋” ํ•  ์ˆ˜ ์žˆ์–ด์š” ๐Ÿ˜‰
console.log('Hello, World!'.search(new SearchStr('Wor'))); // Wor

๐ŸŽ‰ ๋งˆ์น˜๋ฉฐ

'์™œ ๋‚ด ํ”„๋กœ์ ํŠธ๋Š” Symbol์„ ์“ฐ์ง€ ์•Š์•˜์„๊นŒ'ํ•˜๋ฉฐ ์ง€๋‚˜์นœ ํ›„ํšŒ๋Š” ํ•˜์ง€ ์•Š์œผ์…”๋„ ๋ฌด๋ฐฉํ•ฉ๋‹ˆ๋‹ค.
์‹ค์ œ๋กœ๋„ MDN์—์„œ๋„ ํ•ด๋‹น ํƒ€์ž…์— ๊ด€ํ•˜์—ฌ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งํ•ฉ๋‹ˆ๋‹ค.

Symbol ํƒ€์ž…์€ ๊ณ ๋„๋กœ ํŠนํ™”๋œ ์šฉ๋„๋กœ ์“ฐ์ด๋ฉฐ, ๋ฒ”์šฉ์„ฑ์€ ํ˜„์ €ํžˆ ๋–จ์–ด์ง‘๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ์ด๋ฅผ ์•ˆ ์ผ๋‹ค๊ณ  ์ž์ฑ…ํ•˜๊ธฐ๋ณด๋‹ค๋Š”, ์ข€ ๋” ์‹ค์šฉ์ ์œผ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ํŽธํ•  ๊ฒƒ ๊ฐ™์•„์š”.

๋ชจ๋“  ๊ฐœ๋ฐœ์€ ๋ฆฌ์†Œ์Šค ์‹ธ์›€์ด๋ผ๊ณ  ์ƒ๊ฐํ•ด์š”. ๋ฆฌ์†Œ์Šค ํˆฌ์ž… ๋Œ€๋น„, ์–ผ๋งˆ๋‚˜ ์‚ฐ์ถœ์ด ๋˜๋Š”์ง€์— ๋”ฐ๋ผ ์‚ฌ๋žŒ์˜ ๋Šฅ๋ ฅ์ด ๊ฒฐ์ •๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋งŒ์•ฝ ์†Œ์†Œํ•˜๊ณ  ์ž‘์€ ํ”„๋กœ์ ํŠธ์— ์ด๋Ÿฌํ•œ ํƒ€์ž…์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, ์ด๋Š” ์–ด์ฉŒ๋ฉด ๋ฐ”๋Š˜๋กœ ์†Œ ์žก๋Š” ๊ฒฉ์ผ ์ˆ˜๋„ ์žˆ์œผ๋ฏ€๋กœ, ์šฐ๋ฆฌ๋Š” ํ•ฉ๋ฆฌ์ ์œผ๋กœ ๊ฐœ๋ฐœ์„ ํ•œ ๊ฒƒ์ด๋ž๋‹ˆ๋‹ค. ๐Ÿ˜‰

๊ทธ๋Ÿผ, ๋‹ค๋“ค ์˜ค๋Š˜๋„ ์ฆ๊ฑฐ์šด ์ฝ”๋”ฉํ•˜์‹œ๊ธธ ๋ฐ”๋ผ๋ฉฐ. ์ด์ƒ! ๐ŸŒˆ

๐Ÿ“ ์ฐธ๊ณ ์ž๋ฃŒ

MDN - Symbol

profile
People are scared of falling to the bottom but born from there. What they've lost is nth. ๐Ÿ˜‰
post-custom-banner

0๊ฐœ์˜ ๋Œ“๊ธ€