Javascript ES16(ECMAScript 2025) 문법정리
ES2024에 대해 정리한 게 얼마 전 같은데 벌써 ES2025에 대한 글을 작성하고 있네요.
이번 업데이트는 개인적으로 JS 개발자들이 자주 겪던 불편함을 개선하는데 초점을 맞춘 업데이트라고 느끼고 있습니다.
특히 정규 표현식 업데이트들은 개인적으로 정말 유용하게 사용할 수 있을 것 같습니다.
1. JSON 모듈 및 Import Attributes
이제 ES2025에서는 JSON 파일을 자바스크립트에서 직접 모듈 형태로 불러올 수 있습니다.
Import Attributes를 통해 파일의 타입을 명시적으로 지정할 수 있습니다.
이전에도 사용할 수 있지 않았나 하시는 분들은 Webpack이나 Vite 등의 번들러를 통해 제공된 기능을 이용한 것이고, 실제 Node, 브라우저 환경에서 정식 지원은 이번에 추가되었습니다.
// 이전 CommonJS 방식
const settings = require('./settings.json');
// ES2025
import settings from "./settings.json" with { type: "json" };
console.log(settings.apiEndpoint);
// 동적 import
const config = await import("./config.json", { with: { type: "json" } });
console.log(config.default);
지원 환경
- Node.js 22+
- Chrome/Edge 123+
- Firefox 138+
- Safari 17.2+
2. Iterator Helper Methods (이터레이터 헬퍼)
이터레이터에 map, filter, take, drop, flatMap 등 배열의 메서드와 유사한 메서드를 추가하여 lazy 처리로 효율적인 체이닝 처리를 제공해 대량 데이터 처리 시 효율을 향상됩니다.
// 이전
const products = Array.from(fetchProducts())
.filter(product => product.price > 100)
.map(product => ({ ...product, price: product.price * 0.9 }));
// ES2025
const products = fetchProducts(); // Assume fetchProducts() returns an iterable
const discountedProducts = products
.filter(product => product.price > 100)
.map(product => ({ ...product, price: product.price * 0.9 }))
.toArray();
지원 환경
- Node.js 22+
- Chrome/Edge 125+
- Firefox 134+
- Safari 18.4+
3. Set 객체 신규 메서드
Set 객체에 수학적 집합 연산 메서드가 추가되어 합집합, 교집합, 차집합, 대칭차 등의 연산을 간단하게 수행할 수 있습니다.
const adminUsers = new Set(['alice', 'bob']);
const activeUsers = new Set(['bob', 'charlie']);
// 이전
const intersection = new Set([...adminUsers].filter(user => activeUsers.has(user)));
// ES2025
const intersection = adminUsers.intersection(activeUsers);
지원 환경
- Node.js 22+
- Chrome/Edge 110+
- Firefox, Safari 최신 버전 지원
4. RegExp.escape() 메서드
사용자 입력 등 동적으로 정규식을 생성할 때 문자열 내 특수문자를 자동 이스케이프 처리해 주는 메서드입니다.
직접 수작업으로 \를 넣는 복잡함을 해소하고, 누락되는 경계들을 줄여주는 효과가 있습니다.
// 이전
const escapedInput = userInput.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
const safePattern = new RegExp(escapedInput);
// ES2025
const userInput = "(special)*.?";
const safePattern = new RegExp(RegExp.escape(userInput));
지원 환경
- Node.js 24+
- Chrome/Edge 136+
- Firefox 134+
- Safari 18.2+
5. 정규식 부분 플래그 (Pattern Modifiers)
정규표현식의 i(대소문자 무시), m(다중행), s(닷 all) 플래그를 패턴의 일부에만 적용할 수 있게 되었습니다.
새로운 Modifier 문법 (?flags:pattern)을 사용하여 괄호 안 부분패턴에만 특정 플래그들을 켜거나 끌 수 있습니다.
복잡한 정규식에서 일부 섹션만 대소문자 무시 등의 처리가 필요할 때 유용합니다.
// 이전 - 아래와 패턴을 분할 처리하는 등 불편했음.
//
function createSKURegex(sku) {
return new RegExp(`^product-${sku}$`, "i"); // 대소문자 무시
}
const result = createSKURegex("SKU123").test("product-sku123"); // true
// ES2025
const regex = /^product-(?i:SKU\d{3})$/;
console.log(regex.test("product-sku123")); // true
console.log(regex.test("product-SKU456")); // true
console.log(regex.test("Product-sku789")); // false
지원 환경
- Chrome/Edge 125+
- Firefox 최신 버전 지원
- Safari 미지원
6. 중복 이름 캡처 그룹 허용
서로 다른 대안(alternative) 내에서 동일한 이름의 캡처 그룹을 선언할 수 있어 가독성이 좋아집니다.
// 이전 - 캡쳐 그룹의 이름 중복 불가능.
// ES2025
const regex = /(?<value>\d+)|(?<value>[a-z]+)/v;
console.log(regex.exec("123").groups.value); // "123"
console.log(regex.exec("abc").groups.value); // "abc"
지원 환경
- Chrome/Edge 최신 버전 지원
- Safari 미지원 (정규식 v 플래그 필수)
7. Promise.try() 추가
동기 함수 및 예외 발생 가능성이 있는 로직을 Promise로 간단히 감싸서 처리할 수 있습니다.
기존에 Promise.resolve().then(func) 패턴이나 서드파티 p-try 등을 사용하던 것을 대체하여 간결한 에러 처리 흐름을 제공합니다.
// 이전
async function getUserData() {
try {
const userId = getCurrentUserId();
return await fetchUser(userId);
} catch (e) {
return Promise.reject(e);
}
}
// ES2025
async function getUserData() {
return Promise.try(() => {
const userId = getCurrentUserId();
return fetchUser(userId); // returns Promise
});
}
지원 환경
- Node.js 24+
- Chrome/Edge 128+
- Firefox 134+
- Safari 18.2+
8. Float16 (16비트 부동소수점) 지원
메모리 효율성을 위한 Float16 지원이 추가되어 머신러닝이나 그래픽 처리와 같은 영역에서 유용하게 사용할 수 있습니다.
기존 Float32Array를 사용하여 높은 메모리 사용량이 필요했던 부분이 개선되었습니다.
// ES2025
const buffer = new ArrayBuffer(2);
const view = new DataView(buffer);
view.setFloat16(0, 9.87);
console.log(view.getFloat16(0)); // 약 9.8671875 (반올림 발생)
지원 환경
- Node.js 24+
- Chrome/Edge 135+
- Firefox 129+
- Safari 18.2+