╱╱╭╮╱╱╱╱╱╱╭━━━╮╱╱╱╭╮╱╭╮╱╱╱╱╱╱ ╱╱┃┃╱╱╱╱╱╱┃╭━╮┃╱╱╱┃┃╱┃┃╱╱╱╱╱╱ ╱╱┃┣━━┳━━╮┃┃╱┃┣━╮╱┃╰━╯┣━━┳━╮╱ ╭╮┃┃╭╮┃┃━┫┃╰━╯┃╭╮╮┃╭━╮┃╭╮┃╭╮╮ ┃╰╯┃╭╮┃┃━┫┃╭━╮┃┃┃┃┃┃╱┃┃╭╮┃┃┃┃ ╰━━┻╯╰┻━━╯╰╯╱╰┻╯╰╯╰╯╱╰┻╯╰┻╯╰╯

Javascript/Javascript 기초

[Javascript] 자바스크립트 특징

재안안 2024. 3. 17. 23:12

 

1. 자바 스크립트는 인터프리터에 의해 해석되는 스크립트 언어입니다.

2. 싱글 스레드 기반의 언어지만 비동기 처리를 지원합니다.

3. 자바 스크립트는 함수형 패러다임을 기반으로 하면서 객체지향의 문법을 쓰는 독특한 언어입니다. 이를 통해 자바 스크립트는 멀티 패러다임을 지원합니다.

 

자바 스크립트는 인터프리터를 사용하는 프로그래밍 언어이지만, 대부분의 브라우저에는 just-in-time 컴파일러가 내장되어 있어 실행 속도가 매우 빠릅니다. 하지만 just-in-time 컴파일이란, 스크립트의 실행과 동시에 소스 코드를 이진 형태로 변환하는 기술입니다. 하지만 컴파일이 미리 처리되는 것이 아니라 런타임에 처리되기 때문에 자바 스크립트는 여전히 인터프리터 언어로 분류됩니다.

 

자바 스크립트는 싱글 스레드를 기반으로 실행됩니다. 자바 스크립트의 엔진은 Memory Heap, Call Stack으로 이루어져 있습니다. 메모리 힙은 변수와 객체에 대한 모든 메모리 할당이 발생되는 곳입니다. 스택은 함수의 호출을 쌓아 놓은 FIFO queue입니다. 함수가 호출되면, 해당 함수의 프레임이 스택에 push 됩니다. 엔진은 스택을 확인해 함수를 실행하는데 함수 실행 해당 프레임은 스택에서 pop됩니다. 자바스크립트의 코드는 이러한 방식으로 실행되는데 자바 스크립트의 실행환경엔 엔진만 있는 것이 아닙니다. 실행 환경엔 Event Loop Callback Queue(Message Queue) 추가되는데 이를 통해 비동기 처리를 있게 됩니다. Http 요청과 같은 비동기 함수의 실행이 완료되면, 해당 함수의 콜백 함수는 Callback Queue 쌓이게 됩니다. 이때 Event Loop Call Stack 비는 시점에 Callback Queue 원소를 Call Stack으로 옮깁니다. 시점에 비동기 함수의 콜백함수가 실행됩니다. 자바 스크립트는 이런 방식으로 싱글 스레드에서 비동기 처리를 지원합니다.

 

자바 스크립트는 완전한 함수형 언어가 아니며 완전한 객체지향 언어도 아닙니다. 어느 개념이든 적용할 있는데 이는 자바 스크립트가 함수형 프로그래밍 기반하지만 문법적으로는 객체지향 언어에 가깝기 때문입니다. 객체지향 언어의 핵심인 클래스는 자바스크립트에서 사실 함수로 구현되어 있습니다. 클래스의 선언은 함수의 선언과 같고 함수형 프로그래밍의 특성인 클로저 (Closure) 통해 클래스의 캡슐화와 같은 기능을 제공합니다. 추가적으로 자바스크립트는 클래스가 없음에도 상속을 구현하였는데 이는 프로토타입 기반 상속을 이용한 것입니다. 자바스크립트는 이러한 방법으로 객체지향 언어의 특징들을 지원할 있습니다. 실제로 객체지향 언어인 자바와 함수형 언어인 자바 스크립트는 문법적으로 차이가 거의 없습니다. 또한, 함수형 언어에 기반하기 때문에 함수형 프로그래밍 기법을 사용하기에 문제가 없습니다.