Notice
Recent Posts
Recent Comments
Link
기록하는 개발자
0418_ 변수, 호이스팅, node.js 정의 본문
728x90
- var, let, const의 차이, 호이스팅
(1) var : 중복 선언 가능, 함수 외부의 변수는 모두 전역변수
(2) let : 중복 할당 가능, 중복 선언 불가능, 초기화 전 참조하면 참조 에러
(3) const : 중복 선언, 중복 할당 불가능, 변경할 수 없어서 상수(constant)라고 부름, 선언과 초기화가 동시에 진행, 초기화가 동시진행 되므로 호이스팅되어 어디서나 참조가능
* 변수 : 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름
* 할당 : 변수에 값을 저장, 소스코드가 순차적으로 실행되는 런타임에 실행
* 참조 : 변수에 저장된 값을 읽어 오는 것
* 선언 : 변수명을 자바스크립트엔진에 알리는 것, 런타임 이전에 실행
* 선언 단계 : 변수명 등록, 자바스크립트 엔진에 변수의 존재를 알림
* 초기화 단계 : 메모리 공간을 확보 -> 암묵적으로 undefinded를 할당해 초기화
* 호이스팅 : 변수 선언이 런타임에서 되지 않고 그 이전단계에서 실행되므로 자바스크립트 엔진은 소스코드를 한 줄씩 순차적으로 실행하기 앞서, 변수 선언을 포함한 모든 선언문을 찾아내 먼저 실행한다. 즉, 변수 선언이 어디에 있든 상관없이 다른 코드보다 먼저 실행 되는데 이러한 특징을 호이스팅이라 한다. (함수, 클래스도 동일)
함수 선언문의 경우, 런타임 이전에 자바스크립트 엔진에서 먼저 실행되어, 함수 자체를 호이스팅 시킬수 있다. 반면함수 표현식은 변수 호이스팅과 같이 런타임 이전에 해당값을 undefined로 초기화만 시키고, 런타임에서 할당되어 그때 객체가 된다.
* 객체 : 자바스크립트를 이루고 있는 거의 모든 것이 객체이다. 함수, 배열, 정규식등이 모두 객체 - Node.js 정의 - 동작 원리
자바스크립트를 활용한 확장성 있는 네트워크 api 개발에 사용되는 소프트웨어 플랫폼
내장 서버 라이브러리를 가지고 있어, 별도의 소프트웨어 없이 동작하고 통제에서 벗어나 여러가지 기능을 가능하게 한다.
사용이유! 스크립트 언어는 특정한 프로그램 안에서 동작하는 프로그램이기 때문에 웹 브라우저 프로그램 안에서만 동작한다. 즉 웹 브라우저가 없으면 사용할 수 없는 프로그램이다. 웹 브라우저에서 독립시킬 수 있도록 node.js를 사용 -> 이제 javascript 한가지 언어로 전체를 만들 수 있게 된것
* 런타임 : 특정 언어로 만든 프로그램을 실행할 수 있는 환경
* 이벤트 기반 : libuv라는 라이브러리를 사용하는데 노드의 특성인 이벤트 기반, 논 블로킹 I/O 모델을 구현하고 있다. 이벤트 기반이란 이벤트가 발생할 때 미리 저장해둔 작업을 수행하는 방식을 의미한다.
* 이벤트 루프 : 여러 이벤트가 동시에 발생했을 때 어떤 순서로 콜백함수를 호출 할 지 이벤트 루프가 판단한다. 노드는 이벤트가 종료될 때까지 이벤트 처리를 위한 작업을 반복하므로 루프라고 한다.
* 논 블로킹 I/O : 이전 작업이 완료될 때까지 대기하지 않고 동시에 작업을 수행 -> 일단 어느 곳에 쌓아 놓고 동시에 요청을 처리(비동기)하고 요청이 완료되는 순서대로(스택 이용) 처리 한다.

* 순서 : 이벤트 발생 -> 콜백 함수를 이벤트 큐에 넣음 -> 콜 스택이 비어있으면 이벤트 루프 실행 -> 스택에 넣음
* 콜 스택 사용이유 : 스택 초과 시, 무한루프 발생 스택오버플로우 방지 -> 비동기 -> 이벤트 루프 콜백 큐
* 콜 스택이 비어있어야 하는 이유?
콜 스택에서 처리하고 있는 와중 스택에 푸쉬를 한다면 예상했던 시간에 끝나고 값을 제대로 도출할 수 있을까?
자바스크립트가 동기화 문제를 안는 것을 피하고 단일 스레드 언어라는 것을 보장해주기 위함
* 결론 : 단일 스레드에 동기식 언어지만 웹 브라우저나 런타임의 도움을 받아 비동기 작업들을 처리할 수 있다.
'취업스터디' 카테고리의 다른 글
| 0420_ Stack, Queue (0) | 2022.04.20 |
|---|---|
| 0420_ JWT, OAuth (0) | 2022.04.20 |
| 0419_ URL&URI, NPM (0) | 2022.04.19 |
| 0419_ OOP ; 객체지향 프로그래밍 (0) | 2022.04.19 |
| 0418_ 브라우저 작동원리 (0) | 2022.04.18 |
Comments