목록으로

프로그래밍 · JavaScript

ECMAScript 최신 기능 가이드: ES2020부터 ES2026까지 JavaScript 변화 정리

BeanCon
JavaScript와 TypeScript 기반 최신 ECMAScript 기능을 표현한 대표 이미지

JavaScript의 표준인 ECMAScript가 어떻게 발전해 왔는지, ES2020부터 ES2026 기준 최신 기능까지 Optional Chaining, Nullish Coalescing, Top-Level Await, Object.groupBy, Promise.withResolvers, Iterator Helpers, Set Methods, Array.fromAsync 중심으로 정리했습니다.

1. JavaScript는 왜 계속 진화하는가?

JavaScript는 1995년 처음 등장한 이후 웹 브라우저의 스크립트 언어에서 출발해 현재는 웹, 서버, 모바일, AI, IoT, 데스크톱 애플리케이션까지 아우르는 범용 프로그래밍 언어로 성장했습니다.

이러한 발전의 중심에는 ECMAScript(ES) 표준이 있습니다. ECMAScript는 JavaScript의 공식 표준 규격이며, 매년 새로운 기능이 추가됩니다.

과거에는 ES5, ES6(ES2015)처럼 대규모 업데이트가 중심이었지만, 현재는 매년 작은 기능들을 지속적으로 추가하는 방식으로 발전하고 있습니다.

2026년 현재 개발자가 반드시 알아야 할 최신 ECMAScript 기능을 ES2020부터 ES2026 기준으로 정리해 보겠습니다.

표준 상태 기준

TC39 finished proposals 기준으로 Set Methods는 ES2025에 포함된 기능입니다. 원문에서는 ES2026 기능으로 분류했지만, 본문에서는 현재 표준 상태에 맞춰 ES2025 항목으로 보정했습니다.

2. ECMAScript란?

ECMAScript는 JavaScript의 공식 표준입니다. 이 표준은 Ecma International에서 관리하며, 브라우저와 런타임은 이 표준을 각자의 JavaScript 엔진으로 구현합니다.

구현체엔진
ChromeV8
EdgeV8
FirefoxSpiderMonkey
SafariJavaScriptCore
Node.jsV8

즉 JavaScript는 ECMAScript 표준을 구현한 언어라고 이해하면 됩니다.

표준과 구현 관계
ECMAScript 표준
JavaScript 엔진
브라우저 / Node.js / 런타임
개발자가 작성하는 JavaScript 코드

3. ECMAScript 버전 역사

3.1 ES5 (2009)

ES5는 JavaScript를 대규모로 표준화한 중요한 버전입니다.

ES5 주요 기능
  • strict mode
  • JSON 지원
  • Array 메서드 map()
  • Array 메서드 filter()
  • Array 메서드 reduce()

3.2 ES6 / ES2015

ES6, 즉 ES2015는 JavaScript 역사상 가장 큰 변화로 평가됩니다.

ES2015 주요 기능
  • let
  • const
  • Arrow Function
  • Promise
  • Class
  • Template Literal
  • Module

3.3 ES2016부터 ES2019

ES2016부터 ES2019까지는 실무 개발에 직접적인 영향을 준 기능들이 꾸준히 추가됐습니다.

ES2016~ES2019 주요 기능
  • async/await
  • Object.entries()
  • Object.values()
  • Spread Operator

4. ES2020부터 ES2026까지 핵심 변화

4.1 ES2020

ES2020에서는 Optional Chaining, Nullish Coalescing, BigInt처럼 코드 안정성과 표현력을 크게 높이는 기능이 들어왔습니다.

const city = user?.address?.city;

기존에는 다음처럼 중첩된 조건을 직접 확인해야 했습니다.

const city = user && user.address && user.address.city;
const name = userName ?? "Guest";

Nullish Coalescing은 ||와 다릅니다. 빈 문자열은 유지하고, null 또는 undefined일 때만 기본값을 사용합니다.

"" || "Guest"; // "Guest"
"" ?? "Guest"; // ""
const number = 123456789012345678901234567890n;

BigInt는 2^53 이상의 큰 정수를 정밀하게 다룰 때 사용합니다.

4.2 ES2021

ES2021은 논리 할당 연산자와 Promise.any()를 통해 조건부 대입과 비동기 경쟁 처리 코드를 간결하게 만들었습니다.

a ||= b;
a &&= b;
a ??= b;

config.timeout ??= 5000;
const result = await Promise.any([
  api1(),
  api2(),
  api3()
]);

Promise.any()는 가장 먼저 성공한 Promise의 결과를 반환합니다.

4.3 ES2022

ES2022에서는 Top-Level Await, Class Fields, Private Fields가 실무에 본격적으로 들어왔습니다.

async function init() {
  await connectDB();
}

모듈 환경에서는 이제 최상위에서 await를 사용할 수 있습니다.

await connectDB();
class User {
  name = "John";
}
class User {
  #password;

  constructor(password) {
    this.#password = password;
  }
}

user.#password; // 오류 발생

Private Fields는 클래스 외부에서 접근할 수 없으므로 내부 상태를 더 안전하게 감출 수 있습니다.

4.4 ES2023

ES2023은 배열을 뒤에서 찾는 메서드와 원본 배열을 변경하지 않는 불변 배열 메서드를 추가했습니다.

const users = [
  { id: 1 },
  { id: 2 },
  { id: 3 }
];

const result = users.findLast(user => user.id > 1);
// { id: 3 }

const idx = users.findLastIndex(user => user.id > 1);

기존 sort()는 원본 배열을 변경합니다.

arr.sort();

toSorted(), toReversed(), toSpliced(), with()는 원본 배열을 유지하는 방식으로 새 배열을 반환합니다.

const sorted = arr.toSorted();
const reversed = arr.toReversed();
const result = arr.toSpliced(1, 2);

const arr = [1, 2, 3];
const newArr = arr.with(1, 100);
// [1, 100, 3]

4.5 ES2024

ES2024에서는 Object.groupBy(), Map.groupBy(), Promise.withResolvers()가 특히 실무 활용도가 높습니다.

const users = [
  { name: "Kim", team: "A" },
  { name: "Lee", team: "B" },
  { name: "Park", team: "A" }
];

const grouped = Object.groupBy(users, user => user.team);
// { A: [...], B: [...] }
const grouped = Map.groupBy(users, user => user.team);

Object.groupBy()는 객체를 반환하고, Map.groupBy()는 Map을 반환합니다.

Promise.withResolvers()는 Promise와 resolve, reject 함수를 함께 얻을 수 있어 비동기 제어 코드를 더 직관적으로 만듭니다.

let resolve;

const promise = new Promise(r => {
  resolve = r;
});
const {
  promise,
  resolve,
  reject
} = Promise.withResolvers();

4.6 ES2025 주요 기능

ES2025에서는 Iterator Helpers, Promise.try, RegExp.escape, JSON Modules, Import Attributes, Float16 관련 TypedArray 기능, Set Methods 등이 추가됐습니다.

const result =
  Iterator
    .from([1, 2, 3, 4])
    .map(x => x * 2)
    .filter(x => x > 4)
    .toArray();

// [6, 8]

Iterator Helpers는 배열처럼 Iterator를 직접 처리할 수 있게 해주며, 큰 데이터 흐름을 지연 평가로 다룰 때 유용합니다.

const a = new Set([1, 2]);
const b = new Set([2, 3]);

a.union(b);                 // Set {1, 2, 3}
a.intersection(b);          // Set {2}
a.difference(b);            // Set {1}
a.symmetricDifference(b);   // Set {1, 3}
a.isSubsetOf(b);
a.isSupersetOf(b);
a.isDisjointFrom(b);

Set Methods는 집합 연산을 직접 표현할 수 있어 권한 비교, 태그 필터링, 추천 시스템, 중복 제거 로직에서 코드가 크게 단순해집니다.

4.7 ES2026 기준으로 봐야 할 기능

ES2026은 아직 최종 배포 전후의 기능 확인이 필요한 영역입니다. TC39 finished proposals 기준으로는 Upsert, JSON.parse source text access, Iterator Sequencing, Uint8Array Base64 변환, Math.sumPrecise, Error.isError, Array.fromAsync 같은 기능들이 ES2026 기대 기능으로 분류됩니다.

기능실무 의미
Array.fromAsync비동기 iterable을 배열로 모으는 표준 API입니다.
Iterator Sequencing여러 iterator를 이어 붙여 처리하는 흐름을 단순화합니다.
Uint8Array to/from Base64바이너리 데이터와 Base64 문자열 변환을 표준 API로 다루게 합니다.
Math.sumPrecise부동소수점 합산 정확도를 개선하는 API입니다.
Error.isError값이 Error 객체인지 표준 방식으로 판별합니다.
JSON.parse source text accessJSON 파싱 과정에서 원본 source text 접근을 가능하게 하는 기능입니다.
UpsertMap 계열 데이터 갱신 패턴을 더 직접적으로 표현하는 방향의 기능입니다.
실무 적용 주의

ES2026 기능은 런타임별 지원 시점이 다를 수 있으므로 Node.js, 브라우저, Babel, TypeScript 타깃 설정을 함께 확인해야 합니다.

5. 최신 문법 및 기능 총정리

분류대표 기능효과
안전한 접근Optional Chaining, Nullish Coalescing중첩 객체 접근과 기본값 처리를 안전하게 만듭니다.
비동기 처리Async/Await, Top-Level Await, Promise.any, Promise.withResolvers비동기 제어 흐름을 간결하게 만듭니다.
객체와 배열Object.groupBy, Map.groupBy, toSorted, toReversed, toSpliced, with데이터 가공과 불변 업데이트가 쉬워집니다.
클래스Class Fields, Private Fields객체 상태와 캡슐화를 명확하게 표현합니다.
컬렉션Iterator Helpers, Set Methods대규모 데이터 흐름과 집합 연산을 표준 문법으로 처리합니다.
숫자와 바이너리BigInt, Float16Array, Uint8Array Base64정밀 정수, 저용량 수치 데이터, 바이너리 변환을 지원합니다.

6. 실무에서 많이 사용하는 최신 문법 TOP 10

순위기능예시
1Optional Chaininguser?.profile?.email
2Nullish Coalescingvalue ?? defaultValue
3Destructuringconst { name, age } = user;
4Spread Operatorconst newUser = { ...user, age: 20 };
5Async / Awaitconst data = await fetch(url);
6Private Class Field#token
7Top-Level Awaitawait init();
8Object.groupBy()Object.groupBy(data, x => x.type);
9Promise.withResolvers()Promise.withResolvers();
10Set OperationssetA.union(setB);

7. 최신 JavaScript 개발 시 추천 설정

7.1 Babel

Babel은 최신 문법을 구형 브라우저나 특정 실행 환경에 맞게 트랜스파일할 때 사용합니다.

대표 프로젝트
  • React
  • Next.js
  • Vue

7.2 TypeScript 사용 권장

대규모 프로젝트에서는 TypeScript가 사실상 필수 수준입니다. ECMAScript 최신 문법과 타입 시스템을 함께 사용하면 리팩터링과 유지보수 안정성이 높아집니다.

interface User {
  name: string;
  age: number;
}

7.3 최신 Node.js 사용

최신 ECMAScript 기능 지원을 빠르게 활용하려면 Node.js 버전도 중요합니다.

권장 버전
  • Node.js 22 LTS 이상
  • Node.js 24 이상

다만 실제 서비스에서는 운영 환경, 프레임워크 호환성, 빌드 도구 지원 여부를 함께 확인해야 합니다.

8. 앞으로 기대되는 ECMAScript 기능

현재 또는 향후 JavaScript 생태계에서 계속 주목할 기능은 다음과 같습니다.

기능기대 효과
Temporal APIDate 객체의 한계를 해결할 차세대 날짜/시간 API입니다.
Pattern Matching복잡한 조건 분기를 더 선언적으로 표현할 수 있습니다.
Pipeline Operator함수 조합과 데이터 변환 흐름을 더 읽기 쉽게 만듭니다.
Records & Tuples불변 데이터 구조를 언어 차원에서 제공하는 방향의 제안입니다.
Decorators 확장클래스, 메서드, 필드 메타프로그래밍을 더 정교하게 지원합니다.
Module 개선모듈 로딩과 import/export 경험을 개선합니다.

특히 Temporal API는 Date 객체의 한계를 해결할 차세대 표준으로 평가받고 있습니다.

const date = Temporal.Now.plainDateISO();

결론

JavaScript는 더 이상 단순한 웹 브라우저 스크립트 언어가 아닙니다. ECMAScript의 지속적인 발전을 통해 서버 개발, 클라우드 네이티브 애플리케이션, AI Agent, 데이터 처리, 실시간 스트리밍 시스템 등 다양한 영역에서 핵심 언어로 자리 잡고 있습니다.

ES2026 기준으로 개발자가 익혀야 할 기능
  • Optional Chaining (?.)
  • Nullish Coalescing (??)
  • Async/Await
  • Top-Level Await
  • Object.groupBy()
  • Promise.withResolvers()
  • Iterator Helpers
  • Set Operations
  • Private Class Fields
  • Immutable Array Methods (toSorted, toReversed, with)
  • Array.fromAsync와 같은 ES2026 기대 기능

특히 React, Next.js, Node.js, AI Agent, MCP Server, LangChain 기반 서비스 개발에서는 이러한 최신 ECMAScript 기능들이 코드 품질과 생산성을 크게 향상시킵니다.

최신 JavaScript를 적극 활용하면 더 간결하고, 안전하며, 유지보수하기 쉬운 현대적인 애플리케이션을 구축할 수 있습니다.

댓글

0

댓글을 불러오는 중입니다.