본문 바로가기
JavaScript

JavaScript 심볼형

by 하이방가루 2022. 2. 14.
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

댓글