๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

javascript/ES6

ES6 javascript : Symbol(์‹ฌ๋ณผ)

728x90

https://www.scaler.com/topics/javascript-symbol/

Symbol์€ *์›์‹œํ˜• ํƒ€์ž…์ด๊ณ  ๊ฐ์ฒด์˜ ์†์„ฑ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค. 

(* ์›์‹œํ˜• :  Number, String , Null, Undefined, Boolean, +Symbol(ES6) /  ์ฐธ์กฐํ˜• : Object)

Symbol์„ ๋ฒˆ์—ญํ•˜๋ฉด, '์ƒ์ง•' ์ธ๋ฐ ์ด์ฒ˜๋Ÿผ ์œ ์ผ๋ฌด์ดํ•œ ๊ฐ’, ๊ณ ์œ ํ•œ ๊ฐ’์„ ๊ฐ€์ง„๋‹ค.

-> ๊ฐ์ฒด ์†์„ฑ(like length)๋„ ๋ฎ์–ด์“ธ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ๋•Œ๋ฌธ์— ๋‚ด์žฅ ์†์„ฑ๊ณผ ๊ตฌ๋ถ„ ํ•  ์ˆ˜ ์žˆ๋„๋ก Symbol์„ ์‚ฌ์šฉํ•œ๋‹ค.

๋˜ํ•œ Symbol์€ ๋ณ€๊ฒฝ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๋ถˆ๋ณ€๊ฐ’! ์ด๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด ๋ฐฐ์—ด ๊ฐ์ฒด๋ฅผ "arr.length"๊ฐ€ ๊ฐ™์€ ์ด๋ฆ„์˜ length๋กœ ๋ฎ์–ด์“ฐ๋ฉด ๋ฎ์–ด์จ์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ!
์ด๋•Œ ๋ฐฐ์—ด์˜ ๊ธธ์ด ๊ฐ’์€ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜๋ฉด์„œ, ๊ฐ™์€ ์ด๋ฆ„์˜ length ์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๊ณ ์ž ํ• ๋•Œ
-->Symbol์„ ์‚ฌ์šฉํ•œ๋‹ค.

let ar =[1,2,3,4,5];
console.log(ar.length); //5

ar.length=50 //ar๋ฐฐ์—ด length์†์„ฑ์„ ์ •์˜ํ•˜๊ณ  50์„ ํ• ๋‹น(๋ฎ์–ด์“ฐ๊ธฐ)
console.log(ar.length); // 50
console.log(ar) // (50) [1, 2, 3, 4, 5, empty × 45]


// Symbol ์‚ฌ์šฉ
let ar2=[1,2,3,4,5];
const length=Symbol('length');

ar2[length]=50; //ar2 ๋ฐฐ์—ด์˜ length์†์„ฑ์— 50์„ ํ• ๋‹น
console.log(ar2.length) //5
console.log(ar2[length]) //50
console.log(ar2) //(5) [1, 2, 3, 4, 5, Symbol(length): 50]

Symbol์€ ๋งค๋ฒˆ ์‹ฌ๋ณผํ•จ์ˆ˜ ํ˜ธ์ถœ์‹œ ์ƒˆ๋กœ์šด ์‹ฌ๋ณผ ๊ฐ’์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

// Symbol('___') : '___' ์•„๋ฌด์˜๋ฏธ๋ฅผ ๊ฐ–์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋ž˜์„œ Symbol() ๋นˆ์นธ์œผ๋กœ ์„ ์–ธํ•ด๋„ ๋ฌด๊ด€ํ•˜๋‹ค.
let s1=Symbol('jane')
let s2=Symbol('jane')

console.log(s1==s2) // false - s1,s2๋Š” ๊ฐ™์€ ๊ฐ’('jane')์„ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ ์™„์ „ํžˆ ๋‹ค๋ฅด๋‹ค.

 

๋˜ํ•œ Symbol์€ for ..in ๊ตฌ๋ฌธ์œผ๋กœ ๋ฐ˜๋ณต์‹œ ์ถœ๋ ฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (์€๋‹‰์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.)

let ar6=[1,2,3,4]
ar6.someProperty=10
console.log(ar6)
//  [1, 2, 3, 4, Symbol(someProperty): 10]
console.log(ar6) //4
for(let i in ar6){
    console.log(i)
}
/*
0
1
2
3	
*/

 

 

 

 

728x90