FEInterview Prep

emewjin.github.io

Ecma International, ECMAScript 2025 승인: 새로운 기능은?

ES2025 의 핵심은 Iterator Helpers(.filter/.map/.take)와 `import attributes` + JSON 모듈, 그리고 `Promise.try` / `Set` 메서드 / RegExp `v` 플래그. 일상 코드의 표현력을 한 단계 끌어올린다.

2025-07-08·7분 읽기
JavaScript
원문 보기 ↗

핵심 요약

주요 기능 정리:

// 1) Iterator Helpers - lazy 파이프라인
['a','','b','','c','','d','','e'].values()
  .filter(x => x.length > 0)
  .drop(1).take(3)
  .map(x => `=${x}=`)
  .toArray(); // ['=b=', '=c=', '=d=']

// 2) import attributes + JSON 모듈
import config from './config.json' with { type: 'json' };
const dyn = await import('./config.json', { with: { type: 'json' } });

// 3) Promise.try - sync/async/throw 통일
await Promise.try(() => maybeSync()).catch(handle);

// 4) Set 메서드
A.union(B); A.intersection(B); A.difference(B);
A.isSubsetOf(B); A.isSupersetOf(B); A.isDisjointFrom(B);

// 5) RegExp v - 유니코드 집합 연산
/[\p{Letter}--\p{ASCII}]/v;  // 비-ASCII 글자만

// 6) RegExp 명명된 캡처 그룹 중복 허용
/(?<n>\d+)|(?<n>[a-z]+)/;

// 7) Atomics.pause - 짧은 스핀 대기 힌트
Atomics.pause();

공통 동기는 "패턴은 흔한데 매번 손코딩하던 것" 을 표준 메서드로 끌어올리는 것이다.

ES2025 변경사항을 외울 게 아니라 "어떤 코드 패턴을 더 짧고 안전하게 만들 수 있게 됐는가" 로 묶어 기억한다.

  • 데이터 변환: Iterator Helpers — 배열로 변환하지 않고 lazy 파이프라인
  • 모듈 시스템: import attributes + JSON 모듈 — 비-JS 자원의 표준 import
  • 비동기: Promise.try — sync/async/throw 를 한 진입점으로 통일
  • 컬렉션: Set 메서드union/intersection/difference 표준화
  • 정규식: RegExp v 플래그 — 유니코드 집합 연산
  • 동기화: Atomics.pause, 공유 메모리 정렬

면접에서 "최신 ES 에서 인상적인 기능?" 은 단순 자랑 아닌 언어 발전의 방향성 을 읽는 능력 테스트다. ES2025 는 함수형 표현·모듈 일관성·비동기 진입점·집합 연산처럼 "매일 쓰는 코드의 군더더기를 깎는" 변경이 많다. 따라서 "이 기능 알아요" 가 아니라 "전엔 이렇게 짰는데, 이젠 이렇게 짭니다 + 그래서 어떤 비용이 줄었습니다" 로 답해야 한다.

학습 포인트

면접 답변으로 연결할 학습 포인트입니다.

Iterator Helpers 는 "메모리 안 쓰는 배열 메서드"

기존 array.filter().map().slice()중간 배열을 매번 새로 만든다. Iterator Helpers 는 lazy 라 진짜 필요한 만큼만 평가한다.

// 기존: 매 단계 새 배열
bigArr.filter(f).map(m).slice(0, 3);

// ES2025: 끝에서 take(3) 하면 3개만 평가
bigArr.values().filter(f).map(m).take(3).toArray();

특히 무한 이터러블(function* generator) 과 결합할 때 위력적. 메모리/시간 둘 다 아낀다.

lazy iterationgeneratortake/droptoArray()
자주 하는 오해

이미 작은 배열에까지 .values() 체이닝으로 바꾸는 것. 오버헤드만 늘고 가독성도 손해. 큰 데이터/스트림에서만 이득이 명확.

import attributes + JSON 모듈 — 비-JS 자원의 표준 진입

ES 모듈은 원래 JS 만 import 가 표준이었고 JSON/CSS 등은 번들러 마법에 의존했다. with { type: 'json' } 가 표준화되면서 런타임이 직접 JSON 모듈을 평가한다. 보안적으로도 "내가 JSON 으로 받겠다" 를 명시하므로 MIME 미스매치 공격 방지에 기여한다.

// 정적
import pkg from './package.json' with { type: 'json' };
// 동적
const data = await import(url, { with: { type: 'json' } });
import attributesJSON modulesMIME 검증bundler vs runtime
자주 하는 오해

assert { type: 'json' } 옛 문법으로 쓰는 것. ES2025 부터 with 가 표준이며 assert 는 deprecated.

`Promise.try` — sync/async/throw 통합 진입점

기존엔 "콜백이 sync 일지 async 일지 모를 때" 다음처럼 짰다.

Promise.resolve().then(() => maybeSync()); // 또는 new Promise(...) 래핑

그러나 즉시 throw 하는 sync 함수Promise.resolve().then(fn) 으로 잡히지만 의미상 우회. ES2025 의 Promise.try"무조건 Promise 컨텍스트로 들어가서, sync throw 도 catch 로 흘려보낸다" 는 한 줄짜리 진입점.

await Promise.try(() => maybeSync()).catch(handle);
Promise.trysync vs asyncerror normalization
자주 하는 오해

async () => maybeSync() 즉시호출(IIFE) 로 같은 효과를 보려는 것. 동작은 비슷하지만 의도/의미가 약함.

읽는 순서

  1. 1이론

    ES2025 변경사항을 데이터 변환 / 모듈 / 비동기 / 컬렉션 / 정규식 / 동기화 6개 카테고리로 나눠 한 줄씩 정리한다.

  2. 2구현

    큰 배열·무한 generator·중첩된 sync/async 호출의 세 시나리오를 (a) ES2024 이전 (b) ES2025 신기능으로 짜보고 코드 라인 수와 메모리 사용을 비교.

  3. 3실무

    프로젝트의 Array.prototype.filter().map().slice() 호출 중 큰 데이터/스트림 에 해당하는 곳을 찾아 Iterator Helpers 로 치환 후 성능 측정. JSON config import 가 번들러 마법에 의존하는 곳은 표준 import attributes 로 옮긴다.

  4. 4설명

    동료에게 "ES2025 에서 가장 개발자 일상을 바꾸는 기능 3개" 를 5분 안에 코드 예시 없이 말로 설명한다.

면접 연결 질문

mediumIterator Helpers 가 배열 메서드 체이닝과 비교해 어떤 점에서 우월한가요? 항상 권장되는 건 아닌가요?
힌트

[감점 답변] "새 표준이라 좋다". [좋은 답변] lazy 평가중간 배열이 없고 take(N) 시점에 N 개만 평가 — 큰/무한 데이터에 유리. 단 작은 고정 배열에는 체이닝 오버헤드만 늘 수 있다. 즉 "스트림/큰 데이터/제너레이터" 일 때 권장.

hard`Promise.try` 가 해결하는 문제를 구체적인 코드 한 줄 이내로 보여주실 수 있나요?
힌트

[감점 답변] "async 래핑이에요". [좋은 답변] sync throw + async reject 를 같은 catch 로 잡는 진입점. 예: await Promise.try(() => maybeSync()).catch(handle)maybeSync 가 throw 하든 reject 하든 모두 handle 로 흘러간다. 기존엔 try/catch + Promise.resolve().then(...) 두 곳을 모두 다뤄야 했다.

mediumES2025 의 `Set` 메서드는 어떤 도메인 코드에서 가독성을 가장 크게 올리나요?
힌트

[감점 답변] "수학적 집합이 필요할 때". [좋은 답변] 권한·태그·플래그 비교 같은 도메인 — 예: 사용자 권한 집합과 라우트 요구 권한의 intersection, A/B 그룹의 difference, 이전/현재 선택된 태그의 symmetricDifference. 기존엔 Array.filter(includes)O(n*m) 코드를 썼지만 Set 메서드는 의도가 명료하고 평균 O(n).

자기 점검

Iterator Helpers 의 `take(3)` 과 배열의 `slice(0,3)` 가 큰 데이터에서 어떻게 다른지 설명해보세요.
lazy중간 배열evaluationmemory
자주 하는 오해

"결과만 같으면 동등" 이라는 인식. 메모리/시간 측면에서 큰 차이가 난다.

`import config from './c.json' with { type: 'json' }` 와 `const c = JSON.parse(await (await fetch(...)).text())` 의 차이를 비교해보세요.
module graphMIME캐시정적 분석
자주 하는 오해

"같은 결과" 라는 가정. 모듈 그래프/캐시/번들러 분석/보안 면에서 다르다.