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 |
|---|---|---|
| 3384 | 2026. 08. 21. | Node.js API에서 요청 취소를 제대로 처리하는 방법: AbortSignal로 외부 작업 정리하기 |
| 3352 | 2026. 08. 13. | Node.js 응답이 간헐적으로 느릴 때: 이벤트 루프 지연 측정과 CPU 작업 분리 방법 |
| 3320 | 2026. 08. 04. | JavaScript fetch 요청을 안전하게 만드는 방법: timeout·재시도·오류 처리 실전 패턴 |
| 3288 | 2026. 07. 27. | Node.js 서버 무중단 배포를 위한 Graceful Shutdown 구현 가이드 |
| 3257 | 2026. 07. 19. | Node.js 대용량 파일 처리 가이드: 스트림과 backpressure로 메모리 사용량 제어하기 |
| 3232 | 2026. 07. 11. | Node.js 실무형 에러 처리: async/await에서 실패를 일관되게 분류하고 복구 속도 높이기 |
| 3174 | 2026. 07. 02. | Node.js 환경 변수 검증 가이드: process.env를 안전한 설정 객체로 바꾸기 |
| 3123 | 2026. 06. 24. | TypeScript 타입 좁히기 운영 가이드: unknown 입력을 안전한 도메인 객체로 바꾸기 |
| 3065 | 2026. 06. 16. | 브라우저 성능 병목 찾기: PerformanceObserver로 LCP·INP·긴 작업 로그 수집하기 |
| 2978 | 2026. 06. 08. | Node.js fetch 타임아웃과 재시도 설계: 외부 API 장애 전파 줄이기 |