2020. 6. 3. 17:30ㆍJavascript/문법
1. 자바스크립트
자바스크립트는 웹 페이지에 생동감을 불어넣기 위해 만들어진 가벼운 인터프리터 또는 1JIT 컴파일 프로그래밍 언어이며, 웹에 쓰이는 하나 뿐인 프로그램이다.
자바스크립트는 표준 웹 기술이라는 레이어 층에서 세 번째 층이라고 볼 수 있다(첫 번째 층은 HTML, 두 번째 층은 CSS)이다.
여기서 HTML은 제공할 웹 컨텐츠의 구조와 의미를 문단, 제목, 표 등으로 정의하고 부여하는 마크업 언어이다. 또한 CSS는 배경색이나 폰트 등의 레이아웃을 지정하여 HTML 컨텐츠를 꾸며주는 스타일 규칙언어이다. 따라서 HTML, CSS는 프로그래밍 언어가 아니다.
자바스크립트로 만든 프로그램을 스크립트라고 한다. 스크립트는 HTML 안에서 작성할 수 있고, 웹 페이지를 불러올 때 브라우저에 의하여 스크립트가 자동으로 실행된다. 따라서 스크립트를 실행시키는 주체는 브라우저라고 보면 된다. 브라우저에는 자바스크립트 엔진이라는 것이 내장되어 있는데, 이 엔진은 동작하는 방식이 너무나도 복잡해서 내가 거기까지 설명을 할 실력은 안된다.
하지만, 참고자료에 의하면 엔진은 대략 세 가지 원리로 동작한다고 써있다.
1. 엔진이 스크립트를 읽는다(파싱).
2. 읽어 들인 스크립트를 기계어로 전환한다(컴파일).
3. 기계어로 전환된 코드가 실행된다.
뭐, 따라서 모든 브라우저에 자바스크립트 엔진이 내장되어 있기 때문에 자바스크립트는 따로 컴파일 과정을 거치지 않기 때문에 문자 형태로 작성할 수 있고 실행도 할 수 있다.
2. ECMA-262
ECMA-262는 자바 스크립트의 체계 메뉴얼, 안내책자와 같은 공식문서이다. 이 공식문서는 자바스크립트와 관련하여 가장 심도있고, 상세한 정보를 담고 있고, 이 공식문서에서 자바스크립트를 정의한다고 보면 된다.
ECMA-262 문서는 매년 새로운 버전이 업데이트 된다. 공식 문서 초안은 이 링크에서 확인하면 된다(나도 아직 자세히 읽어보진 않았다).
3. 특징
자바스크립트는 안정적인 언어다. 왜냐하면 하드웨어 접근이 필요없는 브라우저만을 위한 언어이기 때문이다. 이런 이유로 자바스크립트는 메모리나 CPU같은 영역을 건드리지 않는다. 따라서, 자바스크립트는 브라우저에 종속되어 있기 때문에 구현 범위가 브라우저내로 한정되어있다.
그래서 브라우저에서 자바스크립트는 다음과 같은 일을 할 수 있다.
-
페이지에 HTML을 추가하거나 수정할 수 있다.
-
마우스 클릭이나 움직임과 같은 이벤트를 생성할 수 있다.
-
네트워크를 이용하여 원격 서버에 요청을 보내거나, 파일을 다운로드하거나 업로드할 수 있다.
-
쿠키를 가져오거나, 클라이언트에 데이터를 저장할 수 있다.
하지만, 다음과 같은 기능은 할 수 없다.
-
웹 페이지 내 스크립트는 디스크 내부에 저장된 파일을 읽고, 쓰고, 수정할 수 없다. 모던 브라우저를 사용하면 사용자가 파일을 창에 드래그하거나, input태그를 선택해서 업로드 할 수 있으나 접근은 제한된다.
-
카메라, 마이크같은 기기와 상호작용을 하려면 사용자의 허가가 필요하다. 또한 웹 카마라를 이용하여 수집한 정보를 국가기관이라 할 지라도 몰래 보낼 수 없다.
-
동일 출처 정책에 의하여 브라우저 내 탭과 창은 서로의 정보를 알 수 없고, 독립적으로 작용한다. 이 정책을 피하기 위해서는 두 페이지가 데이터 교환에 동의하고, 동의와 관련된 특수한 자바스크립트 코드를 포함하고 있어야 한다.
-
자바스크립트를 이용하여 서버와 쉽게 정보를 주고받을 수는 있지만, 타 사이트에서 데이터를 받아오는 것은 불가능하다.
4. 요약
따라서 글 내용을 요약하면 다음과 같다.
-
자바스크립트는 웹에 쓰이는 유일한 프로그램이다.
-
자바스크립트는 브라우저 범위에 포함되며, 하드웨어 범위에는 일절 포함되지 않는다.
-
자바스크립트는 디스크 내부의 저장된 파일을 읽고, 쓰고, 수정할 수 없으나 업로드는 가능하다.
-
자바스크립트의 데이터를 교환하려면 사용자의 동의를 필요로 하며, 데이터를 일방적으로 받아오는 것은 불가능하다.
5. 참고자료
2. 자바스크립트 MDN
3. 노마드 코더 - 바닐라 자바스크립트로 크롬 앱 만들기
- JIT 컴파일: 전통적으로 컴퓨터프로그램을 만드는 방법은 두 가지가 있는데, 첫째는 인터프리터 방식이고 둘째는 정적 컴파일 방식이다. 인터프리터 방식은 실행 중 프로그래밍 언어를 읽어가면서 해당 기능에 대응하는 기계어코드를 실행하며, 반면 정적 컴파일은 실행되기 전에 코드를 기계어로 번역한다. JIT 컴파일러는 두 가지의 방식을 혼합한 방식으로 생각할 수 있는데, 실행 시점에서 인터프리트 방식으로 기계어 코드를 생성하면서 그 코드를 캐싱하여, 같은 함수가 여러 번 불릴 때 매번 기계어 코드를 생성하는 것을 방지한다, 위키백과 [본문으로]
'Javascript > 문법' 카테고리의 다른 글
[JS] 비동기 처리의 시작 콜백, 그리고 콜백 지옥 (0) | 2021.04.11 |
---|---|
[JS] 자료의 형 변환 (0) | 2020.06.13 |
[JS] 자바스크립트의 자료형 (0) | 2020.06.10 |
[JS] 변수와 상수 (0) | 2020.06.08 |
[JS] Hello World 출력 (0) | 2020.06.07 |