서카츄 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());