JAVASCRIPT

datatype - BigInt , Symbol

funfunweb 2025. 5. 28. 18:30

🔑 BigInt - 아주 큰 정수를 다루기 위한 타입

 

📌 소개

  • BigInt는 일반 숫자(Number)가 표현할 수 있는 범위를 넘는 아주 큰 정수를 다룰 수 있게 해줍니다.
  • 일반 Number는 약 ±2<sup>53</sup> (약 9천조) 까지만 정확히 표현할 수 있어요.
  • BigInt는 이보다 훨씬 큰 숫자를 정확하게 저장하고 연산할 수 있습니다.

✅ 사용 예시

const regularNumber = 9007199254740991;     // Number.MAX_SAFE_INTEGER
const bigNumber = 9007199254740991n + 1n;

console.log(bigNumber);          // 출력: 9007199254740992n
console.log(typeof bigNumber);  // 출력: "bigint"

✅ 주의 사항

  1. BigInt는 n을 붙여서 작성해야 합니다 (예: 123n).
  2. BigInt와 Number는 혼합 연산이 불가합니다. 아래는 에러:
let big = 10n;
let num = 5;
// console.log(big + num); // ❌ TypeError

→ 둘 중 하나를 변환해서 써야 함: BigInt(num) 또는 Number(big)

📦 언제 사용할까?

  • 블록체인, 고정소수점 계산, 정확한 ID, 매우 큰 숫자를 다룰 때 사용.

🔑 Symbol – 고유한 식별자를 위한 타입

📌 소개

  • Symbol은 절대 중복되지 않는 고유한 값을 생성합니다.
  • 객체의 속성 키로 사용할 수 있으며, 다른 키와 충돌하지 않게 하기 위해 사용됩니다.

✅ 사용 예시

const id1 = Symbol("id");
const id2 = Symbol("id");

console.log(id1 === id2); // false (고유함)

"id"는 설명을 위한 문자열일 뿐, 심볼 자체의 고유성에는 영향을 주지 않아요.

 

✅ 객체 속성 키로 사용

 

const user = {
  name: "Alice",
  [Symbol("id")]: 123
};

console.log(user); // { name: 'Alice', [Symbol(id)]: 123 }

이 속성은 일반적인 for...in이나 Object.keys()로는 접근되지 않음 → 은밀한 정보 저장 가능.

 

✅ 공유 Symbol(Symbol.for)

const sym1 = Symbol.for("globalId");
const sym2 = Symbol.for("globalId");

console.log(sym1 === sym2); // true

 

  • Symbol.for()는 전역 심볼 레지스트리를 통해 공유 가능한 심볼을 반환합니다.

📊 요약 비교

항목                               BigInt                                                       Symbol

 

목적 매우 큰 정수 처리 고유한 식별자 생성
생성 방식 123n, BigInt(123) Symbol("설명"), Symbol.for("id")
비교 가능? === 사용 가능 === 사용 가능
고유성 값에 따라 달라짐 항상 고유
사용처 정밀 계산, 대규모 ID 객체 속성 키, 내부 식별자
typeof "bigint" "symbol"