자바스크립트로 뭔가를 작성할 때, Object 객체를 아주 많이 사용한다.
근데 작성자가 임의로 정의한 Object의 key가 어느 날 자바스크립트에서 사용되는 내장된 key와 동일하면 문제가 발생할 수 있다.
이러한 문제를 방지하고자 사용하는게 Symbol 객체이다.
symbol은 충돌이 일어나지 않는 유일한 key 값을 만들어준다.
let school = {
grade: "1학년",
classNo: "3반",
getFullclass: function () {
return this.grade + " " + this.classNo;
},
};
console.log(school.getFullclass());
for (const key in school) {
console.log(key);
}
getFullclass 라는 키를 추가했고, key 목록을 출력해봤다. 결과로 키 값이 다 노출되고있다.
반면 Symbol을 사용해서 동일한 결과를 만들어보면
let school2 = {
grade: "1학년",
classNo: "3반",
};
let getFullclass = Symbol("getFullclass");
school2[getFullclass] = function () {
return this.grade + " " + this.classNo;
};
for (const key in school2) {
console.log(key);
}
key를 출력하면 임의로 추가한 key인 getFullclass가 안보인다
console.log(school2[getFullclass]());
콘솔로 추가한 키 값을 찍어보면 정상적으로 추가한 키의 데이터가 나온다.