JavaScript (JS)는 가벼운, 인터프리터 혹은 just-in-time 컴파일 프로그래밍 언어로, 일급 함수를 지원합니다. - mdn web docs
JavaScript는 객체 기반의 스크립트 언어로 위와 같은 특징을 갖는다. 스크립트 언어란 응용 소프트웨어를 제어하는 프로그래밍 언어를 일컫는다. HTML, CSS와 함께 웹을 구성하는 요소 중 하나로 웹 브라우저에서 동작하는 유일한 프로그래밍 언어이다. JavaScript는 브라우저에서 동적으로 웹 페이지를 조작하는 데에도 쓰이지만, Node.js처럼 백엔드에도 사용되며 Electron를 사용하여 데스크톱 어플리케이션을 만들기도 하고, Tensorflow.js를 통해 머신 러닝도 가능하다. 그러면 JavaScript의 특징을 위의 인용구의 뜻풀이와 함께 알아보자.
가벼운, 인터프리터 혹은 just-in-time 컴파일
JavaScript는 인터프리터 언어로 수정과 설계가 용이하다는 점 등 장점을 갖는다. 컴파일러 언어에 비해 비교적 속도가 느리다는 단점은 대부분의 모던 자바스크립트 엔진이 인터프리터와 컴파일러의 장점을 결합하여 해결했다. 인터프리터가 소스코드를 즉시 실행하고 컴파일러가 빠르게 동작하는 머신 코드를 생성하여 최적화하는 방식을 통해서다. 그리고 JavaScript는 가벼운, 원문으로는 lightweight
하다는 특징을 갖는다. lightweight
프로그래밍 언어는 경량 프로그래밍 언어라고도 하며, 짧은 코딩으로 원하는 처리를 실현할 수 있고, 간편하게 다룰 수 있다는 것을 의미한다. JavaScript가 lightweight
언어로 불리는 이유는 메모리 사용량이 적고, 문법이 간단하며, 구현하기 쉽기 때문이다. 메모리 사용량이 적은 이유는 가비지 컬렉션, 블록 스코프, 동적 타이핑 등 효율적인 메모리 관리 환경을 제공하기 때문이다. Node.js와 관련한 한 연구에서는 일부 연산에서 Dart나 Java보다 더 빠른 속도를 보여주었으며, C++가 더 빠른 속도와 더 적은 메모리 사용을 나타냈지만 더 적은 CPU 사용량을 가졌다는 특징을 확인했다.
PHP, Python, Node.js 성능 비교 관련 논문
Performance Comparison and Evaluation of Web Development Technologies in PHP, Python, and Node.js
일급 함수를 지원
함수를 다른 변수와 동일하게 취급하는 것을 일급 함수를 가졌다고 표현한다.
const foo = function() {
console.log("foobar");
}
// 변수를 사용해 호출
foo();
위의 예시에서는 익명함수를 변수에 할당한 다음, 그 변수를 사용하여 끝에 괄호 ()를 추가하여 함수를 호출했다.
function sayHello() {
return function() {
console.log("Hello!");
}
}
또한, 함수의 결과로 함수를 반환하는 것도 가능하다.
변수에 함수 할당 가능, 함수를 반환 가능한 점 외에도 함수를 인자로 전달할 수 있으며, 익명 함수를 지원한다.
이를 통해 함수를 하나의 객체처럼 다룰 수 있으며, JavaScript는 객체 지향 프로그래밍 언어이면서 함수형 프로그래밍 패러다임을 적극적으로 지원한다. 그러므로, JavaScript는 멀티 패러다임 프로그래밍 언어로 불린다.
기존의 웹 브라우저는 정적인 콘텐츠만을 포함하고 있었다. 1995년, 브라우저 시장의 90%를 차지한 넷스케이프 내비게이터를 개발한 기업 넷스케이프 커뮤니케이션스는 웹 페이지에 동적인 기능을 추가하고자 했다. 이를 위해 브라우저에서 동작하는 경량 프로그래밍 언어를 도입하려 했고, 스킴 프로그래밍 언어를 넷스케이프 내비게이터에 탑재하기 위해 브렌던 아이크를 영입한다. 브렌던 아이크는 10일만에 언어를 개발하여 이듬해 3월, 넷스케이프 내비게이터에 "모카(Mocha)"가 탑재되었고, 9월에 공식적으로 "라이브스크립트(LiveScript)"로 명명되었다. 이후 12월에 "자바스크립트(JavaScript)"로 이름이 바뀌었고 넷스케이프 내비게이터 2.0 베타 3에 채용되었다. 당시 대중적인 인기를 누리던 Java의 인기에 편승하기 마케팅적인 선택으로 이러한 이름이 지어지게 되었다.
초창기 JavaScript는 웹페이지의 보조적인 기능을 수행하기 위해 한정적인 용도로 사용되었다. 당시 대부분의 로직은 서버에서 실행되었으며, 브라우저는 HTML과 CSS를 받아 단순히 렌더링하는 작업을 했다. 이후 1999년, JavaScript를 이용해 서버와 브라우저가 비동기적으로 데이터를 교환하는 통신 기능 Ajax(Asynchronous JavaScript And XML)가 등장하며 JavaScript의 입지는 비약적으로 상승했다. 기존에는 화면이 전환될 때마다 완전한 HTML 코드를 서버로부터 전송받아 불필요한 부분을 포함하여 웹페이지 전체를 재렌더링해야 했지만, 서버로부터 필요한 데이터만 전송받아 한정적으로 렌더링하는 것이 가능해졌다.
2009년에는 라이언 달이 구글 V8 자바스크립트 엔진으로 빌드된 런타임 환경 Node.js를 발표하면서, 백엔드 영역으로까지 확장되었다. 브라우저의 자바스크립트 엔진에서만 동작하던 자바스크립트를 브라우저 이외의 환경에서도 사용할 수 있게 만들었고 서버 사이드 애플리케이션 개발에 필요한 모듈, 파일 시스템, 빌트인 API를 제공했다.
앞서 언급했듯이 문법이 비슷하다는 차이점 외에 공통점은 없다. 인도와 인도네시아가 그러하고, 코끼리와 바다코끼리가 그러하듯이.
각자의 차이점에 대해서 설명해보면,
JavaScript | Java |
---|---|
객체 지향 스크립트 언어 | 객체 지향 프로그래밍 언어 |
프로토타입 기반, 프로토타입 매커니즘 통해 상속 | 클래스 기반, 객체는 클래스 계층구조를 통한 상속과 함께 클래스와 인스턴스로 나뉨 |
인터프리터 언어 | 하이브리드 언어 (기본적으로 컴파일러 언어로 분류, 인터프리터 언어의 특징도 가짐) |
변수 자료형이 선언되지 않음(동적 타이핑) | 정적 타이핑 |
mdn web docs) JavaScript
isao의 IT,게임번역소) 프로그래밍 입문자를 위한 언어 선택 -3회 인기있는 경량 프로그래밍 언어 5가지
DEVELOPER PITSTOP) Why is JavaScript called a lightweight programming language?
mdn web docs) 자바스크립트의 메모리 관리
mdn web docs) 일급 함수
모던 자바스크립트 Deep Dive
풍뎅아 공부하자.) 웹을 풍부하게 만들어주는 작고 가벼운 언어 JAVASCRIPT 개요
Java) Java와 JavaScript의 다른 점은 무엇입니까?