본문 바로가기

개발 트렌드

2026년 JavaScript 새 기능 7가지 — 꼭 알아야 할 ECMAScript 업데이트

JavaScript는 매년 진화한다. 2026년에도 개발자의 생산성을 크게 높여줄 새로운 기능들이 속속 등장하고 있다. 이번 글에서는 2026년에 주목해야 할 JavaScript 새 기능 7가지를 코드 예시와 함께 정리했다.

1. Map.getOrInsert() — Map 업서트가 드디어 간결해진다

Map에서 키가 있으면 가져오고, 없으면 삽입하는 패턴. 지금까지는 이렇게 해야 했다:

const map = new Map();
for (const char of "hello world") {
  let obj = map.get(char);
  if (!obj) {
    obj = { char, count: 0 };
    map.set(char, obj);
  }
  obj.count++;
}

이제 getOrInsert()로 한 줄이면 된다:

const map = new Map();
for (const char of "hello world") {
  const obj = map.getOrInsert(char, { char, count: 0 });
  obj.count++;
}

값 생성이 비싸면 getOrInsertComputed()로 콜백을 넘길 수도 있다:

const obj = map.getOrInsertComputed(key, (k) => expensiveCreate(k));

내부적으로 한 번의 해시 조회만 수행하므로 성능상 이점도 있다.

2. JSON.rawJSON() — BigInt도 손실 없이 JSON 직렬화

JavaScript의 Number2^53을 넘으면 정밀도가 깨진다. 기존에는 BigInt를 JSON으로 직렬화하려면 번거로운 우회가 필요했다.

JSON.rawJSON()을 사용하면 원시 JSON 값을 그대로 주입할 수 있다:

const obj = { id: 999999999999999999n };

const json = JSON.stringify(obj, (key, value) =>
  typeof value === "bigint" ? JSON.rawJSON(value.toString()) : value
);
// '{"id":999999999999999999}' — 문자열이 아닌 숫자로 직렬화!

역직렬화할 때는 context.source를 활용한다:

JSON.parse(json, (key, value, { source }) =>
  typeof value === "number" && !Number.isSafeInteger(value)
    ? BigInt(source)
    : value
);

금융, 블록체인 등 큰 숫자를 다루는 분야에서 특히 유용하다.

3. Iterator.concat() — 이터레이터 합치기

여러 이터레이터를 하나로 합칠 수 있다:

const combined = Iterator.concat([1, 2], [3, 4], new Set([5, 6]));
console.log([...combined]); // [1, 2, 3, 4, 5, 6]

배열뿐 아니라 제너레이터, Set, Map 등 모든 이터러블을 합칠 수 있어서 데이터 파이프라인 구성이 훨씬 유연해진다.

4. Math.sumPrecise() — 부동소수점 합산 정밀도 향상

부동소수점 덧셈의 고질적인 문제:

// 기존: 순서에 따라 오차 누적
[0.1, 0.2, 0.3].reduce((a, b) => a + b, 0); // 0.6000000000000001

// 새 기능: 정밀한 합산
Math.sumPrecise([0.1, 0.2, 0.3]); // 0.6

과학 계산이나 금융 데이터 처리에서 미세한 오차가 큰 차이를 만들 수 있는데, 이 API로 깔끔하게 해결된다.

5. import defer — 지연 모듈 로딩

모듈을 선언은 하되, 실제 사용할 때까지 실행을 미루는 import defer 제안:

import defer * as heavyLib from "./heavy-library.js";

// heavyLib의 프로퍼티에 접근하는 순간 모듈이 실행됨
if (needsHeavyWork) {
  heavyLib.doWork(); // 이 시점에 로딩
}

dynamic import()와 달리 동기적으로 접근 가능하면서도 초기 로딩 비용을 줄일 수 있다. 번들 사이즈가 큰 프로젝트에서 초기 로딩 속도 개선에 효과적이다.

6. Error.isError() — 진짜 Error 객체인지 확인

instanceof는 다른 렘름(iframe, VM 등)에서 생성된 Error를 인식하지 못한다:

// iframe에서 넘어온 에러
iframeError instanceof Error; // false 😱

// 새 방식: 렘름에 상관없이 정확히 판별
Error.isError(iframeError); // true ✅

마이크로서비스나 웹워커 환경에서 에러를 안전하게 처리할 수 있다.

7. Uint8Array Base64/Hex 변환

바이너리 데이터와 Base64/Hex 문자열 간 변환이 네이티브로 지원된다:

// Base64 → Uint8Array
const bytes = Uint8Array.fromBase64("SGVsbG8gV29ybGQ=");
console.log(new TextDecoder().decode(bytes)); // "Hello World"

// Uint8Array → Base64
const encoded = bytes.toBase64();
console.log(encoded); // "SGVsbG8gV29ybGQ="

// Hex도 지원
const hexBytes = Uint8Array.fromHex("48656c6c6f");
const hexStr = hexBytes.toHex(); // "48656c6c6f"

더 이상 btoa()/atob()의 유니코드 문제로 고생하지 않아도 된다.

마무리

2026년 JavaScript는 실용성에 초점을 맞추고 있다. Map 업서트, 정밀 합산, 지연 로딩 등 기존에 우회 코드로 해결하던 패턴들이 언어 레벨에서 지원되는 방향이다.

특히 import deferMath.sumPrecise()는 성능과 정확성 면에서 실무에 바로 적용할 만하다. 아직 모든 브라우저에서 지원되지 않는 기능도 있으니, Can I Use에서 호환성을 확인하고 폴리필 전략을 세우자.

여러분이 가장 기대하는 JavaScript 새 기능은 무엇인가요? 댓글로 알려주세요! 🚀