[JS] Script Language, ECMAScript
스크립트 언어
스크립트 언어는 이미 존재하는 소프트웨어, 애플리케이션을 제어하기 위한 특수 목적의 언어이다. 즉, 개발자가 프로그램을 직접 제어하여 원하는 목적대로 실행시키도록 할 수 있는 언어이다. 자바스크립트가 스크립트 언어의 예이다. 독립적, 자체적인 프로그램을 구현하고 이를 어떤 전자기기에서든 동작하도록 할 수 있는 컴파일 언어와 달리, 스크립트 언어는 그 자체로는 독립적인 프로그램을 만들 수 없다. 하지만 시간이 지나며 기술이 발전함에 따라, 자바스크립트에서도 node.js 등이 등장하여 자바스크립트만으로도 백엔드 기술을 구현할 수 있는 등 독립적인 프로그램 개발이 가능해져 꼭 소프트웨어, 앱을 제어하기만을 위한 언어라고 보기가 어려워졌다.
컴파일 언어(Compile language)는 이와 달리 소스 코드 전체를 컴파일한 후 이를 실행 가능한 파일로 변환시켜 이를 실행시키는 언어이다. 스크립트 언어는 코드 해석 시 명령어를 한 줄씩 읽고 실행하는 특징을 가진다. 그래서 번역의 속도는 빠르지만 프로그램을 재실행할 때마다 매번 같은 코드를 해석해야한다는 단점을 지닌다. 반면 컴파일 언어는 한 번 컴파일 할 때는 비교적 그 속도가 느리나, 한 번 코드를 컴파일 해놓으면 재실행 시 컴파일을 다시 하지 않아도 바로 실행할 수 있다.
스크립트 언어의 특징
- 명령어를 한 줄씩 읽고 바로 해석하여 실행한다. 이 방식으로 인해 해석 속도는 빠르나, 재실행할 때마다 매번 같은 코드를 같은 방식으로 해석해야 한다. 그래서 프로그램 실행 속도는 컴파일에 비해 느리다고 한다.
- 컴파일 언어에 비해 비교적 그 문법이 간단하다.
컴파일 언어의 특징
- 비교적 문법 제약이 많아 사용이 어렵다고 한다.
- 대규모의 프로그램 실행 시 컴파일 시간이 매우 오래 걸린다. 그래서 혹여나 잦은 에러가 발생할 경우에 속도적인 측면에서 불리하다.
- 하지만 한 번 컴파일을 해놓으면 재실행해도 매번 같은 컴파일 과정을 거치지 않아도 되기에 이 경우에는 실행 속도가 비교적 빠르다.
인터프리터 언어 vs 스크립트 언어
인터프리터 언어는 컴파일러 언어와 달리, 코드를 한 줄씩 읽어 해석하고 그 때마다 해당 코드를 실행시키는 방식의 언어이다. 즉, 인터프리터 언어는 한 번에 한 줄씩 실행하는 방식이고, 컴파일러 언어는 한꺼번에 모든 코드들을 컴파일한 후에 실행시키는 방식인 것이다.
스크립트 언어와 헷갈리지 말아야 할 것은, 인터프리터 언어는 방금 언급했듯 코드를 한 줄씩 읽어 실행하는 방식의 언어를 뜻하고, 스크립트 언어는 앞서 언급했듯 소프트웨어 제어를 위한 언어이다. 단지, 빠르고 간단한 스크립트 언어의 특성 상 인터프리터 방식을 채택하는 것일 뿐이다.
ECMAScript (ES)
현재 웹 브라우저에는 크롬, Edge, 사파리 등 다양하게 존재한다. 예전에도 마찬가지였다. 그런데 예전에는 각 웹 브라우저마다 사용하는 스크립트 언어가 달랐다. 예로, netscape라는 회사에서는 자바스크립트를 스크립트 언어로 사용했다면, 마이크로소프트 사에서는 J스크립트라는 언어를 사용하였다고 한다. 이렇게 각 브라우저마다 스크립트 언어가 달라 웹사이트를 제작할 때에도 각 브라우저에 맞는 언어로 재작성해야했다. 이러한 역사적 배경에 의해 후에 브라우저에서 사용할 스크립트 언어의 웹 표준화를 위한 규격이 제시되었는데, 그것이 ECMA-262였고, 이 ECMA-262의 규격을 준수하여 개발된 범용 스크립트 언어를 ECMAScript(에크마 스크립트, ES라고 줄여 부르기도 한다)라 한다. ECMAScript는 스크립트 언어가 준수해야 할 여러 규칙들을 제시한다. 이 이후로 여러 스크립트 언어들이 이 규격을 따르면서 웹 브라우저간 호환성 문제를 해결할 수 있게 되었다고 한다.
자바스크립트도 이 ECMAScript의 사양을 준수하는 스크립트 언어가 되었다.
ECMAScript도 시간이 지남에 따라 점점 발전해왔기에 여러 버전이 존재한다. 그 중 2015년에 나온 ES6가 유명하다. 6번째 버전이란 뜻으로 ES6라 표기되며, ECMAScript2015, ES2015로 표기되기도 한다. 해당 버전은 ES5를 비롯한 그 이전 버전들과 비교했을 때. 새로운 문법들이 대거 추가되었고, 가독성, 유지보수성이 향상되었기에 다른 버전에 비해 유명하다. ES6에서 추가된 문법으로는 let, const, 화살표 함수, 클래스, template literal, promise, async/await 등이 있다.
Cross browser 호환성
ES6의 등장에도 불구하고, Internet Explorer와 같은 일부 브라우저들은 ES6에서 제시하는 사양들을 준수하지 않아 호환이 되지 않는다고 한다. 따라서 이 경우 어쩔 수 없이 이전 버전 코드 (레거시 코드)들로 작성할 수 밖에 없다고 한다. 한 편, ES6으로 작성된 코드를 손쉽게 ES5 코드로 바꿔주는 바벨(babel)과 같은 기술이 있다고 한다. 이러한 기술을 이용하면 ES6를 지원하지 않는 브라우저에서도 동일한 웹 화면을 볼 수 있도록 호환성을 확보할 수 있을 것이다.
References
[1] 스크립트 언어
[Programming Language] 스크립트 언어(Script Language) vs 컴파일 언어(Compile Language)
[2] https://namu.wiki/w/스크립트 언어
[4] JavaScript와 ECMAScript는 무슨 차이점이 있을까? - 재그지그의 개발 블로그
[5] ECMA스크립트
[7] ES5 to ES6+
This content is licensed under
CC BY-NC 4.0
댓글남기기