🐶 etc/2022기록
Symbold
서카츄
2022. 11. 2. 10:26
symbol의 개념 및 객체의 키값으로 활용한 예
//인수로 전달되는 문자값은 객체내부에서 보통 키값으로 활용
//설사 같은 문자값을 인수로 넣어도 반환값을 서로 다름 (객체의 키값을 고유성을 유지하기 위함)
//심볼은 주로 객체의 키값으로 지정할때 사용되며
//심볼로 생성된 키값은 객체 외부에서 접근이 불가능하기 때문에
//심볼로 생성된 키에 저장된 value값은 은닉화가능
const a1 = Symbol('aa');
const a2 = Symbol('aa');
console.log(a1 === a2); //같은 문자열로 만들어진 심볼이라도 결과값은 다름 (false반환)
//심볼을 객체의 키값으로 활용한 예
const key = Symbol('key');
const student = {
name: '홍길동',
//객체의 키값에 변수를 적용하려면 []로 감싸줌 (es6)
[key]: '변경되면 안될 매우 중요한 정보'
}
student.name = '김영희';
console.log(student);
//심볼로 적용된 key값은 호출자체가 불가능하므로 해당 심볼로 지정된 value값은 은닉화 가능
클래스 내부에서 Symbol로 멤버변수를 은닉화 예
/*
class Calc {
constructor() {
this.count = 100;
this.plus();
}
plus() {
return this.count++;
}
}
const a = new Calc();
a.count = 5;
console.log(a);
console.log(a.plus());
console.log(a.plus());
*/
const count = Symbol('증가할 값');
//해당 클래스 안쪽에 있는 멤버변수를 Symbol로 지정해서 class외부에서 해당 맴버변수값에 접근 불가처리
class Calc {
constructor() {
this[count] = 100;
this.plus();
}
plus() {
return this[count]++;
}
}
const a = new Calc();
console.log(a);
console.log(a.plus());
console.log(a.plus());