
자바스크립트 개념을 공부하기 위해 You Don't Know JS Yet 라는 책을 읽고 있는데, 알고 있으면 좋아보이는 JS 지식을 정리해두려고 한다.
나도 그랬고, 많은 사람들이 자바스크립트 라는 이름을 처음 들으면, 자바와 관련이 있나요? 라는 질문을 던질 것이다.
자바스크립트라는 이름은 사실 마케팅 목적으로 사람들을 속이기 위해 고안한 이름이라고 한다. (지금까지도 자바와의 연관성을 묻는걸 보면 대성공인셈이다.)
무거운 언어였던 자바를 사용하는 개발자들에게 어필하고자, '가벼운 프로그램' 이라는 의미의 '스크립트(script)'를 사용해 JavaScript 라는 이름이 탄생한 것이다.
- JavaScript는 당시 Java 개발자들을 타겟으로한 가벼운 프로그램(script)에서 유래한 이름이다.
JS를 지탱하는 기본 원칙 중 하나에 하위 호환성이 존재한다. 이와 대응되는 개념인 상위 호환성과 같이 알아보자.
하위 호환성이란 단 한번이라도 유효한 JS 문법이라고 인정되면 먼 미래에 명세서가 변경되더라도 절대 그 유효성이 깨지지 않음을 보장한다는 특성이다.
즉, 과거에 작성한 코드가 현재에도 작동되는 걸 보장해준다.
하위 호환성을 보장하려면, 한 번 결정을 내린 사항이 영원히 박제되기 때문에 명세서를 바꾸거나 기능을 추가할 때 매우 엄격한 기준을 통과해야 한다고 한다.
그렇다면, TC39에서 단 한번도 하위 호환성을 깨는 결정을 하지 않았을까? 에 대한 물음은 '아니오'다.
하지만, 이런 결정은 매우 드물게 일어나고, 사용자가 눈치채지 못할 부분에만 영향을 준다고 한다.
상위 호환성이란 새로운 명세서에 추가된 문법으로 코드를 작성했을 때, 이전 명세서를 준수하는 구형 엔진에서 문제가 발생하지 않음을 보장해준다.
정리하면 다음과 같다.
하위 호환성 : 현재(미래) 엔진에서 과거(현재) 코드 실행을 보장
상위 호환성 : 과거(현재) 엔진에서 현재(미래) 코드 실행을 보장
참고로, HTML과 CSS는 하위 호환성을 보장하지는 않지만, 상위 호환성을 보장한다.
이 말을 듣자마자 ES2015, ES2016, ES2019은 버전이 아니야? 라는 생각이 들었다.
먼저 책에서는 아래와 같이 얘기한다.
TC39와 ECMA에 유지되는 공식적인 표준 JS는 단 하나뿐입니다.
처음에는 이 말을 읽고도 이해가 잘 가지 않았는데, 위에서 배운 하위 호환성 개념과 연관 짓고, 일반적인 버전의 특성을 이해하니 감이 왔다.
먼저 일반적으로, 서로 다른 버전끼리는 호환되지 않을 가능성이 있음을 이해하는 것이 좋다. (Python 2.x와 Python 3.x는 호환되지 않는 부분이 꽤나 존재한다.)
하지만 자바스크립트는 하위 호환성을 준수하기 때문에, 이전 기능을 항상 유지하면서 새로운 기능이 업데이트 된다.
그래서 다른 언어와 달리 비호환성을 거의 만들지 않기 때문에 버전이라는 개념이 필요치 않은 것이다.
ES2015, ES2016, ES2019 .. 등은 버전으로 부르고 싶어지지만, 해당 시점에 표준화되었다고 보는게 정확할 것이다.
정리하자면, 특정 환경(브라우저, Node.js)에서 지원되는 기능을 기준으로 ES2015, ES2019를 언급할 때, 이를 버전처럼 사용할 수는 있지만 JavaScript 자체는 버전으로 나뉘지 않음을 이해하면 좋을 것 같다!