컬렉션과 키 설계

Symbol/Map/Set 의도

객체 속성에 모든 자료구조를 억지로 담으면 키 충돌, 순서, 중복, 객체 키 문제가 섞입니다. Symbol은 충돌 없는 식별자를, Map은 임의 키 기반 사전을, Set은 중복 없는 집합을 맡습니다.

01

Symbol로 충돌 제거

라이브러리나 내부 메타데이터가 사용자 속성과 이름이 겹치지 않도록 고유 키를 만듭니다.

고유성
02

Map으로 키 범위 확장

문자열 변환 없이 객체, 함수, DOM 노드 등을 그대로 키로 삼아 값과 연결합니다.

임의 키
03

Set으로 유일성 표현

배열에서 중복 제거 로직을 반복하기보다 자료구조 자체가 중복을 거절하게 만듭니다.

집합
04

순회와 직렬화 분리

Map과 Set은 삽입 순서 순회에 강하지만 JSON 직렬화에는 변환 단계가 필요합니다.

변환 경계
Symbol vs string
이름 공개 여부와 충돌 가능성을 기준으로 선택 외부에서 접근해야 하는 공개 속성은 문자열, 내부 식별자는 Symbol이 어울립니다.
속성 키
Map vs Object
레코드 모양 데이터인지 동적 사전인지 구분 정해진 필드 모델은 Object, 자주 추가 삭제되는 키 값 저장소는 Map이 선명합니다.
모델링
Set vs Array
순서와 중복이 모두 의미 있으면 Array, 포함 여부가 핵심이면 Set 권한 목록, 선택된 id, 방문 처리에는 Set이 읽기 쉽습니다.
중복

키 정체성 · 중복 정책 · 출력 형식 점검

키 정체성 객체를 키로 써야 하는 순간 Object 대신 Map을 먼저 검토합니다.
중복 정책 중복 허용 여부가 도메인 규칙이라면 Set으로 표현해 실수를 줄입니다.
출력 형식 API로 내보낼 때는 Array.from이나 Object.fromEntries로 직렬화 경계를 명시합니다.

객체 키를 유지하는 Map

const cache = new Map();
cache.set(userElement, { loadedAt: Date.now() });

const selectedIds = new Set([10, 20, 20]);
selectedIds.has(20); // true