본문 바로가기
Books/모던 JS Deep Dive ✔️

[모던 JS Deep Dive] 33장 - 7번째 데이터 타입 Symbol

by Aaron-Kim 2022. 1. 19.

33.1 심벌이란?

  - ES6에서 도입된 7번째 데이터 타입, 변경 불가능한 원시 타입의 값

  - 다른 값과 중복되지 않는 유일무이한 값

  - 주로 이름의 충돌 위험이 없는 유일한 프로퍼티 키 만들기 위해 사용

    - 프로퍼티 키로 사용할 수 있는 값은 빈 문자열을 포함하는 모든 문자열 or 심벌 값

33.2 심벌 값의 생성

  - Symbol 함수

    - 심벌 값은 Symbol 함수 호출하여 생성

    - 리터럴 표기법으로 값 생성 불가

    - 생성된 심벌 값은 외부로 노출되지 않아 확인 불가, 다른 값과 절대 중복되지 않는 유일무이한 값

    - new 연산자와 함께 호출하지 않음 (생성자 함수가 아님)

    - 선택적으로 문자열을 인수로 전달 가능

      - 문자열은 생성된 심벌 값에 대한 설명으로 디버깅 용도로만 사용됨

      - 심벌 값 생성에 영향 주지 않음

    - 심벌도 암묵적으로 래퍼 객체 생성

    - 심벌 값은 암묵적으로 문자열이나 숫자 타입으로 변환되지 않음

      - 하지만, 불리언 타입으로는 암묵적으로 타입 변환됨

      - if 문 등에서 존재 확인 가능

  - Symbol.for / Symbol.keyFor 메서드

    - Symbol.for

      - 인수로 전달받은 문자열을 키로 사용하여 키와 심벌 값의 쌍들이 저장되어 있는 전역 레지스트리에서

        해당 키와 일치하는 심벌 값 검색

      - 검색 성공 시 검색된 심벌 값 반환

      - 검색 실패 시 새로운 심벌 값 생성하여 인수로 전달된 키로 전역 심벌 레지스트리에 저장한 후,

        생성된 심벌 값 반환

      - 애플리케이션 전역에서 중복되지 않는 유일무이한 상수인 심벌 값을 단 하나만 생성하여,

        전역 심벌 레지스트리를 통해 공유 가능

    - Symbol.keyFor

      - 전역 심벌 레지스트리에 저장된 심벌 값의 키 추출 가능

33.3 심벌과 상수

  - 변경/중복될 가능성이 있는 무의미한 상수 대신 중복될 가능성이 없는 유일무이한 심벌 값 사용 가능

  - JS에서는 enum 지원 X (TS는 가능)

33.4 심벌과 프로퍼티 키

  - 심벌 값을 프로퍼티 키로 사용하려면 프로퍼티 키로 사용할 심벌 값에 대괄호 사용해야 함

    - 프로퍼티 접근할 때도 대괄호 이용해야 함

  - 심벌 값은 유일무이한 값으로 절대로 다른 프로퍼티 키와 충돌하지 않음

33.5 심벌과 프로퍼티 은닉

  - 심벌 값을 프로퍼티 키로 사용하여 생성한 프로퍼티는 for ... in 문이나

    Object.keys, Object.getOwnPropertyNames 메서드로 찾을 수 없음

  - 외부에 노출할 필요 없는 프로퍼티 은닉 가능

  - ES6 Object.getOwnPropertySymbols 메서드 사용하면 심벌 키로 되어 있는 프로퍼티 찾기 가능

33.6 심벌과 표준 빌트인 객체 확장

  - 일반적으로 표준 빌트인 객체는 읽기 전용으로 사용하는 것이 좋음 (확장 권장 X)

    - 개발자가 직접 추가한 메서드와 미래에 표준 사양으로 추가될 메서드의 이름 중복 가능성

    - 중복될 가능성 없는 심벌 값으로 프로퍼티 키 생성하여 표준 빌트인 객체 확장하면,

      표준 빌트인 객체의 기존 프로퍼티 키와 충돌하지 않음! (안전하게 표준 빌트인 객체 확장 가능)

    - 심벌 값으로 프로퍼티 키 동적으로 생성!

33.7 Well-known Symbol

  - JS가 기본 제공하는 빌트인 심벌 값 (Well-known Symbol)

    - Symbol 함수의 프로퍼티에 할당되어 있음

    - 빌트인 이터러블 객체는 Well-known Symbol인 Symbol.iterator를 키로 갖는 메서드를 가지며,

      Symbol.iterator 메서드 호출 시 이터레이터 반환 (이터레이션 프로토콜)

  - 심벌은 중복되지 않는 상수 값 생성 + 기존에 작성된 코드에 영향 주지 않고,

    새로운 프로퍼티 추가하기 위해, 즉 하위 호환성 보장 위해 도입됨

반응형

댓글