#3 - ECMAScript 또는 ES

만식이형·2023년 5월 24일
0

Javascript

목록 보기
3/10
post-thumbnail

자바스크립트를 배우다보면 "ES5", "ES6" 같은 용어들을 접하게 된다. 흔히들 자바스크립트는 ES6의 기술 규격을 따른다" 같은 표현을 한다. 이 포스팅에서는 ECMAScript가 무엇인지, 각 에디션별로 어떤 특징이 있는지 간략히 정리하고자 한다.

🧐 ECMAScript는 무엇?

ECMAScript는 "ECMA International"이라는 국제 표준화 기구가 ECMA-262라는 기술 규격에 따라 정의한 표준화된 스크립트 언어이다. "ECMA"는 "European Computer Manufacturers Association"의 약자이며, 이는 1961년에 설립된 "유럽 컴퓨터 제조업 협회"이다. 이 협회는 현재 "Ecma International"라는 이름으로 알려진 비영리 표준화 기구로 변모하였으며, 컴퓨터와 통신 기술 분야에서 국제적으로 표준을 제정하는 역할을 수행하고 있다. ECMA-262는 1997년 6월에 초판이 발행되어 2022년 6월까지 총 13개가 발행되었다. 따라서 ES5, ES6 같은 용어들은 이 국제기구에서 발행되는 표준화된 스크립트 언어인 ECMAScript와 그 버젼을 줄여서 부르는 용어이며, 현재는 ES13까지 발행되었다.

🙄 왜 표준화가 필요했나?

1996년 3월에 넷스케이프가 "Mocha"라는 이름으로 첫 자바스크립트를 Netscape Navigator 2에 탑재하였다. 약 5개월 후인 1996년 8월에 마이크로소프트는 자바스크립트의 파생버젼인 "JScript"를 Internet Explorer 3.0에 탑재했다. 이에 문제가 발생했는데, 자바스크립트와 JScript가 모두 표준화되지 않은 상태였기에 두 회사 모두 자사 브라우저의 시장점유율을 높이기 위해 자사 브라우저에서만 동작하는 기능들을 경쟁적으로 추가시켰다. 이로 인해 브라우저에 따라 웹페이지가 정상적으로 동작하지 않는 문제가 발생했다.

결국 1996년 11월, 넷스케이프 커뮤니케이션즈는 ECMA International에 자바스크립트 표준화를 요청하였다. 1997년 7월, ECMA-262라 불리는 표준화된 ECMAScript 1(이/가) 문서화되었고 상표권 문제로 자바스크립트는 ECMAScript로 명명되었다.

😉 ECMAScript 각 버젼별 간략한 정리

이는 엄격하지 않은, 간략한 정리입니다. 특징 중에 누락된 부분이 있을 수 있어요

에디션명칭출판년도특징
11997초판
21997ISO/IEC 16262 국제 표준과 완전히 동일한 규격을 적용하기 위한 변경
31999강력한 정규 표현식, 향상된 문자열 처리, 새로운 제어문 ,
try/catch 예외 처리, 엄격한 오류 정의, 수치형 출력의 포매팅 등
4폐기됨4번째 판은 언어에 얽힌 정치적 차이로 인해 버려졌다고 함
이 판을 작업 가운데 일부는 5번째 판을 이루는 기본이 되고
다른 일부는 ECMA스크립트의 기본을 이루고 있다.
5ECMAScript 200920091. 엄격 모드(Strict Mode) 도입: 엄격한 문법과 실행 환경을 강제하는 모드
2. JSON 지원: JSON 형식의 데이터를 쉽게 다룰 수 있는 메서드와 기능을 추가
3. Getter와 Setter: 객체의 속성에 대한 접근자 메서드를 정의할 수 있게 됨
5.120111. ECMAScript 5에서 도입된 엄격 모드에 일부 수정
2. 기술적 수정: ECMAScript 5.1은 ECMAScript 5에서 발견된 일부 버그와
모호한 부분을 수정
3. 유니코드 업데이트: ECMAScript 5.1은 유니코드 6.1.0 버전에 기반하여
문자열 처리와 관련된 일부 기능을 업데이트
4. ECMAScript 5.1은 ECMAScript 명세의 일부를 업데이트하고
정확성과 일관성을 개선
6ECMAScript 201520151. 화살표 함수: 간결한 함수 표현을 위한 화살표 함수가 도입됨 ( () => {} )
2. 클래스: 클래스 기반의 객체 지향 프로그래밍을 지원
3. 모듈 시스템: 모듈을 정의하고 가져오는 기능을 제공하여 코드의 모듈화를 용이하게 함
4. 확장된 문법: 템플릿 리터럴, 디스트럭처링, 확장된 매개변수 처리 등 다양한 문법적 향상
7ECMAScript 201620161. 배열에 includes() 메서드 추가: 배열 내에 특정 요소가 있는지 확인하는
includes() 메서드가 추가(Array.prototype.includes)
2. 지수 연산자: 지수 연산을 수행하는 연산자인 ** 가 도입
8ECMAScript 201720171. 비동기적인 처리를 위한 async/await 문법이 도입
2. Object.entries()Object.values(): 객체의 키와 값에 접근하기 위한 메서드가 추가
3. 문자열 패딩: 문자열의 길이를 지정하여 패딩하는 메서드인 padStart()padEnd()가 도입
9ECMAScript 201920181. 비동기 반복 처리: 비동기적으로 반복 작업을 처리하는 for-await-of 문법이 도입
2. Rest/Spread 프로퍼티: 객체의 나머지 프로퍼티를 하나의 객체로 모으는
Rest 프로퍼티와 객체의 프로퍼티를 확장하는 Spread 프로퍼티가 도입
10ECMAScript 201920191. Object.fromEntries(): 배열 형태의 키-값 쌍들을 객체로 변환하는 메서드
2. Array.prototype.flat()Array.prototype.flatMap(): 중첩된 배열을 평탄화하거나
매핑 함수를 적용하여 새로운 배열을 생성하는 메서드
3. String.prototype.trimStart()String.prototype.trimEnd(): 문자열의 앞부분이나
뒷부분의 공백을 제거하는 메서드
4. catch 문의 에러 생략: catch 절에서 에러를 명시적으로 사용하지 않을 경우,
에러를 생략하고 처리할 수 있음
11ECMAScript 202020201. BigInt: 매우 큰 정수를 나타내기 위한 BigInt 데이터 타입이 도입
2. Promise.allSettled(): 모든 프로미스가 결정될 때까지 기다린 후 결과를 반환하는 메서드
3. String.prototype.matchAll(): 정규 표현식과 문자열에 대한
반복적인 매치 결과를 반환하는 메서드
12ECMAScript 202120211. 논리 할당 연산자: 변수에 값을 할당하고 그 값을 반환하는 연산자로,
추가
2. String.prototype.replaceAll(): 문자열 내의 모든 매치된 부분을
새로운 문자열로 대체하는 메서드
3. Promise.any(): 가장 빨리 처리되는 프로미스를 반환하는 메서드
4. WeakRefs: 약한 참조를 사용하여 가비지 컬렉션에서 수거할 수 있는
객체 참조를 생성하는 기능입니다.
13ECMAScript 202220221. Math 산술 연산자 개선: Math 객체의 연산자인
Math.addExact(), Math.subtractExact(), Math.multiplyExact(),
Math.divideExact(), Math.remainder() 등이 추가
2. Promise.any()의 개선: 이제 Promise.any()는 비동기 프로미스 중 하나가 성공할 때까지
기다리며, 모든 프로미스가 거부될 때까지 기다릴 수 있다.
3. 비공개 필드 및 메서드: 클래스 내부의 비공개 필드와 메서드를 정의할 수 있는 문법이 도입.
이를 통해 클래스의 내부 상태와 동작을 보호하고 캡슐화할 수 있음
4. WeakRefs 개선: WeakRefs는 약한 참조를 통해 가비지 컬렉션에서 수거 가능한
객체 참조를 생성하는 기능으로, 이제는 약한 참조로부터 실제 객체에 대한 참조를 얻는
메서드인 deref()가 추가됨

출처

profile
즐거운 게 즐거운 것

0개의 댓글