Node.js

JavaScript ES9

jmkim9 2024. 3. 28. 10:18
반응형

JavaScript는 매년 새로운 버전의 ECMAScript 사양이 발표되면서 지속적으로 발전하고 있습니다.

ES9(ECMAScript 2018)는 ES6, ES7, ES8에 이어 자바스크립트에 작지만 유용한 기능들을 추가했습니다.

이번 포스트에서는 ES9에서 추가된 주요 기능들을 살펴보겠습니다.

 

 

1. 객체 Rest/Spread 프로퍼티(Object Rest/Spread Properties)

ES9에서는 객체에 대해서도 Rest/Spread 연산자를 사용할 수 있게 되었습니다. 

이를 통해 객체의 복사, 병합, 분해 등의 작업을 더욱 간편하게 수행할 수 있습니다.

// 객체 복사 
const obj1 = { a: 1, b: 2 }; 
const obj2 = { ...obj1 };		// { a: 1, b: 2 } 

// 객체 병합 
const obj3 = { c: 3, ...obj1 };		// { c: 3, a: 1, b: 2 } 

// 객체 분해 
const { a, ...rest } = obj1;		// a = 1, rest = { b: 2 }

 

2. 정규 표현식 개선(Regular Expression Improvements)

ES9에서는 정규 표현식에 몇 가지 개선 사항이 추가되었습니다.

  • s 플래그(dotAll): . 패턴이 개행 문자를 포함하도록 변경되었습니다.
  • 명명된 캡처 그룹(Named Capture Groups): 정규 표현식 내에서 그룹에 이름을 붙일 수 있습니다.
  • 후행 반복 구문(Look-behind Assertions): 패턴에 앞서 나오는 문자열을 검사할 수 있습니다.
// dotAll 플래그 
const regex1 = /hello.world/s; 

// 명명된 캡처 그룹 
const regex2 = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/; 
const match = regex2.exec('2023-04-01'); 
console.log(match.groups);			// { year: '2023', month: '04', day: '01' } 

// 후행 반복 구문 
const regex3 = /(?<=\$)\d+(\.\d*)?/;		// 달러 기호 뒤에 오는 숫자 패턴

 

3. 비동기 반복(Asynchronous Iteration)

ES9에서는 비동기 반복을 위한 새로운 기능이 추가되었습니다. 

Symbol.asyncIterator를 사용하면 비동기 객체에 대해 for await...of 루프를 사용할 수 있습니다.

const fetchData = async () => { 
	const response = await fetch('/data'); 
    return response.json(); 
}; 

const dataStream = { 
	async *[Symbol.asyncIterator]() { 
    	const data1 = await fetchData(); 
        yield data1; 
        const data2 = await fetchData(); 
        yield data2; 
    } 
}; 

(async () => { 
	for await (const data of dataStream) { 
    	console.log(data);
    }
})();

 

4. Promise.finally()

ES9에서는 Promise.finally() 메서드가 추가되었습니다. 

이 메서드는 Promise가 처리되었을 때(성공 또는 실패) 호출되는 콜백 함수를 제공합니다.

fetch('/data')
	.then(response => response.json())
    .catch(error => console.error(error))
    .finally(() => console.log('처리가 완료되었습니다.'));

 

 

ES9는 JavaScript 언어에 작지만 유용한 기능들을 추가했습니다. 

객체 Rest/Spread 프로퍼티는 객체 처리를 더욱 간편하게 해주며, 정규 표현식 개선 사항은 패턴 매칭의 유연성을 높여줍니다. 

또한, 비동기 반복 기능과 Promise.finally() 메서드는 비동기 프로그래밍을 더욱 편리하게 만들어줍니다.

반응형