티스토리 뷰

저번 포스팅에서 객체에 키(key)로는 문자열만 들어갈 수 있다고 말했습니다. 하지만 es6에 심볼이라는 원시 타입이 생기면서 객체의 키로 심볼도 들어갈 수 있게 되었습니다.

객체의 키(key)로 심볼(symbol) 넣기 



const S = Symbol("this is symbol");


심볼을 만드는 방법은 Symbol() 하나밖에 없습니다. 이제 객체에 다른 키-값들과 함께 넣어보겠습니다.


const obj = {
  name: "lemon",
  S: "not symbol",
  [S]: "symbol"
};


obj라는 객체에 세 개의 프로퍼티를 주었습니다. 그냥 S라고 적힌 key는 문자열이고, [S]라고 적혀 있는게 위에서 생성한 심볼입니다. 괄호를 하지 않으면 당연하게도 문자열로 인식해서 우리가 생성한 심볼이 아니라 새로운 문자열이 들어가게 됩니다..

왜 사용할까?



원시 타입에서 심볼을 설명하면서 유일한 식별자를 만들 수 있다고 얘기한 것이 기억나시나요? 심볼을 매번 다른 심볼을 만들어 내기 때문입니다. 그리고 약간의 비공개 이름 기능을 가지게 된다고도 같이 설명했습니다. 객체에 키를 보는 방법 중에 Object.keys()라는 기능이 있습니다. 괄호 사이에 객체를 넣으면 객체의 키를 다 보여줍니다.


Object,keys(obj);


우리는 객체를 정의할 때 키 3개를 정의했습니다만 반환되는건 2개일 것입니다. 키를 불러올 때 심볼은 숨겨지기 때문입니다. 


심볼 키 확인하기



객체의 키를 확인하는 방법은 두가지가 있습니다. 객체명.속성명과 객체명["속성명"]입니다. 하지만 일반적인 문자열일 경우 2가지가 다 가능한 것이었죠? 키에 숫자를 쓰셧다면 당연히 객체명["숫자"]로 접근해야 합니다.(저번시간에 예로 들었습니다.) 


obj.S; // not symbol이라는 값이 나옴
obj[S]; // symbol이라는 값이 나옴


심볼의 경우는 소스코드처럼 객체명[심볼이 담긴 변수] 형태로 접근할 수 있습니다. obj.S라고 접근하면 안에 들어있는 문자열 S의 값을 확인합니다. 심볼은 이미 변수에 담겨 있으니 따옴표가 없어야 하는 것을 잊지 말아주세요.

댓글