인터프리터 언어, 자바스크립트, 컴파일러 언어

강연주·2024년 10월 20일

📚 TIL

목록 보기
73/186

🤍 자바스크립트의 특징

자바스크립트는 HTML, CSS와 함께 웹을 구성하는 요소 중 하나로
웹 브라우저에서 동작하는 유일한 프로그래밍 언어다. 다른 프로그래밍 언어와 마찬가지로 자바스크립트는 기존의 프로그래밍 언어에서 많은
영향을 받았다. 기본 문법은 C, 자바와 유사하고, 셀프(Self)에서는 프로토타입 기반 상속을, 스킴(Scheme)에서는 일급 함수의 개념을 차용했다.

자바스크립트는 개발자가 별도의 컴파일 작업을 수행하지 않는
인터프리터 언어(interpreter language)다. * 인터프리터 언어란? (더 보기)

대부분의 모던 자바스크립트 엔진 (크롬의 V8, 파이어폭스의 SpiderMonkey, 사파리의 JavaScriptCore, 마이크로소프트 엣지의 Chakra 등)은
인터프리터와 컴파일러의 장점을 결합하여,
비교적 처리 속도가 느린 인터프리터의 단점을 해결했다.

인터프리터는 소스코드를 즉시 실행하고, 컴파일러는 빠르게 동작하는 머신 코드를 생성하고 최적화한다. 이를 통해 컴파일 단계에서 추가적인 시간이 필요함에도 더욱 빠르게 코드를 실행할 수 있다.

  • 인터프리터 언어 vs 컴파일러 언어

컴파일러 언어인터프리터 언어
코드 실행 전 단계인 컴파일 타임에 소스코드 전체를 한 번에 머신 코드로 변환 후 실행실행 단계인 런타임에, 코드를 문 단위로
한 줄씩 바이트코드(중간코드)로 변환 후 실행
실행 파일을 생성한다.실행 파일을 생성하지 않는다.
컴파일 단계와 실행 단계 분리.
명시적인 컴파일 단계를 거치고,
명시적으로 실행 파일을 실행한다.
인터프리트 단계와 실행 단계가 분리되어 있지 않다. 인터프리터는 한 줄씩 바이트코드로 변환하고즉시 실행한다.
실행에 앞서 컴파일은 단 한 번 수행코드가 실행될 때마다 인터프리트 과정 반복 수행
컴파일과 실행 단계가 분리되어 있어
코드 실행 속도가 빠르다.
인터프리트 단계와 실행 단계가 분리돼 있지 않고
반복 수행돼 실행 속도가 비교적 느리다.

* 머신코드(기계어)란? : CPU가 바로 실행할 수 있는 기계어 (더 보기)
* 바이트코드란? (더 보기)

하지만 대부분의 모던 브라우저에서 사용되는 인터프리터는 전통적인 컴파일러 언어처럼 명시적인 컴파일 단계를 거치지는 않지만,
복잡한 과정을 거치며 일부 소스코드를 컴파일하고 실행한다.

이를 통해 인터프리터 언어의 정점인 동적 기능 지원을 살리면서 실행 속도가 느리다는 단점을 극복한다. 따라서 현재는 컴파일러와 인터프리터의 기술적 구분이 점점 모호해져 가는 추세다. 하지만 자바스크립트는 런타임에 컴파일되며 실행 파일이 생성되지 않고 인터프리터의 도움 없이 실행할 수 없기 때문에 컴파일러 언어라고 할 수는 없다.

* 컴파일러란? (더 보기)

자바스크립트는 명령형(imperative), 함수형(functional),
프로토타입 기반(prototype-based) 객체지향 프로그래밍을 지원하는
멀티 패러다임 프로그래밍 언어다.

비록 다른 객체지향 언어와의 차이점에 대한 논쟁이 있긴 하지만, 자바스크립트는 강력한 객체지향 프로그래밍 능력을 지니고 있다.
간혹 클래스(ES6에서 도입됨), 상속, 정보 은닉을 위한 키워드가 없어서 객체지향 언어가 아니라고 오해하는 경우도 있지만,
자바스크립트는 클래스 기반 객체지향 언어보다 효율적이면서 강력한 프로토타입 기반의 객체지향 언어다.

( 출처 : 모던 자바스크립트 Deep Dive, 이웅모, 위키북스 )

profile
아무튼, 개발자

0개의 댓글