자바스크립트란 무엇일까?
자바스크립트를 정의하자면 하이레벨, 객체지향, 멀티 패러다임 프로그래밍 언어
이다.
하기만 여기서 더 깊게 정의를 해 보자면
자바스크립트는 하이레벨, 프로토타입 기반의 객체지향, 멀티 패러다임, Interpreted 또는 Just-In-Time(JIT) Compiled, 동적인, 싱글 쓰레드의, Garbage-collected, first-class functions 와 Non-blocking Event loop을 포함한 언어라고 정의할 수 있다.
위 문장에 포함 된 단어들은 모두 자바스크립트의 성격을 나타내지만, 이렇게 봐서는 잘 이해가 가지 않는다.
그럼 단어 하나 하나를 파해쳐 보자
하이레벨
자바스크립트는 C나 C++과 같이 메모리등의 리소스를 개발자가 직접 관리해야 하는 Low-level 언어가 아닌 파이썬과 같은 High-Level 언어이다.
개발자가 리소스 관리를 안해도 된다는 편리함이 있지만 C와 같은 실행속도와 최적화를 기대하긴 힘들다.
Garage-collected
가비지 콜렉터가 사용하지 않는 메모리를 회수한다.
프로토타입 기반의 객체지향
primitive value를 제외한 거의 모든 것이 자바스크립트에서는 object이다.
Prototype은 Object의 설계도이다.
한 배열을 생성하고 이 배열에서 push 같은 메소드를 사용할 수 있는 이유는 Prototype inheritance 덕분이다.
멀티 패러다임
프로그래밍에서 패러다임이란 어떻게 코드를 작성할지에 대한 접근 또는 방식이다.
많은 언어들은 이 패러다임 중 1개만 할 수 있지만 자바스크립트는 3개의 패러다임으로 코드를 작성 할 수 있다.
Interpreted or JIT compiled
자바스크립코드는 자바스크립트 엔진에 의해 Interpreted 된다.
동적인 타입
자바스크립트에서는 data-type 정의를 하지 않는다. data-type은 runtime때 정해진다.
또 값을 변수에 할당함에 따라 data-type이 동적으로 바뀐다.
싱글 쓰레드
자바스크립트는 싱글 쓰레드여서 한번에 한 작업을 처리한다.
First-class functions
first-class function이란 함수를 일반 변수처럼 취급한다.
이에 따라 우리는 함수를 파라미터로 넘길 수도 있고 다른 함수에서 return 받을 수 있다.
이에 따라 개발하는 함수형 프로그래밍을 할 수 있다.
Non Blocking event loop
자바스크립트는 싱글 쓰레드이다.
만약 data를 fetching하는 긴 작업이 있으면 다른 작업을 진행 못하고 우리는 그것을 원하지 않을 것 이다.
그렇다면 어떻게 해야할까?
event loop가 쓰레드를 blocking 하지 않면서 오랜시간이 걸리는 작업들을 백그라운드에서 실행한다. 그리고 작업들이 완료되면 메인 쓰레드로 다시 돌려 놓는다.
더 깊은 내용은 포스트를 나누어서 작성하겠다.