Javascript-4 (Symbol)

Patrick·2021년 4월 11일
0

Javascript

목록 보기
4/18
post-thumbnail

오늘은 유일한 식별자를 만들 때 사용하는 심볼(Symbol)에 대한 공부를 해봤다.

정리를 해보자면....

일반적으로 우리가 Object property key를 만들 때는 문자형으로 만들었다

const obj = {
    1: "1 입니다",
    false: "거짓"
}

Object.keys(obj); // ["1", "false"]
obj['1'] // "1 입니다"
obj['false'] // "거짓"

앞서 공부했던 Object Method를 사용해서 가져와보면 문자형으로 보이는 것을 알 수 있다.

문자형으로도 가능하지만 또 하나 가능한 것이 있으니 바로 심볼(Symbol)형 이다.

Symbol

symbol의 기본 틀은 이러하다..!

const a = Symbol(); 

Symbol의 특징 첫 번째!
유일한 식별자를 만들 때 사용하게 되며, new를 붙이지 않는다.

'유일한 식별자' 라는 설명답게, 똑같은 것을 할당해도 다르게 나온다.

const a = Symbol(); 
const b = Symbol(); 

console.log(a) // Symbol()
console.log(b) // Symbol()

a === b // false
a == b // false

이렇게 console.log를 찍어보면 생긴 것은 같지만 일치연산자, 동등연산자 모두 false로 나온다.

Symbol의 특징 두 번째!
유일성이 보장이 된다.

const id = Symbol('id');
const id2 = Symbol('id');

이런 경우 id, id2를 찍어보면 같은 결과가 나오지만 동등연산자, 일치연산자 모두 false가 나오게 된다.

Symbol을 객체 key로 사용하기

const id = Symbol('id');
const user = {
    name: "Mike";
    age: 30,
    [id]: "myid"
}

user // {name: "Mike", age: 30, Symbol(id): "myid"}
user[id] // "myid"

※ [id] 이러한 computed method를 처음본다면 앞선 블로그를 먼저 보고 오시면 좋습니다!

이렇게 user를 호출하면 Symbol(id): "myid"가 잘 나오지만, 이를 Object로 불러보면 나오지 않는다.
Object.keys,values,entries 이러한 메소드들은 key가 Symbol인 것들은 건너뛰기 때문이다.
for in을 사용해도 건너뛰기 때문에 나오지 않는다.


그렇다면 언제 사용할 수 있을까?
이는 다른 사람이 만들어 놓은 객체를 내가 손을 볼 때, 내가 만든 것으로 자칫 덮어쓰거나 하면 안 되므로 안전하게 사용해야 할 때 사용된다.
Symbol을 사용하면 원본 data는 건들이지 않고, 속성을 추가하는데 사용 할 수 있기 때문이다.


Symbol.for() 라는 것이 있는데 이는 "전역심볼"이다
이는 같은 이름으로 같은 객체를 가리켜야 할 때 사용 된다.
예를 들어...

const id1 = Symbol.for('id');
const id2 = Symbol.for('id');

id1 === id2; // true

이때는 일치연산자를 쓰면 true가 나온다.
같은 id를 공유하고 있기 때문이다.

Symbol의 id를 얻고 싶다면
전역 심볼의 경우

Symbol.keyFor(id1) // id

이렇게 사용할 수 있으며
전역심볼이 아닌 경우에는

const id = Symbol('id 입니다');

id.description; // 'id 입니다'

description으로 이름을 알 수 있다

profile
예술을 사랑하는 개발자

0개의 댓글