JavaScript의 역사나 발전에 대한 내용을 살펴보다보면 ECMAScript라는 단어가 몇 번이고 되풀이 되는 것을 볼 수 있다.
특히 새로운 기능에 대한 이야기를 할때, '이 기능은 ES6에서 추가되었다'라는 식의 문장을 많이 볼 수 있다. 그렇다면 여기서 말하는 ES, ECMAScript라는 것이 도대체 무엇일까?
이번 글에서는 JavaScript와 ECMAScript은 어떤 개념이며, 어떤 역할을 수행하는지, JS의 발전상에 대한 내용을 정리해보려 한다.
1995년, Netscape에서 지금까지 웹 개발에 표준으로 사용되는 프로그래밍 언어 'JavaScript'를 개발하였다.
JavaScript가 웹 시장의 표준이 되면서 다양한 종류의 브라우저에서 동시에 사용되었는데, 같은 언어이지만 사용되는 환경이 달라지면서 호환성 문제가 대두되기 시작했다.
이에 ECMA에서는 JavaScript가 여러가지 환경에서 동일하게 동작할 수 있도록 JS의 표준 사양을 개발하고 이를 ECMAScript라 명명하였다.
이후 JavaScript는 ECMAScript을 표준으로 삼았고, 웹 브라우저 / 서버 / 모바일 웹 등 JavaScript가 사용되는 모든 곳에서 ECMAScript의 사양을 따르도록 발전하게 된다.
ECMA International. 정보, 통신에 관련된 기술의 표준을 제정하는 비영리 기구. 이들이 관여한 기술은 여럿 존재하는데, 대표적으로 키보드 배열에 대한 표준을 제정하였다.
따라서 JavaScript는 스스로 발전할 때 반드시 ECMAScript와 함께 하도록 되어있다. JS가 어떻게 발전해왔는지 아래와 같이 간략하게 정리해보았다.
발표 연도: 1997년
주요 내용: ECMAScript의 첫 번째 공식 버전. 기본적인 언어 구조와 기능을 제공.
발표 연도: 1998년
주요 내용: 주로 ISO/IEC 표준과의 호환성을 위한 사소한 편집적 변경.
발표 연도: 1999년
주요 내용:
정규 표현식, try/catch 예외 처리 등이 추가.
JavaScript의 기능이 크게 확장되면서 웹 개발의 표준으로 자리매김.
발표 연도: 없음, 개발중단
주요 내용: 클래스, 모듈, 인터페이스 등 많은 혁신적인 기능 제안. 하지만 복잡성과 호환성 문제로 인해 개발 중단.
발표 연도: 2009년
주요 내용:
JSON 지원, 엄격 모드(strict mode), 배열 메서드 추가 등의 개선.
호환성과 코딩의 신뢰성 향상에 중점.
발표 연도: 2015년
주요 내용:
클래스, 모듈, 화살표 함수, 프로미스, 템플릿 리터럴, let/const 키워드 등이 추가.
JavaScript의 가장 큰 업데이트 중 하나.
발표 연도: 2016년
주요 내용:
Array.prototype.includes, 지수 연산자(**) 추가.
발표 연도: 2017년
주요 내용:
Async/await, Object.entries(), Object.values() 등이 추가.
발표 연도: 2018년
주요 내용:
비동기 반복(Async iteration), Rest/Spread 속성, Promise.prototype.finally() 등이 추가.
발표 연도: 2019년
주요 내용:
Array의 flat()과 flatMap() 메서드, Object.fromEntries() 추가.
발표 연도: 2020년
주요 내용:
BigInt 데이터 타입, Optional Chaining, Nullish coalescing 연산자 등 추가.
발표 연도: 2021년
주요 내용:
문자열의 replaceAll() 메서드, Promise.any(), 논리 할당 연산자 등 추가.
발표 연도: 2022년
주요 내용:
클래스 필드, Top-level await, 사적 필드(private fields)의 존재 여부를 확인하는 더 간단한 문법, RegExp Match Indices, Array.prototype.at() 메서드 등 추가.
발표 연도: 2023년
주요 내용:
Array.findLast() 및 Array.findLastIndex() 메서드, 해시뱅(Hashbang) 구문이 표준화, Symbols as WeakMap keys, Change Array by Copy 등의 기능 추가.
ES6가 업데이트된 시점에서 ECMAScript의 버전 이름을 부르는 규칙이 연도 기반으로 변경되었다. 각 버전과 해당 연도를 연동하여 출시 연도를 더 쉽게 식별하기 위함이다.
어차피 매년 개선된다고 하면 ECMAScript는 항상 최신의 것만 사용하면 좋지 않을까?
문제는 각 웹 브라우저나, 서버 등의 환경에서 지원하는 ECMAScript의 버전이 다르다는 것이다. 새로운 ECMAScript가 출시되었다고 해서 웹 브라우저들이 이를 지원해주느냐는 다른 이야기이기 때문이다.
게다가 이전 버전으로 제작된 프로그램의 경우 최신 버전에서 지원하는 기능과 문법을 함부로 사용했다간 문제가 발생할 수도 있다.
가령 ECMAScript의 가장 큰 변화 중 하나인 ES6는 출시된 지 8년이 넘어가는 과거의 일이지만, 한번 개발된 코드를 새로운 ECMAScript가 출시되었다고 해서 계속 최신 문법으로 리팩토링해줄 수는 없는 노릇이기 때문.
따라서 개발자들은 다양한 브라우저에서 자신의 코드가 올바르게 작동하도록 하기 위해 ECMAScript 버전을 신중하게 고려해야한다.
ECMAScript의 발전을 배우기에 좋은 글이네요! 잘봤습니다.