728x90
반응형
'심볼(Symbol)'은 유일한 식별자를 만들고 싶을 때 사용한다.
Symbol([description])을 사용하면 심볼값을 만들 수 있다.
let id = Symbol();
let id = Symbol("id");
심볼은 유일성이 보장되는 자료형이기 때문에, description이 동일한 심볼을 여러 개 만들어도 각 심볼값은 다르다.
let id1 = Symbol("id");
let id2 = Symbol("id");
alert( id1 == id2 ); // false
심볼형 값은 다른 자료형으로 암시적 형 변환(자동 형 변환)되지 않는다.
let id = Symbol("id");
alert( id ); // TypeError
alert( id.toString() ); // 'Symbol(id)'가 출력됨
alert( id.description ); // 'id'가 출력됨
숨김 프로퍼티
숨김 프로퍼티는 외부 코드에서 접근이 불가능하고 값도 덮어쓸 수 없는 프로퍼티이다.
키가 심볼인 경우엔 for .. in 의 대상이 되지 않아서 의도치 않게 프로퍼티가 수정되는 것을 예방할 수 있다.
외부 스크립트나 라이브러리는 심볼 정보를 갖고 있지 않아서 프로퍼티에 직접 접근하는것도 불가능해진다.
객체에서 []을 이용하여 적용할 수 있다.
let user = { name: "Jack" };
let id = Symbol("id");
user[id] = "id 값";
let id = Symbol("id");
let user = {
name: "Jack",
[id]: "id 값"
}
전역 심볼
전역 심볼 레지스트리(global symbol registry)는 애플리케이션 곳곳에서 심볼 "id"를 이용해 특정 프로퍼티에 접근해야 할 경우를 위해 만들어졌다. 전역 심볼 레지스트리 안에 심볼을 만들고 해당 심볼에 접근하면, 이름이 같은 경우 항상 동일한 심볼을 반환해준다. 레지스트리 안에 있는 심볼을 읽거나, 새로운 심볼을 생성하려면 Symbol.for(key)를 사용하면 된다.
//전역 레지스트리에서 심볼을 읽는다.
let id = Symbol.for("id"); // 심볼이 존재하지 않으면 새로운 심볼을 만든다.
let idAgain = Symbol.for("id");
alert( id == idAgain ); // true
Symbol.keyFor(sym)를 이용하면 key를 얻을 수 있다.
let sym = Symbol.for("name");
alert( Symbol.keyFor(sym) ); // name
전역 심볼이 아닌 경우에는 찾을 수 없다.
전역 심볼이 아닌 경우에는 description 프로퍼티를 사용하여 key를 찾으면 된다.
728x90
반응형
'JavaScript' 카테고리의 다른 글
JavaScript ) 래퍼 객체 (0) | 2022.03.01 |
---|---|
JavaScript 객체의 형변환 (0) | 2022.02.25 |
JavaScript this와 체이닝 (0) | 2022.02.10 |
JavaScript 가비지 컬렉션 (0) | 2022.02.10 |
JavaScript 객체의 동작방식 (0) | 2022.02.10 |
댓글