PracticeEveryday
JavaScript 본문
왜 브라우저는 스크립트 언어를 사용했는가?!
스크립트 언어는 연극 용어에서 따온 말이다.
연극에서의 '스크립트'는 배우의 대사를 중점으로 배우의 표정, 등장과 퇴장, 무대장치을 중심으로 지시해놓은 내용을 말한다.
프로그래밍에서 '스크립트 언어'의 역할을 생각해보면 왜 스크립트라고 했는지 이해가 될 것이다.
프로그래밍의 스크립트 언어는 기존에 이미 존재하는 소프트웨어를 제어하기 위한 용도를 쓰이는 언어이다.
연극에서 스크립트가 극 안의 상황에서 배우가 어떻게 행동할 것인지 지시해놓은 것처럼,
스크립트 언어도 소프트웨어를 어떻게 실행할 지 제어한다.
컴파일러를 사용해 실행하면, 기계어로 번역이 된 채로 바로 실행할 수 있다.
하지만, 규모가 큰 프로그램이라면 컴파일에 몇 시간이 걸릴 수 있다. 그렇게 오랜 시간을 들여 컴파일을 했는데, 얼마 안돼 다시 수정을 한다고 하자.
특히 수정을 많이 해야하는 작업이라면, 시간 낭비가 어마어마할 것이다.
반대로, 인터프리터 방식은 소스코드를 직접 바로바로 실행해 디버깅이 편리하다.
스크립트 언어는 인터프리터 방식에 사용하기 위해 나온 것으로, 응용 소프트웨어와 상호작용하며 제어한다.
아래는 자바스크립트 소스코드의 예시다. 자바스크립트를 사용해 웹 브라우저의 실행을 제어할 수 있다.
궁금한 사람은 현재 창에서 개발자도구(F12 또는 우클릭-검사) - console 에서 아래 코드를 입력하면 된다.
window.open('221457352867')
위에서 말했듯이 스크립트 언어의 특징은 새로운 프로그램을 만들기 보다는 '기존'의 프로그램을 제어하기 위해 쓰인다. 웹이 없다면 자바스크립트를 쓰는 의미가 없는 것처럼, 스크립트 언어들은 기존 프로그램을 전제로 사용한다.
프로그래밍 언어인데 그 용도가 주로 운영체제 위에서 움직이는 새로운 프로그램을 만드는 것보다는,기존에 존재하는 어떤 다른 프로그램들을 제어하기 위해 쓰이며 그 기존의 프로그램들 위에서 구동이 지원되는 언어들을 스크립트 언어라고 부르기로 한 것이다.
웹 브라우저에서 구동이 지원되는 자바스크립트나, 플래시를 제어하기 위해 플래시에서 구동이 지원되는 액션 스크립트 등이대표적인 스크립트 언어다
위에서 스크립트 언어로써 언급된 JavaScript를 봐도 웹 환경이 고도화, 표준화되고 Node.js 런타임이나 Electron 등이 등장함에 따라 그 자체만으로도 독립적인 프로그램 개발에 사용될 수 있도록 발전한지라 이를 단순히 웹 브라우저용 제어 언어라고만 정의할 수가 없게 되었다.
더 나아가 TypeScript나 CoffeeScript처럼 컴파일 결과물로 기계어가 아닌 JavaScript를 출력해서 동작하는 언어까지 등장한 상황.
결론적으로 초창기 프로그래밍 언어론 교과서가 쓰였던 시절과는 달리 프로그래밍 언어들이 고도로 발달하고 높은 수준의 추상화가 진행됨에 따라 단순하게 어떤 언어와 그 언어가 동작하는 런타임을 뭉뚱그려서 '이 언어는 XX형 언어이다'라는 식으로 정의하는 것 자체가 무의미해져가는 추세에 있다.
vs compile language
컴파일 과정을 거치지 않고 실시간으로 텍스트를 분석하며 실행된다. (일부 간단한 컴파일을 지원하는 스크립트 언어도 있다)
코드에 문법 오류가 있으면 실행 시점에서 발견된다. (근래에는 실행 전 파싱 단계에서 발견되는 경우가 많다.)
컴파일 언어보다 단순하고 쉬운 문법을 사용하는 경우가 많다.
바이너리 컴파일된 언어는 목표로 한 운영체제에서만 실행할 수 있으나, 스크립트 언어로 된 코드는 스크립트 엔진이 포팅되어 있는 모든 운영체제에서 실행할 수 있다.
컴파일 언어보다 실행 속도가 느리다. (JIT 컴파일 기술의 도입으로 실행속도가 크게 개선된 언어도 있다. JavaScript, ActionScript가 대표적.)
단일 응용프로그램으로 사용되기보다는 응용프로그램 내에서 특정 역할을 수행하는 경우가 많다.
ECMAScript
1. Ecma International : 국제적인 : European: 유럽 사람 Computer Manufacturers : 제조업자 Association : 협회
Ecma International은 정보 통신에 대한 표준을 제정하는 비영리 표준화 기구입니다.
Ecma에서 생선한 것은 아니지만 표준의 가장 대표적인 예시는 키보드이다.
우리의 키보드는 거의 대부분 같은 배열을 가지고 있는데 이는 키보드 제조업자들이
키보드 디자인을 QWERTY 레이아웃을 표준으로 따르기 때문입니다.
ECMA 단체가 관리하는 표준
Ex) CD롬 볼륨과 파일 구조, C#언어 규격, JSON 포맷 등 정보 통신 기술에 대한 표준
=> 각각의 표준들은 고유한 이름을 가지는 데 우리는 그 중 ECMA-262 표준을 알아보자!
2. ECMA-262
// 자바스크립트를 개발한 Netscape가 더 향상된 표준화를 위해 기술 규격을 Ecma에 제출했고, 그에 따라 Ecma가 새롭게 제정한 표준이 바로 ECMA-262다.
=> ECMA-262는 Ecma international에 의해 제정된 하나의 기술 규격으로 범용 목적의 스크립트 언어에 대한 명세를 담고 있습니다.
QWERT 키보드 처럼 하나의 표준이지만 키보드 레이아웃이 아니라 스크립트 언어에 대한 표준을 정의한 규칙이다 !!
스크립트 언어(Script : 영화나 방송의 대본, 각본 Language
=> 스크립트 언어란 독립된 시스템에서 작동하도록 특별히 설계된 프로그래밍 언어
스크립트 언어에 포함되는 프로그래밍 언어들은 독립된 시스템을 위해 존재합니다.
예를 들어 이동하기, 달리기, 점프하기라는 명령어를 사용할 수 있지만 사람이나, 개, 게임 캐릭터와 같이 명령을 입력받고 실행할 수 있는 무언가가 없다면 명령어는 아무 쓸모가 없어질 것이다.
1. 응용프로그램과는 독립적이다.
2. 사용자가 직접 프로그램을 의도에 따라 동작시킬 수 있다.
3. 스크립트 언어를 이용한 명령어의 실행이, 시스템 내부에서 어떤 원리로 동작하는 지는 전혀 상관하지 않는다.
4. 사용자가 그 프로그램을 의도에 따라 제어할 수 있다.
3. ECMAScript
=> ECMA International에 의해 제정된 ECMA-262 기술 규격에 의해 정의된 범용 스크립트 언어
// ECMA-262는 표준의 이름이지만 ECMA Script는 ECMA-262에서 정의된 하나의 사양을 의미합니다.
// ECMAScript는 스크립트 언어가 준수해야 하는 규칙, 세부 사항 및 지침을 제공하죠
우리가 일상에서 쓰는 언어의 기준인 국어를 표준어라고 부르고 국립국어원에서 관리하고 있습니다.
그리고 표준어는 국립국어원에서 제정한 여러가지 규칙들(발음이나 맞춤법))등을 일정한 원리로 따르고 있습니다.
국립 국어원 = ECMA International
표준어 = ECMA-262
맞춤법 / 발음 / 규칙 = ECMAScript
4. JavaScript
JavaScript는 ECMAScript 사양을 준수하는 범용 스크립트 언어입니다.
만약 여러분이 ECMAScript 문서를 읽게 된다면, 여러분은 어떻게 스크립트 언어를 만들 수 있는지를 알 수 있습니다.
반면 여러분이 JavaScript 문서를 읽게 된다면, 여러분은 어떻게 스크립트 언어를 쓸 수 있는지를 알 수 있습니다.
일부 사람들이 JavaScript를 ECMAScript의 방언이라고 부르는 이유는경상도, 전라도, 충청도처럼 실제 방언과 같은 문맥으로 사용되기 때문일 겁니다.
방언은 표준어로부터 파생된 언어이지만, 각각의 방언들은 마치 다른 언어처럼 들리기 때문입니다.
5. JavaScript Engine 열에너지, 전기 에너지, 수력 에너지 따위를 기계적인 힘으로 바꾸는 장치
JavaScript Engine은 JavaScript 코드를 이해하고 실행하는 프로그램 또는 인터프리터(: interpreter 원시 언어의 명령을 번역 실행하는 프로그램 )입니다.
JavaScript Engine은 대부분의 웹 브라우저에서 찾아볼 수 있습니다.
위의 예시처럼 이동하고, 뛰고, 점프하는 명령어들을 실제로 이해하고 수행하는 역할을 진행합니다.
마치 사람이 언어를 이해하는 것과 같은 맥락입니다.
JavaScript의 종류
Google Chrome : V8
Mozilla Firefox : SpiderMonkey
Microsoft Edge : Chakra
각각의 JavaScript 엔진들은 다른 엔진들과 비교 할 수 있는 몇 가지 특징을 갖습니다.
1. 수행 능력 ( Performance )
- 실제로 두 사람에게 점프래!라고 명령을 내린다면 명령을 인지하고 이해한 후 처리하는 능력이 신체에 따라 다르고, 운동 신경과 반사 신경이 좋은 사람은 더 높게 점프 할 수 있을 것입니다.
- 두 개의 웹 브라우저는 명령어를 이해할 수 있는 능력은 같지만 속도에서 차이가 날 수 있습니다. => JavaScript 엔진이 얼마나 효율적으로 JavaScript를 처리하고 있는 가에 따라 다르기 때문입니다.
2. 지원되는 ECMAScript가 다르다.
- 같은 언어로 대화하고 있는 두 사람이 있을 때 많은 사람들이 영어를 사용할 줄 앎아도 불구하고, 어떤 사람은 다른 사람이 알지 못하는 문법이나 표현, 단어를 알 수도 있으며 그렇지 않을 수도 있습니다. Web browser (: 인터넷상에서 웹에 연결시켜 주는 윈도 기반의 소프트웨어)의 Engine 또한 JavaScript를 모두 이해할 수 있음에도 불구하고, 몇몇 브라우저들은 다른 브라우저들에 비해 매우 뛰어난 이해력을 갖추고 있습니다. 브라우저마다 언어를 지원하는 능력이 다르기 때문입니다.
- 브라우저가 얼마나 JavaScript를잘 지원하느냐에 따라 사람들은 일반적으로 JavaScript 호환성 보다는 ECMAScript 호환성이라는 단어를 더 많이 사용합니다.
- ECMAScript는 스크립트 언어가 어떻게 생겨야 하는지에 관한 사양입니다. 새로운 버전의 ECMAScript를 발표한다고 해서 모든 JavaScript 엔진이 갑자기 이러한 새로운 기능을 갖게 되는 것이 아닙니다. JavaScript 엔진이 최신 ECMAScript의 사양을 준수하던지 아닌지는 JavaScript 엔진을 담당하는 회사나 조직(Google, Mozilla, Microsoft등)의 업테이트에 따라 달려있습니다.
- 따라서, 개발자들은 Google, Mozilla, Microsoft 등과 같은 JavaScript 엔진을 개발한 회사에게 “이 브라우저는 어떤 버전의 ECMAScript를 지원하나요?” 또는 “이 브라우저는 어떤 ECMAScript 기능을 지원하나요?”와 같은 질문을 하는 경향이 있습니다.
- 물론 새 버전의 ECMAScript가 나오면 JavaScript 엔진을 통째로 업데이트하지는 않고, 새로 추가된 ECMAScript 기능을 점진적으로 업데이트합니다.
6. ES6 === ECMAScript 6 === ES2015 = ECMAScript 2015
// ECMAScript 6는 ECMA-262 표준의 제 6판이며, ECMAScript 사양의 주요 변경 사항 및 개선 사항을 명세합니다.
- 국립국어원에서는 필요에 따라 표준어 규칙을 바꾸거나 새로운 단어를 표준어에 추가하기도 합니다.
ECMA international 또한 필요성에 따라 ECMAScript를 개정합니다. ECMAScript 6는 제 6판을 의미합니다. 각 판의 간략한 정보는 다음의 표와 같습니다.
JavaScript가 먼저 나왔을까 ECMAScript가 먼저 나왔을까?
JavaScript가 1996에 먼저 등장 한 후 ECMAScript가 JavaScript 표준화를 위해 1997에 등장하였습니다.
당시 기준에서 JavaScript는 ECMAScript 사양을 따르고 있었기 때문에 JavaScript는 ECMAScript 사양을 준수하고 있던 언어의 예시였습니다.
ECMAScript는 JavaScript를 기반으로 하는 동시에, JavaScript 역시 ECMAScript를 기반으로 하고 있습니다.
둘의 뗄레야 뗄 수 없는 관계, 그리고 그 두 용어가 혼용되어서 사용되던 이유는 바로 여기에서부터 출발하지 않았을까 생각해봅니다.
이 때문에 ECMA에서 스크립트 표준을 만들게 됐다.
JavaScript는 ECMAScript 사양을 준수하는 범용 스크립팅 언어이며
이 같은 표준 스크립트 언어를 ECMAScript라고 한다.
ECMAScript는 스크립팅 언어를 어떻게 만들어야 하는지를 설명하는 일종의 설명서라고 생각하면 되고,
JavaScript는 ECMAScript를 사양을 바탕으로 만들어진 언어인 것이다.
JavaScript와 ECMAScript는 무슨 차이점이 있을까? - 재그지그의 개발 블로그
웹 개발에서 JavaScript와 ECMAScript라는 용어가 혼용되어 사용되고 있는 이유와 그 차이점에 대해 알아봅니다.
wormwlrm.github.io
'JavaScript' 카테고리의 다른 글
JavaScript (0) | 2022.05.12 |
---|---|
JavaScript (0) | 2022.05.12 |
JavaScript (0) | 2022.05.10 |
JavaScript (0) | 2022.05.07 |
JavaScript (0) | 2022.05.07 |