• Symbold

    2022. 11. 2.

    by. 서카츄

    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());

     

    '🐶 etc > 2022기록' 카테고리의 다른 글

    js 요소 선택하기  (0) 2023.03.29
    배열  (0) 2023.03.29
    ES6에서의 객체지향  (0) 2022.11.02
    객체지향의 개념 (생성자함수, prototype, ES5)  (0) 2022.11.02
    console.dir(btn)/addEventListener  (0) 2022.10.26

    댓글