ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Symbol.for와 Symbol알아보기 (with. 활용 방법)
    JavaScript 2025. 9. 1. 23:54

    JavaScript에서 Symbol은 고유한 식별자를 만들 때 사용되는 원시 타입이다.

    ES6(ECMAScript 2015)에서 도입되었으며, 객체의 키로 사용하거나 고유한 값이 필요할 때 활용할 수 있다.
    그런데 Symbol에는 두 가지 생성 방식이 있다.

    Symbol()과 Symbol.for()가 있는데,
    각각 어떨 때 사용할 수 있을지 알아보았다.

    Symbol() 기본 개념

    const a = Symbol("desc");
    const b = Symbol("desc");
    
    console.log(a === b); // false
    
    • Symbol("desc")를 호출하면 매번 새로운 심볼이 생성된다
    • 비록 설명 문자열(desc)이 같더라도, 실제 심볼 값은 서로 다르다.
    • 따라서 동일한 설명을 가진 심볼을 여러 번 생성해도 전혀 같은 값이 아니다.

     

    Symbol.for() 기본 개념

    const x = Symbol.for("shared");
    const y = Symbol.for("shared");
    
    console.log(x === y); // true
    
    • Symbol.for(key)는 전역 심볼 레지스트리(Global Symbol Registry)를 참조한다.
    • 동일한 키 문자열("shared")로 요청하면 항상 같은 심볼을 반환한다.
    • 즉, 애플리케이션 전역에서 공유할 수 있는 식별자를 만들 때 유용하다.

     

    Symbol()과 Symbol.for() 차이 🧹

    구분Symbol()Symbol.for()
    생성 방식호출할 때마다 새로운 심볼 생성전역 심볼 레지스트리에서 조회 후 없으면 새로 생성
    동일 키 결과항상 서로 다름동일 키일 경우 동일한 심볼 반환
    활용 목적로컬 고유 식별자전역 공유 식별자

     

    언제 Symbol.for()를 쓰면 좋을까?

    1. 전역적으로 동일한 심볼이 필요할 때
      예를 들어, 라이브러리와 애플리케이션 코드가 서로 같은 키로 심볼을 참조해야 할 경우 Symbol.for를 사용한다.
    2. 상호 운용성(interoperability)이 필요한 경우
      여러 모듈에서 동일한 프로퍼티 키를 공유해야 할 때 유용하다.
    3. 메타데이터 저장용
      예를 들어 객체에 특수한 정보를 심볼 키로 저장하면서, 이를 여러 코드베이스에서 공통적으로 접근해야 한다면 Symbol.for가 적합하다.

     

    Symbol.keyFor()와 함께 쓰기

    Symbol.for()로 생성된 심볼은 키를 역으로 찾을 수 있다.

    const shared = Symbol.for("myKey");
    console.log(Symbol.keyFor(shared)); // "myKey"
    
    const local = Symbol("myKey");
    console.log(Symbol.keyFor(local)); // undefined
    • Symbol.keyFor()는 오직 전역 심볼 레지스트리에 등록된 심볼만 역참조할 수 있다.
    • 로컬 심볼(Symbol())은 역참조할 수 없다.

     

    요약 👑

    • Symbol()은 매번 새로운 고유 심볼을 만들고,
    • Symbol.for()는 전역 레지스트리에 저장해 어디서든 같은 키로 접근할 수 있도록 한다.
    • 따라서, 고유성이 필요한 경우에는 Symbol()을, 전역적으로 공유 가능한 키가 필요하다면 Symbol.for()를 선택하는 것이 어울린다.

     

    참고 자료

Designed by Tistory.