오랜 기간 느리게 변화하던 자바스크립트가 폭발적으로 빠르게 변화하기 시작했습니다. 마치 자고 일어나면 옆자리 동료가 한 번도 본 적 없는 자바스크립트 코드를 짜고 있는 것만 같았습니다. 빠르게 변하는 표준을 따라가기 위해 블로그를 읽어 보지만, 한 가지 기능에 대한 단편적인 설명만 있으니 이게 전부인지 알 수 없었습니다. ECMA-262 명세서를 읽자니 무슨 말을 하는 것인지도 모르겠고, 내용을 이해하기도 쉽지 않았습니다. 게다가 명세서는 꾸준하게 새 버전이 나옵니다. 심지어 명세서에 포함되지 않은 기능을 이미 사용하고 있을 때도 있습니다. 바로 제안 단계에 있는 기능입니다.
이 책은 ES2015부터 ES2020까지 자바스크립트의 추가 사항과 아직은 포함되지 않은 기능에 대한 미리보기를 다룹니다. 최신 구문에는 널 병합 연산, 옵셔널 체이닝, let과 const, 클래스 구문, 프라이빗 메서드, 프라이빗 필드, new.target, 숫자 구분 기호, BigInt, 디스트럭처링, 기본값 매개변수, 화살표 함수, 비동기 함수, await, 제너레이터 함수, ...(나머지와 스프레드), 템플릿 리터럴, 이진 및 8진 리터럴, **(지수 연산자), 계산된 속성/메서드 이름, for-of, for-await-of, 단축 속성 등과 모듈, 프라미스, 이터레이터와 이터러블, 심볼, 프록시, 리플렉션, 타입이 있는 배열, 원자적 연산, 공유 메모리, 위크맵과 위크세트가 있습니다.
새로운 기능은 개발자의 생산성과 표현력에 새로운 세계를 열어 주었습니다. 클래스 구문으로는 훨씬 간단하고 선언적인 구문으로 객체를 생성할 수 있고, 비동기 함수 덕분에 “콜백 지옥”에서 벗어날 수 있었습니다. 디스트럭처링을 통해서는 객체나 배열 리터럴과 유사하게 간결한 방식으로 배열/객체에서 값을 쉽게 선택할 수 있고 나머지 구문을 통해 객체 속성이나 함수 인수의 개수에 대해 신경을 덜 써도 됩니다. 이 외에도 함수를 호출할 때 인수 목록에 후행 쉼표를 허용한다던가 새로운 스타일의 8진수 리터럴, 이진수 리터럴, 숫자 표기 시 구분 문자, 정규 표현식 개선, 표준 라이브러리 추가, 심볼, BigInt를 비롯한 수많은 기능으로 개발자의 편의성을 높여 주었습니다.
이 책은 자바스크립트를 막 시작한 사람을 위한 소개용 책은 아닙니다. 하지만 처음부터 끝까지 읽어도 되고 잠시 서가에 놔두며 오래된 자바스크립트로 작업하다가 어딘가에서 새롭고, 익숙하지 않은 구문을 볼 때마다 필요한 내용을 참조할 수 있습니다. 어떤 방식으로 읽든 각 장마다 일반적인 함정을 강조하고 이를 피하는 방법을 설명하는 “과거 습관을 새롭게” 절에서 가장 많은 깨달음을 얻을 수 있을 겁니다. 여기에는 새 기능을 사용해야 하는 경우와 사용하지 말아야 하는 경우에 대한 조언도 있습니다. 자바스크립트의 환경 속에서 메모리나 구조가 어떻게 동작하는지를 보여주는 그림을 통해서 자바스크립트 문법뿐 아니라 실제 인터프리터/컴파일러의 동작 원리에 대해서도 알 수 있습니다.
이 책을 통해 자바스크립트가 어떤 과정을 통해 제안에서 명세가 되는지, 지금까지 어떤 변화가 있었고 앞으로 어떤 변화가 있을지, 어떻게 그 변화를 따라갈지 알 수 있습니다. 당장 모든 코드를 새로운 코드로 바꿀 필요는 없지만 조금씩 적용하다 보면 자바스크립트가 과거의 언어가 아니라는 점을 깨닫고 다양한 편의 기능에 자바스크립트의 매력에 빠져들게 될 것입니다. 이제 누구를 만나도 자바스크립트가 어떻게 발전하고 있는지를 토의할 수 있게 되기를 바랍니다.
끝으로 낳아주시고 길러주신 부모님, 밤낮으로 던지는 난해한 번역 용어에 대해 같이 토론해 준 개발자 동료들, 함께 사람 사이의 더 나은 연결을 꿈꾸고 있는 컨스택츠팀 동료들, 부족한 점이 많은 초보 역자의 실수에도 올바른 길로 이끌어 주신 길벗 출판사 한동훈 부장님께 감사드립니다.
--- 「역자 서문_조현석」 중에서