ES2022
📋 문서 버전
이 문서는 2개의 버전이 있습니다. 현재 최신 버전을 보고 있습니다.
ES2022
**ES2022ECMAScript 222)는2022년6월에 공 발표된 ECMAScript 최신 표준 버전으로, 자바스크립트 언어의 발전을 반영하는 중요한 업데이트입니다. 이 표준은 TC39 위원회에 의해 제정되며, 매년 새로운 기능과 개선 사항을 포함하여 자바스크립트의 표현력과 개발자 경험을 향상시키는 데 기여합니다. ES2022는 기존의 ES6(ES2015) 이후의 진화 흐름을 이어받아, 특히 클래스, 비동기 처리, 문자열 처리 등 다양한 영역에서 유용한 신기능을 도입했습니다.
본 문서에서는 ES2022에서 추가된 주요 기능들과 그 사용법, 실제 코드 예제, 그리고 개발 현장에서의 활용도를 중심으로 설명합니다.
주요 신기능
ES2022는 다음과 같은 주요 기능들을 포함하고 있습니다. 각 기능은 개발자가 더 직관적이고 안전하게 코드를 작성할 수 있도록 설계되었습니다.
1. Top-Level await
개요
이전까지 await
키워드는 반드시 async
함수 내부에서만 사용할 수 있었습니다. ES2022에서는 모듈 최상위 수준(Top-Level)에서 await
를 사용할 수 있게 되어, 모듈 로딩 시 비동기 초기화 작업을 보다 간편하게 처리할 수 있습니다.
사용 예시
// 예: 외부 데이터를 로드하여 모듈에서 바로 사용
const response = await fetch('https://api.example.com/data');
const data = await response.json();
export { data };
장점
- 모듈 초기화 시 비동기 리소스 로딩이 간결해짐
- 번들러(예: Webpack, Vite)와 잘 호환되며, 런타임에서 지원됨
⚠️ 주의: 이 기능은 ES 모듈 환경에서만 사용 가능하며, 일반 스크립트 파일이나
CommonJS
에서는 지원되지 않습니다.
2. 클래스의 [public static fields](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/%ED%81%B4%EB%9E%98%EC%8A%A4/public%20static%20fields)
개요
ES2022는 클래스 내에서 정적 필드를 선언할 수 있는 문법을 공식적으로 표준화했습니다. 이는 클래스에 정적 속성을 더 명확하고 직관적으로 정의할 수 있게 해줍니다.
사용 예시
class MyClass {
static version = '1.0.0';
static defaultOptions = { debug: false };
constructor(name) {
this.name = name;
}
}
console.log(MyClass.version); // '1.0.0'
이전 방식과 비교
// ES2022 이전
MyClass.version = '1.0.0';
장점
- 클래스 정의 내에서 정적 속성의 위치를 명확히 함
- 초기화 순서를 예측 가능하게 함
3. 클래스의 [private static fields](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/%ED%81%B4%EB%9E%98%EC%8A%A4/private%20static%20fields)
, [private instance fields](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/%ED%81%B4%EB%9E%98%EC%8A%A4/private%20instance%20fields)
, [private methods](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/%ED%81%B4%EB%9E%98%EC%8A%A4/private%20methods)
개요
ES2020에서 도입된 private 필드(#
)가 ES2022에서 정적(private static) 및 메서드(private methods)까지 확장되었습니다.
사용 예시
class Counter {
#count = 0; // private instance field
static #instances = 0; // private static field
constructor() {
Counter.#instances++;
}
#increment() { // private method
this.#count++;
}
getCount() {
return this.#count;
}
static getInstanceCount() {
return Counter.#instances;
}
}
const c1 = new Counter();
const c2 = new Counter();
console.log(Counter.getInstanceCount()); // 2
장점
- 캡슐화 강화: 내부 구현을 숨기고 API를 명확히 분리
- 실수로 외부에서 접근하는 것을 방지
4. at()
메서드 (Index 접근 보완)
개요
String
, `,
TypedArrayat()` 메서드가 추가되어, 음수 인덱스를 사용한 요소 접근이 가능해졌습니다. 이는 파이썬이나 루비 같은 언어의 습관을 가진 개발자에게 친숙한 기능입니다.
사용 예시
const arr = [10, 20, 30, 40, 50];
arr.at(0); // 10 (첫 번째 요소)
arr.at(-1); // 50 (마지막 요소)
arr.at(-2); // 40 (마지막에서 두 번째)
"hello".at(-1); // 'o'
기존 방식과 비교
arr[arr.length - 1] // 마지막 요소 → at(-1)로 대체 가능
장점
- 음수 인덱스 접근이 직관적
- 반복되는
.length
계산 불필요
5. [error.cause](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/%EC%98%A4%EB%A5%98%20%EC%B2%98%EB%A6%AC/error.cause)
옵션
개요
throw
문에서 새로운 오류를 생성할 때, 이전 오류를 원인(cause)으로 지정할 수 있습니다. 이는 오류 전파 시 디버깅을 용이하게 합니다.
사용 예시
try {
connectToDatabase();
} catch (err) {
throw new Error('DB 연결 실패', { cause: err });
}
// 나중에
console.error(error.cause); // 원래 오류 객체 출력 가능
장점
- 오류의 근본 원인을 추적하기 쉬움
- 로깅 및 에러 핸들링 프레임워크에서 유용
6. 정규표현식: [Match Indices](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/%EC%A0%95%EA%B7%9C%ED%91%9C%ED%98%84%EC%8B%9D/Match%20Indices)
(d
플래그)
개요
정규표현식에 d
플래그를 사용하면, 매칭된 각 결과에 대해 인덱스 정보(시작 및 끝 위치)를 포함하는 객체를 반환합니다.
사용 예시
const re = /JavaScript/dg;
const str = 'I love JavaScript and JavaScript is great!';
const match = re.exec(str);
console.log(match.indices[0]); // [7, 19] — 'JavaScript'의 위치
console.log(str.slice(...match.indices[0])); // 'JavaScript'
활용 분야
- 텍스트 편집기, 문법 강조, 파서 구현 등에서 유용
지원 환경
대부분의 주요 브라우저와 Node.js 환경에서 ES2022 기능은 광범위하게 지원됩니다.
기능 | Chrome | Firefox | Safari | Node.js (버전) |
---|---|---|---|---|
Top-Level Await | 89+ | 89+ | 15+ | 14.8.0+ (ESM) |
Public Static Fields | 72+ | 71+ | 14.1+ | 12.0+ |
Private Fields/Methods | 91+ | 90+ | 15+ | 16.0+ |
at() |
92+ | 90+ | 15.4+ | 16.6.0+ |
error.cause |
93+ | 92+ | 16.4+ | 16.9.0+ |
d 플래그 |
97+ | 97+ | 15.4+ | 16.12.0+ |
💡 지원 여부는 MDN Web Docs 또는 Can I use에서 확인 가능
참고 자료 및 관련 문서
ES2022는 자바스크립트 개발자에게 실용적이고 중요한 기능들을 제공하며, 코드의 가독성과 유지보수성을 높이는 데 기여합니다. 최신 환경에서 개발 중이라면, 이러한 기능들을 적극 활용하는 것이 권장됩니다.
이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.
주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.