JS 기초 질문 리스트
해당하는 질문들을 대답할 수 있도록, 본인이 공부한 흐름에 맞게 정리하여 올려주세요.
자바스크립트의 싱글스레드인가요?
javascript의 데이터 타입의 종류에 대해서 설명해주세요.
원시형 데이터와 참조형 데이터의 차이를 '불변성'을 중심으로 설명해주세요.
javascript의 함수의 종류에 대해서 설명해주세요.
undefined와 null의 차이는 무엇인가요?
값, 식 , 문의 차이를 말해주세요.
ES 란 무엇인가요?
ES6 에서 추가된 스펙은 무엇이 있나요?
ES6 이상 버전을 브라우저에서 인식하지 못하면 어떻게 처리할 수 있나요?
인수 JS 기초
1. 자바스크립트와 웹브라우저
크롬 브라우저는 V8 엔진이 탑제된 자바스크립트 런타임이다.
[자바스크립트]
- 자바스크립트는 ‘프로그래밍 언어’ 이다.
[자바스크립트 런타임]
- 런타임은 ‘프로그래밍 언어가 구동되는 환경’을 말한다.
- 자바스크립트 런타임은, 자바스크립트가 구동되는 환경이다.
- 자바스크립트 런타임의 종류는 ‘웹 브라우저(크롬, 파이어폭스,...)’와 ‘Node.js’ 가 존재한다.
[V8 엔진]
- V8은 오픈 소스 자바스크립트 엔진 중 하나이다.
- 자바스크립트 및 *웹 어셈블리 엔진이다.
- 크롬 웹 브라우저 및 Node.js 에서 사용하고 있다.
- V8은 자바스크립트를 바이트 코드로 컴파일하고 실행하는 방식을 사용한다.
[*웹 어셈블리란]
웹어셈블리(WebAssembly)란 C나 C++와 같은 프로그래밍 언어를 컴파일해서 어느 브라우저에서나 빠르게 실행되는 형식으로 바꿔주는 기술을 뜻한다.
보통 웹 애플리케이션 개발시에는 JavaScript 프로그래밍 언어를 사용해 동적인 부분을 개발하는데 C나 C++ 언어들에 비해서는 느리다.
게임이나 동영상 편집 등과 같은 고성능 웹 애플리케이션을 개발할 때 브라우저의 동작을 빠르게 하기 위해서 C나 C++와 같은 언어로 개발 할 수 있게 하는 것이다.
고성능 웹 애플리케이션 개발 시 자바스크립트와 같이 사용되고, 자바스크립트를 대체하는 것이 아니라 보완하는 기술이다.
[V8 엔진과 웹 브라우저]
- V8 엔진 자체에는 하나의 힙(heap)과 하나의 콜스택(callStack)만이 존재한다.
- setTimeout, DOM, AJAX와 같은 비동기 메소드는 웹 브라우저를 통해 처리한다.
- 웹 브라우저의 Web APIs 는 ‘이벤트루프와 콜백 큐’를 가지고 있다.
2. 자바스크립트는 싱글 스레드 인가?
자바스크립트는 싱글스레드 이다.
[2.1 스레드]
- 스레드의 사전적 의미는 한 가닥의 실이라는 뜻이다. 한 가지 작업을 실행하기 위해 순차적으로 실행한 코드를 실처럼 이어 놓았다고 해서 유래된 이름이다.
- 각 스레드는 한 번에 하나의 작업만 수행할 수 있다
- 각 작업은 순차적으로 실행된다.
Task A —> Task B —> Task C
- 멀티 스레드를 지원하는 프로그래밍 언어는 여러 *코어를 사용하여 여러 작업을 동시에 완료할 수도 있다.
Thread 1 : Task A —> Task B
Thread 2 : Task C —> Task D
- 동시에 돌릴 수 있는 스레드 수는 컴퓨터에 있는 *코어 갯수로 제한된다.
[2.2 싱글 스레드]
- 싱글 스레드란 하나의 프로그램에서 동시에 하나의 코드만 실행할 수 있다는 뜻이다.
- 싱글 스레드란 코드가 실행되서 끝난 지점과 다음 코드의 시작 지점이 연결된 형태이다.
- 동기적 실행
- 싱글 스레드는 하나의 *힙 영역과 하나의 콜 스택을 가진다.
- 따라서 자바스크립트는 하나의 콜스택(call Stack)을 가지고, 한 번에 한 가지 일만을 수행할 수 있다.
- 코어가 여러개 있어도, 메인 쓰레드라는 단일 스레드에서만 작업을 수행할 수 있다.
[2.3 힙(Heap)과 콜스택(callStack) ]
- 힙은 변수와 객체의 메모리 할당에 사용되는 비정형 메모리이다.
- 콜스택은 함수가 실행되는 순서를 기억하고, 이에 따라 코드를 읽는다.
- 함수가 실행되면, 콜 스택의 가장 위에 해당 함수를 넣고, 함수를 읽어 리턴이 발생하면, 스택에서 해당 함수를 꺼낸다.