-
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()를 쓰면 좋을까?
- 전역적으로 동일한 심볼이 필요할 때
예를 들어, 라이브러리와 애플리케이션 코드가 서로 같은 키로 심볼을 참조해야 할 경우 Symbol.for를 사용한다. - 상호 운용성(interoperability)이 필요한 경우
여러 모듈에서 동일한 프로퍼티 키를 공유해야 할 때 유용하다. - 메타데이터 저장용
예를 들어 객체에 특수한 정보를 심볼 키로 저장하면서, 이를 여러 코드베이스에서 공통적으로 접근해야 한다면 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()를 선택하는 것이 어울린다.
참고 자료
'JavaScript' 카테고리의 다른 글
Notes from reading 🔖 You Don't Know JS Yet - 7 (0) 2025.12.11 JavaScript AbortController 사용법 정리 (0) 2025.10.11 Notes from reading 🔖 You Don't Know JS Yet - 6 (0) 2025.06.18 Notes from reading 🔖 You Don't Know JS Yet - 5 (0) 2025.06.11 Notes from reading 🔖 You Don't Know JS Yet - 4 (0) 2025.06.05