애드블럭 종료 후 사이트를 이용해 주세요.

ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Javascript ES16(ECMAScript 2025) 문법정리
    JS & TS 2025. 7. 9. 16:32
    728x90
    반응형

    ES2024에 대해 정리한 게 얼마 전 같은데 벌써 ES2025에 대한 글을 작성하고 있네요.

    이번 업데이트는 개인적으로 JS 개발자들이 자주 겪던 불편함을 개선하는데 초점을 맞춘 업데이트라고 느끼고 있습니다.

    특히 정규 표현식 업데이트들은 개인적으로 정말 유용하게 사용할 수 있을 것 같습니다.

    1. JSON 모듈 및 Import Attributes

    이제 ES2025에서는 JSON 파일을 자바스크립트에서 직접 모듈 형태로 불러올 수 있습니다.

    Import Attributes를 통해 파일의 타입을 명시적으로 지정할 수 있습니다.

    이전에도 사용할 수 있지 않았나 하시는 분들은 Webpack이나 Vite 등의 번들러를 통해 제공된 기능을 이용한 것이고, 실제 Node, 브라우저 환경에서 정식 지원은 이번에 추가되었습니다.

    // 이전 CommonJS 방식
    const settings = require('./settings.json');
    
    // ES2025
    import settings from "./settings.json" with { type: "json" };
    console.log(settings.apiEndpoint);
    
    // 동적 import
    const config = await import("./config.json", { with: { type: "json" } });
    console.log(config.default);

    지원 환경

    • Node.js 22+
    • Chrome/Edge 123+
    • Firefox 138+
    • Safari 17.2+

    2. Iterator Helper Methods (이터레이터 헬퍼)

    이터레이터에 map, filter, take, drop, flatMap 등 배열의 메서드와 유사한 메서드를 추가하여 lazy 처리로 효율적인 체이닝 처리를 제공해 대량 데이터 처리 시 효율을 향상됩니다.

    // 이전
    const products = Array.from(fetchProducts())
      .filter(product => product.price > 100)
      .map(product => ({ ...product, price: product.price * 0.9 }));
    
    // ES2025
    const products = fetchProducts(); // Assume fetchProducts() returns an iterable
    const discountedProducts = products
      .filter(product => product.price > 100)
      .map(product => ({ ...product, price: product.price * 0.9 }))
      .toArray();

    지원 환경

    • Node.js 22+
    • Chrome/Edge 125+
    • Firefox 134+
    • Safari 18.4+

    3. Set 객체 신규 메서드

    Set 객체에 수학적 집합 연산 메서드가 추가되어 합집합, 교집합, 차집합, 대칭차 등의 연산을 간단하게 수행할 수 있습니다.

    const adminUsers = new Set(['alice', 'bob']);
    const activeUsers = new Set(['bob', 'charlie']);
    
    // 이전
    const intersection = new Set([...adminUsers].filter(user => activeUsers.has(user)));
    
    // ES2025
    const intersection = adminUsers.intersection(activeUsers);

    지원 환경

    • Node.js 22+
    • Chrome/Edge 110+
    • Firefox, Safari 최신 버전 지원

    4. RegExp.escape() 메서드

    사용자 입력 등 동적으로 정규식을 생성할 때 문자열 내 특수문자를 자동 이스케이프 처리해 주는 메서드입니다.

    직접 수작업으로 \를 넣는 복잡함을 해소하고, 누락되는 경계들을 줄여주는 효과가 있습니다.

    // 이전
    const escapedInput = userInput.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
    const safePattern = new RegExp(escapedInput);
    
    // ES2025
    const userInput = "(special)*.?";
    const safePattern = new RegExp(RegExp.escape(userInput));

    지원 환경

    • Node.js 24+
    • Chrome/Edge 136+
    • Firefox 134+
    • Safari 18.2+

    5. 정규식 부분 플래그 (Pattern Modifiers)

    정규표현식의 i(대소문자 무시), m(다중행), s(닷 all) 플래그를 패턴의 일부에만 적용할 수 있게 되었습니다.

    새로운 Modifier 문법 (?flags:pattern)을 사용하여 괄호 안 부분패턴에만 특정 플래그들을 켜거나 끌 수 있습니다.

    복잡한 정규식에서 일부 섹션만 대소문자 무시 등의 처리가 필요할 때 유용합니다.

    // 이전 - 아래와 패턴을 분할 처리하는 등 불편했음.
    // 
    function createSKURegex(sku) {
      return new RegExp(`^product-${sku}$`, "i"); // 대소문자 무시
    }
    
    const result = createSKURegex("SKU123").test("product-sku123"); // true
    
    
    // ES2025
    const regex = /^product-(?i:SKU\d{3})$/;
    console.log(regex.test("product-sku123")); // true
    console.log(regex.test("product-SKU456")); // true
    console.log(regex.test("Product-sku789")); // false

    지원 환경

    • Chrome/Edge 125+
    • Firefox 최신 버전 지원
    • Safari 미지원

    6. 중복 이름 캡처 그룹 허용

    서로 다른 대안(alternative) 내에서 동일한 이름의 캡처 그룹을 선언할 수 있어 가독성이 좋아집니다.

    // 이전 - 캡쳐 그룹의 이름 중복 불가능.
    
    // ES2025
    const regex = /(?<value>\d+)|(?<value>[a-z]+)/v;
    console.log(regex.exec("123").groups.value); // "123"
    console.log(regex.exec("abc").groups.value); // "abc"

    지원 환경

    • Chrome/Edge 최신 버전 지원
    • Safari 미지원 (정규식 v 플래그 필수)

    7. Promise.try() 추가

    동기 함수 및 예외 발생 가능성이 있는 로직을 Promise로 간단히 감싸서 처리할 수 있습니다.

    기존에 Promise.resolve().then(func) 패턴이나 서드파티 p-try 등을 사용하던 것을 대체하여 간결한 에러 처리 흐름을 제공합니다.

    // 이전
    async function getUserData() {
      try {
        const userId = getCurrentUserId();
        return await fetchUser(userId);
      } catch (e) {
        return Promise.reject(e);
      }
    }
    
    // ES2025
    async function getUserData() {
      return Promise.try(() => {
        const userId = getCurrentUserId();
        return fetchUser(userId); // returns Promise
      });
    }

    지원 환경

    • Node.js 24+
    • Chrome/Edge 128+
    • Firefox 134+
    • Safari 18.2+

    8. Float16 (16비트 부동소수점) 지원

    메모리 효율성을 위한 Float16 지원이 추가되어 머신러닝이나 그래픽 처리와 같은 영역에서 유용하게 사용할 수 있습니다.

    기존 Float32Array를 사용하여 높은 메모리 사용량이 필요했던 부분이 개선되었습니다.

    // ES2025
    const buffer = new ArrayBuffer(2);
    const view = new DataView(buffer);
    view.setFloat16(0, 9.87);
    
    console.log(view.getFloat16(0)); // 약 9.8671875 (반올림 발생)

    지원 환경

    • Node.js 24+
    • Chrome/Edge 135+
    • Firefox 129+
    • Safari 18.2+
    반응형

    댓글

Designed by Tistory.