-
μλ°μ€ν¬λ¦½νΈμ 7λ²μ§Έ μμν νμ μ΄ μλ€λλ°(Symbol)μΉ΄ν κ³ λ¦¬ μμ 2023. 2. 13. 04:09
TLDR;
μ¬λ³Όμ ES6μμ λμ λ 7λ²μ§Έ λ°μ΄ν° νμ μΌλ‘ λ³κ²½ λΆκ°λ₯ν μμ νμ μ κ°μ΄λ€. μ¬λ³Όμ λ€λ₯Έ κ°κ³Ό μ€λ³΅λμ§ μλ μ μΌλ¬΄μ΄ν κ°μΌλ‘, μ΄λ¦ μΆ©λμ΄ μλ μ μΌν νλ‘νΌν° ν€λ₯Ό λ§λ€κΈ° μν΄μ¬λ³Όμ ES6μμ λμ λ 7λ²μ§Έ λ°μ΄ν° νμ μΌλ‘ λ³κ²½ λΆκ°λ₯ν μμ νμ μ κ°μ΄λ€. μ¬λ³Όμ λ€λ₯Έ κ°κ³Ό μ€λ³΅λμ§ μλ μ μΌλ¬΄μ΄ν κ°μΌλ‘, μ΄λ¦ μΆ©λμ΄ μλ μ μΌν νλ‘νΌν° ν€λ₯Ό λ§λ€κΈ° μν΄ μ¬μ©λλ€.
μ¬λ³Ό μ¬μ©λ²
Symbol μμ±
- Symbol ν¨μλ₯Ό νΈμΆνμ¬ μμ±
- ( )κ΄νΈ μμ λ¬Έμμ΄μ λλ²κΉ μ©λλ‘λ§ μ¬μ©λλ μ¬λ²κ°μ λν μ€λͺ μ
- μ무리 κ°μ μ΄λ¦μΌλ‘ λ§μ΄ λ§λ€μ΄λ μ λ κ°μκ² λ§λ€μ΄μ§μ§ μμ(μ¬λ²μ μ μΌλ¬΄μ΄ν κ°)
const mySymbol = Symbol(); // Symbol ν¨μ νΈμΆνλ©΄ λλ€. const mySymbol2 = Symbol('mySymbol2'); // λλ²κΉ μ©λλ‘ μ¬μ©λλ μ¬λ²κ°μ λν μ€λͺ const mySymbol3 = Symbol('mySymbol2'); const mySymbol4 = Symbol(); console.log(mySymbol == mySymbol4); // false
μ μ Symbol μμ±
μ¬λ³Όμ λͺ¨λ μ΄λ¦μ΄ κ°λλΌλ λͺ¨λ λ³κ°λ‘ μ·¨κΈλλ€. κ·Έλ¬λ©΄, μ΄λ¦μ΄ κ°μ μ¬λ³Όμ΄ κ°μ κ°μ²΄λ₯Ό κ°λ¦¬ν€λλ‘ νκ³ μμ λμλ μ΄λ»κ² ν΄μΌνλ? μλ₯Ό λ€μ΄, μ ν리μΌμ΄μ κ³³κ³³μ μ¬λ³Ό "id"λ₯Ό μ΄μ©ν΄ νΉμ νλ‘νΌν°μ μ κ·Όν΄μΌνλ€λ©΄?
μ΄λ΄ λλ₯Ό μν΄ λ§λ€μ΄μ§ κ²μ΄
μ μ μ¬λ² λ μ§μ€νΈλ¦¬
μΈλ°, μ μ μ¬λ² λ μ§μ€νΈλ¦¬ μμ μ¬λ³Όμ λ§λ€κ³ ν΄λΉ μ¬λ³Όμ μ κ·Όνλ©΄, μ΄λ¦μ΄ κ°μ κ²½μ° νμ λμΌν μ¬λ³Όμ λ°νν΄μ€λ€.Symbol.for
μΈμλ‘ μ λ¬λ°μ λ¬Έμμ΄μ ν€λ‘ μ¬μ©νμ¬ ν€μ μ¬λ² κ°μ μλ€μ΄ μ μ₯λμ΄ μλ μ μ μ¬λ² λ μ§μ€νΈλ¦¬μμ ν΄λΉ ν€μ μΌμΉνλ μ¬λ² κ°μ κ²μμμΌλ©΄ μλ‘ λ±λ‘, μμΌλ©΄ κΈ°μ‘΄ κ°μ μ½μ΄μ΄
const s1 = Symbol.for('id'); // κΈ°μ‘΄μ μ μ μ¬λ² λ μ§μ€νΈλ¦¬μ 'id'λ ν€λ‘ μ μ₯λ μ μμΌλ©΄ μλ‘ μμ± const s2 = Symbol.for('id'); // κΈ°μ‘΄μ λ§λ€μ΄μ Έ μλ 'id'λ ν€λ‘ λ μ¬λ² κ° λ°ν // νμΈ! console.log(s1 === s2); //true
Symbol.keyFor
μ μ μ¬λ² λ μ§μ€νΈλ¦¬μ μ μ₯λ μ¬λ² κ°μ ν€λ₯Ό μΆμΆν μ μλ€.const s1 = Symbol.for('id'); Symbol.keyFor(s1); // 'id'
μ¬λ² νλ‘νΌν° κ°μ²΄ ν€λ‘ μ¬μ©νκΈ°
λκ΄νΈ
λ₯Ό μ΄μ©νμ¬ μμ± λ° μ¬μ©νλ€.const obj = { [Symbol.for('mySymbol')] : 1, // λκ΄νΈ μ¬μ©νμ¬ μμ± } obj[Symbol.for('mySymbol')]; // λ§μ°¬κ°μ§λ‘ λκ΄νΈλ‘ μμ±. λμ μΌλ‘ μμ± const id = Symbol('id'); obj[id] = 123; console.log(obj); // { Symbol(mySymbol) : 1, Symbol(id) : 123 }
νλ‘νΌν°λ₯Ό μμ ν μ¨κΈΈ μ μλ κ²μ μλκ³ ,
Object.getOwnPropertySymbols
λ©μλλ₯Ό μ¬μ©νλ©΄ μ¬λ² κ°μ νλ‘νΌν° ν€λ‘ μ¬μ©νμ¬ μμ±ν νλ‘νΌν°λ₯Ό μ°Ύμ μ μλ€.const obj = 1 { // μ¬λ² κ°μΌλ‘ νλ‘νΌν° ν€λ₯Ό μμ± [Symbol('mySymbol')] : 1 }; console.log(Object.getOwnPropertySymbols(obj)); // [Symbol(mySymbol)] const symbolKey = Object.getOwnPropertySymbols(obj)[0]; console.log(obj[symbolKey]); // 1
Well-known Symbol
μλ°μ€ν¬λ¦½νΈκ° κΈ°λ³Έ μ 곡νλ λΉνΈμΈ μ¬λ² κ°μ΄ μλ€.
Symbol.hasInstance
Symbol.isConcatSpreadable
Symbol.iterator
Symbol.toPrimitive
- κΈ°ν λ±λ±
μ°Έκ³
- https://ko.javascript.info/symbol
- μλ°μ€ν¬λ¦½νΈ λ₯λ€μ΄λΈ μ¬μ©λλ€.