Contents
see List작성일 2025. 11. 30.
JavaScript ES2024 새 기능
ES2024(ECMAScript 2024)는 JavaScript의 최신 표준으로, 개발자 경험을 향상시키는 여러 새로운 기능을 포함합니다. 주요 기능들을 실용적인 예제와 함께 살펴봅니다.
1. Array groupBy
배열을 특정 키로 그룹화하는 메서드가 추가되었습니다.
const products = [
{ name: "사과", category: "과일", price: 1000 },
{ name: "바나나", category: "과일", price: 1500 },
{ name: "당근", category: "채소", price: 800 },
{ name: "오이", category: "채소", price: 600 }
];
// Object.groupBy
const grouped = Object.groupBy(products, p => p.category);
// {
// 과일: [{name: "사과"...}, {name: "바나나"...}],
// 채소: [{name: "당근"...}, {name: "오이"...}]
// }
// Map.groupBy (Map 반환)
const groupedMap = Map.groupBy(products, p => p.category);2. Promise.withResolvers()
Promise와 resolve/reject 함수를 동시에 반환합니다.
// 기존 방식
let resolve, reject;
const promise = new Promise((res, rej) => {
resolve = res;
reject = rej;
});
// ES2024 새 방식
const { promise, resolve, reject } = Promise.withResolvers();
// 활용 예시
function createDeferred() {
const { promise, resolve, reject } = Promise.withResolvers();
return { promise, resolve, reject };
}
const deferred = createDeferred();
setTimeout(() => deferred.resolve("완료!"), 1000);
await deferred.promise; // "완료!"3. Well-Formed Unicode Strings
// 잘못된 Unicode 문자열 확인
const str = "hello\\uD800world"; // lone surrogate
str.isWellFormed(); // false
// 잘못된 문자 수정
str.toWellFormed(); // "hello�world"
// 정상 문자열
"안녕하세요".isWellFormed(); // true4. ArrayBuffer 전송 및 리사이징
// 리사이징 가능한 ArrayBuffer
const buffer = new ArrayBuffer(8, { maxByteLength: 16 });
buffer.resize(12); // 크기 조정
buffer.byteLength; // 12
// 다른 스레드로 전송
const transferred = buffer.transfer();
buffer.detached; // true (원본은 분리됨)
// 복사 전송
const copy = buffer.transferToFixedLength(16);5. Atomics.waitAsync()
메인 스레드를 블로킹하지 않고 대기합니다.
const buffer = new SharedArrayBuffer(4);
const view = new Int32Array(buffer);
// 비동기 대기
const result = Atomics.waitAsync(view, 0, 0);
if (result.async) {
result.value.then(status => {
console.log("깨어남:", status);
});
}
// 다른 스레드에서 알림
Atomics.notify(view, 0);6. RegExp v 플래그 (유니코드 집합)
// v 플래그로 유니코드 집합 사용
const emojiRegex = /[\\p{Emoji}--\\p{ASCII}]/v;
emojiRegex.test("😀"); // true
emojiRegex.test("a"); // false
// 문자열 프로퍼티
/^\\p{RGI_Emoji}$/v.test("👨👩👧👦"); // true
// 집합 연산
const korean = /[\\p{Script=Hangul}&&\\p{L}]/v;브라우저 지원
| 기능 | Chrome | Firefox | Safari |
|---|---|---|---|
| groupBy | 117+ | 119+ | 17.4+ |
| withResolvers | 119+ | 121+ | 17.4+ |
| v 플래그 | 112+ | 116+ | 17+ |
Polyfill 예시
// groupBy polyfill
if (!Object.groupBy) {
Object.groupBy = function(arr, fn) {
return arr.reduce((acc, item) => {
const key = fn(item);
(acc[key] ??= []).push(item);
return acc;
}, {});
};
}javascript
| No | 작성일 | Title |
|---|---|---|
| 2213 | 2026. 02. 11. | React Server Components 심화 패턴과 활용 |
| 2212 | 2026. 02. 11. | Next.js 15 App Router 완벽 가이드 |
| 2171 | 2026. 02. 11. | Astro vs Remix vs SvelteKit: 풀스택 프레임워크 비교 |
| 2170 | 2026. 02. 11. | 프론트엔드 테스트 전략: Vitest + Testing Library + Playwright |
| 2169 | 2026. 02. 11. | React 19 신기능: use(), Actions, 서버 컴포넌트 개선 |
| 2168 | 2026. 02. 11. | Web API 최신 트렌드: View Transitions, Popover, Container Queries |
| 2167 | 2026. 02. 11. | Vite 6.0: 차세대 프론트엔드 빌드 도구 |
| 2166 | 2026. 02. 11. | Tailwind CSS 4.0과 모던 CSS 프레임워크 동향 |
| 2165 | 2026. 02. 11. | Zustand vs Jotai vs Recoil: React 상태 관리 비교 2025 |
| 2164 | 2026. 02. 11. | TypeScript 5.x 신기능과 타입 시스템 고급 활용 |