Home Javascript Symbol
Post
Cancel

Javascript Symbol

들어가며

  • 이 내용은 Javascript ES6+ 제대로 알아보기 - 중급 강의 중 Symbol를 정리한 내용 입니다.
  • 강의링크

Symbol

  • ES6에서 새로 추가된 자료형
  • 유일무이하고 고유한 존재
  • 비공개 멤버에 대한 요구에서 탄생
  • 기본적인 열거대상에서 제외
  • 암묵적 형변환 불가

유일무의하고 고유한 존재

Symbol를 생성할 때 같은 string을 부여한다해도 둘을 다르다고 평가한다. 따라서 생성할 때 Symbol을 저장하고 있는 변수가 계속 필요하다.

1
2
3
4
 const sy1 = Symbol('symbol');
 const sy2 = Symbol('symbol');

 sy1 === sy2; // false

Symbol를 이용한 비공개 멤버 구현

obj라는 함수는 객체를 반환하는 기능을 가지고 있는 함수 이다.

_name이라는 Symbol를 생성해서 반환할 객체에 프로퍼티명으로 지정하였다.

obj 함수 밖에서는 _name 값을 알 수 없기 때문에(유일무의한 값이기 때문에) 제공해주는 getter, setter를 이용해서 name을 조작해야될 수 밖에 없다.

이러써 name 프로퍼티를 은닉화 할 수 있게 되었다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
const obj = () => {
    const _name = Symbol();
    return {
        [_name]: '',
        get name() {
            return this[_name];
        },
        set name(name) {
            if(name?.length > 0) {
                this[_name] = name;
            }
        }
    }
}
const x = obj();
x.name = 'Tom'

물론 Reflect.ownKeys() 를 이용해서 객체에 속한 Symbol도 뽑을 수 있지만 뽑아낸 Symbol이 어떠한 의미인지 모르기 때문에 실제 사용단계에서는 접근하기가 불가능 할 것이다.

This post is licensed under CC BY 4.0 by the author.