-
[JAVASCRIPT-모던자바스크립트] 심볼형2Javascript& React study 2021. 11. 6. 18:34728x90반응형SMALL
숨김 프로퍼티
심볼을 이용하게 되면 '숨김(hidden)' 프로퍼티를 만들 수 있다. 숨김 프로퍼티는 외부 코드에서 접근이 불가능하고 값도 덮어쓸 수 없는 프로퍼티이다.
서드파티 코드에서 가지고 온 user라는 객체가 여러 개 있고 user를 이용해 어떤 작업을 해야 하는 상황이라고 가정해보자. user에 식별자를 붙여주도록 하자.
식별자는 심볼을 이용해서 만들도록 한다.
let user = { // 서드파티 코드에서 가져온 객체 name : "John" }; let id = Symbol("id"); user[id] = 1; alert( user[id] ); // 심볼을 키로 사용해 데이터에 접근할 수 있다.
문자열 "id"를 키로 사용해도 상관은 없는데 Symbol("id")을 사용하는 이유는?
user는 서드파티 코드에서 가지고 온 객체이므로 함부로 새로운 프로퍼티를 추가할 수 없다. 그렇지만 심볼은 서드파티 코드에서 접근할 수 없기 때문에 심볼을 사용하게 되면 서드파티 코드가 모르게 user에 식별자를 부여할 수 있다.
제 3의 스크립트인 (자바스크립트 라이브러리 등)에서 user를 식별해야 하는 상황이 벌어졌다고 해보자 user의 원천이 되는 서드파티 코드, 현재 작성중인 스크립트, 제 3의 스크립트가 각자 서로의 코드도 모른 채 user를 식별해야 하는 상황이 벌어지게 된다.
제 3의 스크립트에서는 Symbol("id")을 이용해서 전용 식별자를 만들어서 사용할 수 있다.
let id = Symbol("id"); user[id] = "제 3의 스크립트 id값";
심볼은 유일성이 보장이 되므로 우리가 만든 식별자와 제 3의 스크립트에서 만든 식별자가 충돌하지 않는다. 이름이 같다고 하더라도 말이다.
심볼 대신에 문자열 "id"를 사용해서 식별자를 만들었다고 한다면 충돌이 발생할 가능성이 많다.
let user = { name : "John" }; // 문자열 "id"를 사용해 식별자를 만들었습니다. user.id = "스크립트 id값"; // 만약 제 3의 스크립트가 우리 스크립트와 동일하게 문자열 "id"를 이용해서 식별자를 만들었다면.. user.id = "제3 스크립트 id 값" // 의도치 않게 값이 덮어 쓰여서 우리가 만든 식별자는 무의미해진다.
Symbols in a literal
객체 리터럴 {...}을 사용해 객체를 만든 경우,대괄호를 사용해 심볼형 키를 만들어야 한다.
let id = Symbol("id"); let user = { name : "John", [id]: 123 // :"id": 123은 안됨 };
"id: 123"이라고 한다면 심볼 id가 아니라 문자열 "id"가 키가 된다.
728x90반응형LIST'Javascript& React study' 카테고리의 다른 글
[JAVASCRIPT-모던자바스크립트] 심볼형5 (0) 2021.11.13 [JAVASCRIPT-모던자바스크립트] 심볼형3 (2) 2021.11.07 [JAVASCRIPT-모던자바스크립트] 옵셔널 체이닝 '?.'3 / 심볼형 (7) 2021.10.31 [JAVASCRIPT-모던자바스크립트] 옵셔널 체이닝 '?.'2 (0) 2021.10.30 [JAVASCRIPT-모던자바스크립트] 옵셔널 체이닝 '?.' (1) 2021.10.24