JavaScript Versions
JavaScript Versions: 주요 버전과 특징
JavaScript는 1995년에 처음 개발된 이후 꾸준히 진화해왔습니다. ECMAScript는 JavaScript의 표준 사양으로, JavaScript의 기능과 구문을 정의합니다. ECMAScript 버전은 JavaScript의 기능을 확장하고 성능을 개선하는 데 중점을 두며, 버전마다 새로운 기능이 추가되었습니다.
이 가이드는 JavaScript의 주요 버전과 각 버전에서 도입된 중요한 기능을 설명합니다. ES3부터 최신 버전까지의 ECMAScript 버전을 다루며, 각 버전의 특징을 알아봅니다.
1. ECMAScript 1 (ES1) – 1997
- *ECMAScript 1 (ES1)**은 JavaScript의 첫 번째 표준화 버전으로, JavaScript가 웹 브라우저에서 기본적인 동작을 수행할 수 있도록 설계되었습니다. ES1에서는 기본적인 제어문, 객체, 함수 등의 필수 기능을 정의했습니다.
주요 기능:
- 기본 제어 구조:
if
,for
,while
등 - 기본 데이터 타입:
Number
,String
,Boolean
- 기본 객체:
Object
,Array
,Date
,Math
2. ECMAScript 2 (ES2) – 1998
- *ECMAScript 2 (ES2)**는 ES1에 비해 새로운 기능보다는 ISO 표준과의 일관성을 유지하기 위해 수정된 버전입니다. 주로 표준화 작업이 이루어졌으며, 새로운 기능은 추가되지 않았습니다.
3. ECMAScript 3 (ES3) – 1999
- *ECMAScript 3 (ES3)**는 JavaScript에 중요한 기능들이 추가된 버전입니다. ES3는 JavaScript가 폭넓게 사용되는 웹 브라우저 환경에서 안정적이고 성능이 개선된 기능들을 제공합니다. 인터넷 익스플로러 6과 같은 브라우저들이 ES3를 지원했습니다.
주요 기능:
- 정규 표현식 (
RegExp
) 지원 - try...catch 구문을 통해 에러 처리 기능 추가
for...in
반복문을 사용해 객체의 속성 순회 가능Array
메서드 추가:push()
,pop()
,shift()
,unshift()
- 엄격하지 않은
delete
연산자 도입 (객체의 속성 삭제)
4. ECMAScript 4 (ES4) – 취소됨
- *ECMAScript 4 (ES4)**는 JavaScript를 크게 확장하는 야심찬 업데이트가 계획되었지만, 복잡성과 브라우저 간 호환성 문제로 인해 최종적으로 취소되었습니다. ES4에서 논의된 많은 기능들은 후에 ES6(ECMAScript 2015)에서 다시 도입되었습니다.
5. ECMAScript 5 (ES5) – 2009
- *ECMAScript 5 (ES5)**는 JavaScript의 성능과 유지보수성을 개선하고, 개발자가 더 안전하고 오류를 방지할 수 있는 코드를 작성할 수 있도록 돕는 기능을 도입했습니다. 모던 웹 애플리케이션에서 ES5가 널리 사용되었으며, 오늘날 대부분의 브라우저가 ES5를 지원합니다.
주요 기능:
- 엄격 모드 (Strict Mode):
"use strict";
를 사용해 코드를 더 엄격하게 검사 Array
메서드 추가:map()
,filter()
,reduce()
,forEach()
등Object
메서드 추가:Object.create()
,Object.keys()
,Object.defineProperty()
- JSON 지원:
JSON.parse()
,JSON.stringify()
메서드 추가 Function.prototype.bind()
: 함수의this
바인딩을 고정하는 기능Array.isArray()
: 배열인지 확인하는 메서드 추가
6. ECMAScript 6 (ES6 / ECMAScript 2015) – 2015
ECMAScript 6 (ES6), 또는 ECMAScript 2015는 JavaScript에 많은 새로운 기능과 구문을 도입한 중요한 업데이트입니다. ES6는 JavaScript의 생산성과 유지보수성을 크게 개선했으며, 모듈화와 클래스 기반 객체지향 프로그래밍을 지원합니다.
주요 기능:
let
과const
: 블록 스코프 변수 선언- 화살표 함수 (Arrow Functions): 간결한 함수 표현식
- 클래스 (Classes): 클래스 기반 객체지향 프로그래밍 지원
- 템플릿 리터럴 (Template Literals):
${}
를 사용한 문자열 삽입 - 디스트럭처링 (Destructuring): 객체와 배열에서 값 추출
- 모듈 (Modules):
import
,export
로 모듈화 지원 - 프로미스 (Promises): 비동기 작업 처리
for...of
반복문: 이터러블 객체 순회- 기본 매개변수 (Default Parameters): 함수 매개변수에 기본값 지정
7. ECMAScript 7 (ES7 / ECMAScript 2016) – 2016
- *ECMAScript 7 (ES7)**은 상대적으로 작은 업데이트로, 두 가지 주요 기능이 추가되었습니다.
주요 기능:
Array.prototype.includes()
: 배열에 특정 요소가 있는지 확인- 지수 연산자 (
*
):Math.pow()
대신 사용할 수 있는 지수 연산자
8. ECMAScript 8 (ES8 / ECMAScript 2017) – 2017
- *ECMAScript 8 (ES8)**에서는 JavaScript의 비동기 작업을 더욱 간편하게 처리할 수 있도록
async
/await
구문이 도입되었습니다. 또한, 객체와 문자열을 더 쉽게 다룰 수 있는 메서드가 추가되었습니다.
주요 기능:
async
/await
: 프로미스를 비동기 함수로 처리- *
Object.entries()
*와Object.values()
: 객체의 키-값 쌍과 값만을 배열로 반환 - 문자열 패딩 (String Padding):
padStart()
,padEnd()
메서드 Object.getOwnPropertyDescriptors()
: 객체의 속성 설명자 반환
9. ECMAScript 9 (ES9 / ECMAScript 2018) – 2018
- *ECMAScript 9 (ES9)**에서는 비동기 처리, 스프레드 연산자 등에서 개선된 기능이 추가되었습니다. 특히, 비동기 반복문이 새롭게 도입되었습니다.
주요 기능:
- 비동기 반복문 (
for await...of
): 비동기 이터러블 객체 순회 - 객체 스프레드 연산자 (
...
): 객체 복사 및 병합 - Promise.prototype.finally(): 비동기 작업이 완료된 후 실행되는 처리
- 정규 표현식 개선: 명명된 그룹 캡처 및 Lookbehind 추가
10. ECMAScript 10 (ES10 / ECMAScript 2019) – 2019
- *ECMAScript 10 (ES10)**에서는 배열, 객체 및 문자열 처리를 더욱 쉽게 할 수 있는 기능들이 추가되었습니다.
주요 기능:
- *
Array.prototype.flat()
*와flatMap()
: 중첩 배열을 평탄화 Object.fromEntries()
: 키-값 쌍 배열을 객체로 변환String.prototype.trimStart()
와trimEnd()
: 문자열의 앞뒤 공백 제거- 옵셔널 캐치 바인딩:
catch
블록에서 오류 객체 생략 가능
11. ECMAScript 11 (ES11 / ECMAScript 2020) – 2020
- *ECMAScript 11 (ES11)**에서는 옵셔널 체이닝과 Nullish 병합 연산자 같은 기능들이 추가되어, 더 안전하고 명확한 코드를 작성할 수 있게 되었습니다.
주요 기능:
- 옵셔널 체이닝 (
?.
): undefined 또는 null 값에서 에러 없이 속성 접근 가능 - Nullish 병합 연산자 (
??
): null 또는 undefined인 경우만 기본값 적용 - BigInt: 매우 큰 정수를 처리할 수 있는 새로운 숫자 타입
Promise.allSettled()
: 모든 프로미스가 완료된 후 결과를 반환globalThis
: 전역 객체
에 안전하게 접근할 수 있는 표준화된 방법
12. ECMAScript 12 (ES12 / ECMAScript 2021) – 2021
- *ECMAScript 12 (ES12)**에서는 논리 연산자를 사용한 할당, 숫자 구분자, 정규 표현식에서 새로운 기능들이 추가되었습니다.
주요 기능:
- 논리 할당 연산자 (
&&=
,||=
,??=
): 논리 연산과 할당을 결합 - 숫자 구분자 (
_
): 긴 숫자에 구분자를 추가해 가독성 향상 String.prototype.replaceAll()
: 문자열에서 모든 일치하는 값 교체- WeakRefs: 객체에 약한 참조를 추가하여 가비지 컬렉션을 방해하지 않음
- 정규 표현식 개선: 일치되는 텍스트에서 일치 부분 찾기
13. ECMAScript 13 (ES13 / ECMAScript 2022) – 2022
- *ECMAScript 13 (ES13)**는 최신 버전으로, 일부 추가된 최적화 기능들과 프로그래밍 흐름을 향상시키기 위한 기능들이 포함되었습니다.
주요 기능:
at()
메서드: 배열 및 문자열의 음수 인덱싱 지원Error.cause
: 오류 체인 정보를 제공하여 오류의 원인을 더 쉽게 파악- 정적 블록: 클래스를 정의할 때 정적 블록을 사용해 정적 속성을 초기화
요약
- ES5는 엄격 모드, 새로운 배열 메서드 등을 도입해 JavaScript의 기반을 개선했습니다.
- *ES6(ECMAScript 2015)**는 클래스, 모듈화, 화살표 함수 등 JavaScript의 가장 중요한 기능들을 대거 추가한 주요 업데이트입니다.
- ES7부터 ES13까지는 새로운 기능과 성능 최적화에 중점을 두며, 비동기 처리, 객체 및 배열 메서드, 옵셔널 체이닝과 같은 유용한 기능들을 추가했습니다.
각 버전에서 추가된 기능들을 잘 활용하면 JavaScript로 더 간결하고 효율적인 코드를 작성할 수 있습니다.