HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🐣
프론트엔드 데브코스 3기 교육생
/
📚
3기 스터디 가이드
/
💯
자바스크립트 Deep Dive 스터디
/
🕤
자바스크립트 Deep Dive
/
🌖
33장 7번째 데이터 타입 Symbol - 지연님
🌖

33장 7번째 데이터 타입 Symbol - 지연님

 
  • 심벌이란?
    • : ES6에서 도입된 7번째 데이터 타입으로, 변경 불가능한 원시 타입의 값
      다른 값과 중복되지 않는 유일무이한 값
       
      ⇒ 이름의 충돌 위험이 없는 유일한 프로퍼티 키를 만들기 위해 사용한다.
       
       
  • 심벌 값의 생성
    • 변경 불가능한 원시값이기 때문에 인스턴스를 생성할 수 없고, 따라서 new 연산자와 함께 호출하지 않는다.
      • const val = Symbol("imUnique"); const val = new Symbol("imUnique"); //Uncaught TypeError: Symbol is not a constructor
       
    • 인자는 심벌 값에 대한 설명으로 디버깅 용도로만 사용되며, 심벌 값 형성에 어떠한 영향도 주지 않는다.
      • const val = Symbol("imUnique"); const val2 = Symbol("imUnique"); val === val2; //false
       
    • 심벌 값도 객체처럼 접근하면 암묵적으로 래퍼 객체를 생성하며, 프로퍼티나 프로토타입 메서드에 접근할 수 있다.
    • notion image
       
    • 값 자체는 변경할 수 없지만, 불리언 타입으로의 타입 변환은 가능하다.
    • notion image
      notion image
      notion image
       
    • Symbol.for 메서드를 통해 전역 심벌 레지스트리에서 검색이 가능하다.
      • 이 때, 인수로 전달 받은 문자열을 키로 사용하며, 해당 키와 일치하는 심벌 값을 검색한다.
         
        1) 존재하는 경우, 해당 심벌 값을 반환
        2) 존재하지 않는 경우, 새로운 심벌 값을 생성
         
    • Symbol.keyFor 메서드를 통해 전역 심벌 레지스트리에 저장된 심벌 값의 키를 추출할 수 있다.
      • notion image
       
 
  • 심벌과 상수
    • : 상수 이름 자체에 의미가 있는 경우, 변경/중복될 가능성이 있는 무의미한 상수 대신 중복될 가능성이 없는 유일무이한 심벌 값을 사용할 수 있다.
       
      notion image
      notion image
 
 
  • 심벌과 프로퍼티 키
    • : 객체의 프로퍼티 키는 빈 문자열을 포함하는 모든 문자열 또는 심벌 값으로 생성 가능하다.
      심벌 값으로 프로퍼티 키를 만들면 다른 프로퍼티 키와 절대 충돌하지 않는다.
       
      notion image
       
       
  • 심벌과 프로퍼티 은닉
    • : getOwnPropertySymbols 를 통해 심벌 값에 접근할 수 있다.
       
      notion image
      notion image
       
       
  • 심벌과 표준 빌트인 객체 확장
    • : 표준 빌트인 객체에 사용자 정의 메서드를 추가하는 것은 권장되지 않는다.
      ⇒ 개발자가 직접 추가한 메서드와 미래에 표준 사양으로 추가될 메서드의 이름이 중복될 수 있기 때문이다.
       
      ES6 이전에 개발자가 Array.prototype.find를 추가했다면, ES6에 실제로 표준 사양으로 추가되었기 때문에 덮어쓰기 되어 문제가 발생할 수 있다.
       
      하지만..
      표준 빌트인 객체에 사용자 정의 메서드가 필요하다면, 유일무이한 값인 심벌 값으로 객체를 확장한다면 충돌의 걱정이 없다.
       
       
  • Well-known Symbol
    • : 자바스크립트가 기본 제공하는 빌트인 심벌 값을 ECMAScript 사양에서 부르는 말이다.
       
      notion image
       
      해당 값들은 Symbol 함수의 프로퍼티에 할당되어 있으며, 자바스크립트 엔진의 내부 알고리즘에 사용된다.