[ECMAScript 6] Symbol - 7번째 primitive type
지금까지 자바스크립트에는 number
, boolean
, string
, null
, undefined
, object
의 6가지 타입밖에 없었다. 그래서 C의 enum 같은 타입이 필요하거나, 일종의 태깅 같은 것을 위해 고유한 값이 필요했을 경우 보통 number
나 string
타입을 이용했다.
하지만 ECMAScript 6에서는 이제 number
나 string
을 이용할 필요가 없다. ECMAScript 6에서는 새로운 타입인 Symbol
타입이 추가되었기 때문이다.
Symbol
타입의 값은 Symbol
함수를 통해서만 생성할 수 있고, 생성자를 통해서 만들 수 없다.
Symbol
함수는 인자로 description을 받을 수도 있고, 아무 인자도 받지 않을 수도 있다. 이 인자는 실제로 생성되는 Symbol
에 영향을 주지 않는다. 로깅 등을 위해서 toString
함수를 이용해 string으로 변환할 때, 반영되지만 이는 디버깅을 위해서고, 일반적으로 이 description을 이용할 일은 없다. 같은 description을 이용해 생성한 Symbol
도 실제로는 다른 값을 가진다.
이는 Symbol
타입이 unique함을 보장하기 때문이다. Symbol
타입은 immutability와 unique 함이 보장된다. number
나 string
도 immutability는 보장된다. 하지만 unique 함은 보장되지 않는다. 이것이 Symbol
타입과 number
/string
타입과의 차이점이다. 같은 Symbol
을 가지고 오기 위해서는 생성한 Symbol
을 전역 변수로 등록시키고 있어야 한다. 이것을 해주는 게 for
함수이다.
Symbol.for()
함수는 key를 인자로 받는다. 이전에 같은 key로 생성한 Symbol
이 있으면 그 Symbol
을 돌려주고, 처음 받은 key면 새로운 Symbol
을 생성하여, 저장한 뒤 돌려준다.
주의해야 할 것은 Symbol.for(key)
함수는 이미 등록된 Symbol
이 있을 경우만 그것을 가지고 올 수 있다는 것이다. 따라서 Symbol(description)
을 이용해서 생성한 Symbol
은 Symbol.for(key)
를 이용해서 가지고 올 수 없다.
이런 특징을 이용해서 아래와 같이 object
의 private property를 만드는 것도 가능하다.
댓글
댓글 쓰기