1. High level
하드웨어 리소스를 자동으로 관리해줍니다.
2. Garbage-collected
JavaScript엔진 내에 Garbage-collected 알고리즘이 있으며, 컴퓨터 메모리에 있는 오래되고 안쓰는 객체들을 불필요한 메모리 낭비를 막기 위해 자동으로 제거합니다.
3. Interpreted or just-in-time compiled
0, 1로 나타내는 기계어로 번역해주기 위해 compiling, interpreting 과정을 거칩니다.
4. Multi-paradigm
Paradigm : 프로그래밍에서 패러다임은 코드 구조화에 대한 전반적인 사고 방식 입니다.
Paradigm 에는 3가지
1) Procedural programming
2) Object-oriented programming(OOP)
3) Function programming(FP)
많은 언어들이 오직 한가지만 지원하지만, 자바스크립트는 모든 것을 지원합니다. 따라서, 정말 유연하고 다재다능합니다. 자바스크립트의 객체 지향 특성(object-oriented)은 프로토 타입(prototype-based) 기반의 객체 지향(object-oriented) 접근 방식입니다. 이 뜻은, 자바스크립트는 primitive value를 제외하고는 거의 모든 것이 객체입니다.
우리가 배열에서 push 같은 메서드를 사용할 수 있는 것도 프로토 타입 상속(prototypal inheritance) 때문입니다.
5. First-class functions
함수(function)가 일반 변수처럼 취급됩니다. 이 특징으로 인해 함수를 다른 함수로 전달할 수 있으며, 함수에서 함수를 return 할 수도 있습니다. 이것은 매우 강력한 특징인데, 이것은 많은 기술을 사용할 수 있게 해주고, 함수 프로그래밍을 사용할 수 있도록 허락해줍니다.
6. Dynamic Language
자바스크립트는 데이터 유형을 변수에 할당하지 않고, 대신 JavaScript 엔진이 코드를 실행할 때 알려집니다.
7. Single-threaded
Concurrency model: JavaScript 엔진은 다양한 task를 같은 시간내에 처리합니다. 이것이 필요한 이유는 자바스크립트는 하나의 Single-threaded이기 때문입니다. 그래서, 이것은 오직 한가지 일만 할 수 있습니다. 따라서 따라서 동시에 발생하는 여러 일을 처리하는 방법이 필요합니다.
반면에 컴퓨터에서 thread는 컴퓨터 CPU에서 실행되는 명령어와 같습니다. 그러나 다른 서버에서 데이터를 가져오는 fetch 행위와 같이 오래 실행되는 작업이 있다면, single thread로 인해 막히는 것처럼 들리고 사용자들은
막히지 않는(non blocking) 행위를 하기를 원합니다.
8. Non-blocking event loop
이로 인해 긴 실행시간이 필요한 task들은 background에서 실행해주고, task가 끝났을 때 main thread로 가져옵니다.
'Language > JavaScript' 카테고리의 다른 글
[JavaScript] Execution context and the call stack (0) | 2021.01.11 |
---|---|
[JavaScript] JavaScript Engine - 자바스크립트 엔진의 이해 (0) | 2021.01.10 |
[JavaScript] 속성 접근자 - 점 표기법(Dot notation) vs 괄호 표기법(Bracket notation) (0) | 2021.01.06 |
[JavaScript] expression 과 statement의 차이 (0) | 2021.01.05 |
[JavaScript] 화살표 함수(arrow fuction) (0) | 2021.01.05 |
댓글