Contents
see ListES2025(ECMAScript 2025) 주요 변경사항
2025년 6월 정식 승인된 ES2025는 Promise.try, Iterator Helpers, Set 메서드, Float16Array 등 실무에서 바로 활용할 수 있는 기능들을 대거 포함했다. 2026년 현재 주요 브라우저와 Node.js 22+에서 대부분 지원된다.
1. Promise.try() - 동기/비동기 에러 통합 처리
Promise.try()는 동기 함수든 비동기 함수든 동일한 Promise 체인으로 에러를 처리할 수 있게 해준다. 기존에는 try-catch와 .catch()를 섞어야 했던 패턴을 깔끔하게 정리할 수 있다.
// Before: 동기 에러가 catch에 잡히지 않음
function getUser(id) {
if (!id) throw new Error("ID required"); // 이 에러는 .catch가 못 잡음
return fetch("/api/users/" + id).then(r => r.json());
}
getUser(null).catch(console.error); // Uncaught Error!
// After: Promise.try로 통합
Promise.try(() => getUser(null))
.then(user => console.log(user))
.catch(err => console.error("잡힘:", err.message));
// 출력: "잡힘: ID required"
// 실전 예시: DB 조회 함수
function queryDatabase(sql) {
return Promise.try(() => {
if (!sql.trim()) throw new Error("빈 쿼리");
return db.execute(sql); // 비동기
});
}
queryDatabase("")
.catch(err => console.log(err.message)); // "빈 쿼리"2. Iterator Helpers - 내장 이터레이터 메서드
배열의 map/filter/reduce처럼, 모든 이터레이터에서 직접 체이닝 메서드를 사용할 수 있다. 중간 배열을 생성하지 않아 메모리 효율이 뛰어나다.
// 이터레이터에서 직접 map, filter, take 사용
function* fibonacci() {
let a = 0, b = 1;
while (true) {
yield a;
[a, b] = [b, a + b];
}
}
// 피보나치 수열에서 짝수만 5개 추출
const result = fibonacci()
.filter(n => n % 2 === 0)
.take(5)
.toArray();
console.log(result); // [0, 2, 8, 34, 144]
// Map 엔트리 처리
const prices = new Map([["사과", 1500], ["바나나", 2000], ["포도", 5000]]);
const expensive = prices.entries()
.filter(([_, price]) => price >= 2000)
.map(([name, price]) => name + ": " + price + "원")
.toArray();
console.log(expensive); // ["바나나: 2000원", "포도: 5000원"]
// drop, forEach, some, every, find, reduce도 지원
const sum = fibonacci()
.take(10)
.reduce((acc, n) => acc + n, 0);
console.log(sum); // 883. Object.groupBy / Map.groupBy
배열을 특정 기준으로 그룹화하는 기능이 내장되었다. Lodash의 groupBy를 대체한다.
const products = [
{ name: "노트북", category: "전자기기", price: 1200000 },
{ name: "키보드", category: "주변기기", price: 89000 },
{ name: "모니터", category: "전자기기", price: 450000 },
{ name: "마우스", category: "주변기기", price: 35000 },
];
// Object.groupBy - 일반 객체 반환
const grouped = Object.groupBy(products, p => p.category);
console.log(grouped);
// {
// 전자기기: [{name: "노트북"...}, {name: "모니터"...}],
// 주변기기: [{name: "키보드"...}, {name: "마우스"...}]
// }
// Map.groupBy - Map 반환 (비문자열 키 사용 가능)
const byPriceRange = Map.groupBy(products, p =>
p.price >= 500000 ? "고가" : "저가"
);
console.log(byPriceRange.get("고가")); // [노트북, 모니터]4. 새로운 Set 메서드
Set에 집합 연산 메서드가 추가되어 수학적 집합 연산을 간단하게 수행할 수 있다.
const frontend = new Set(["React", "Vue", "Angular", "Svelte"]);
const popular = new Set(["React", "Vue", "Next.js", "Express"]);
// 합집합
frontend.union(popular);
// Set {"React", "Vue", "Angular", "Svelte", "Next.js", "Express"}
// 교집합
frontend.intersection(popular);
// Set {"React", "Vue"}
// 차집합
frontend.difference(popular);
// Set {"Angular", "Svelte"}
// 대칭차집합
frontend.symmetricDifference(popular);
// Set {"Angular", "Svelte", "Next.js", "Express"}
// 부분집합/상위집합 검사
const core = new Set(["React", "Vue"]);
core.isSubsetOf(frontend); // true
frontend.isSupersetOf(core); // true
core.isDisjointFrom(popular); // false5. Float16Array
16비트 부동소수점 타입 배열이 추가되었다. AI/ML 추론에서 메모리를 절반으로 줄이면서 충분한 정밀도를 유지할 수 있다.
const weights = new Float16Array([0.5, -1.25, 3.14]);
console.log(weights.byteLength); // 6 (Float32Array면 12)
console.log(Math.f16round(0.1)); // 0.0999755859375ES2025의 이 기능들은 라이브러리 의존성을 줄이고 코드 가독성을 높이는 실질적인 개선이다. 특히 Iterator Helpers와 Set 메서드는 함수형 프로그래밍 스타일의 코드를 네이티브로 작성할 수 있게 해준다.