함수 안에 있는 모든 선언들을 모두 끌어 올려서 해당 유효 범위(스코프)의 최상단에 선언하는 것을 의미한다.
선언 단계부터 초기화 시작 전까지의 구간을 TDZ(Temporal Dead Zone)이라고 한다.
(한국말로 일시적인 사각지대라는 의미)
- let. const변수 선언과 함수 표현식에서는 호이스팅이 발생하지 않음
- var, function, import의 선언은 TDZ의 영향을 받지 않음
- 변수가 먼저 선언이 된 경우, 초기화에 따라서 TDZ가 생깁니다. 특히 let,const와 var는 초기화 시점이 다릅니다. var는 암묵적으로 undefined로 초기화 된 상태에서 자바스크립트 코드를 읽기 때문에, TDZ에서 에러가 나지 않습니다.
번들링이란 여러 자원들을 하나로 묶는다는 뜻입니다.
웹팩은 번들러의 대표 주자중 하나입니다.
클래스형 컴포넌트와 함수형 컴포넌트의 역할은 동일하다. 그러나
class 컴포넌트
- state 기능 및 라이프 사이클 기능을 사용할 수 있다.
- 임의 메서드를 정의할 수 있다.
- render 함수가 꼭 있어야 하고, 그 안에서 보여 주어야 할 JSX를 반환해야 한다.
함수형 컴포넌트
- 클래스형 컴포넌트보다 선언하기가 좀 더 편하고, 메모리 자원을 덜 사용한다는 장점이 있다.
- 과거에는 함수형 컴포넌트에서 state와 라이프사이클 API를 사용할 수 없다는 단점이 있었는데, 이러한 단점은 앞서 언급한 것처럼 리액트 훅이 도입되면서 해결되었다.
Hook 이란 ?
- Hook은 React 16.8에 새로 추가된 기능입니다. Hook은 class를 작성하지 않고도 state와 다른 React의 기능들을 사용할 수 있게 해줍니다.
- Hook은 함수 컴포넌트에서 React state와 생명주기 기능(lifecycle features)을 “연동(hook into)“할 수 있게 해주는 함수입니다. Hook은 class 안에서는 동작하지 않습니다. 대신 class 없이 React를 사용할 수 있게 해주는 것입니다.
Hooks의 사용규칙
1. 최상위에서만 Hook을 호출
React 함수(컴포넌트)의 최상위에서만 Hook을 호출 할 것.
반복문, 조건문, 중첩된 함수등에서 호출 X
2. React 함수에서만 Hook을 호출
Custom Hook에서는 호출 가능
일반적인 Javascript 함수에서는 호출 X
3. Hook을 만들때 앞에 use 붙히기
그래야만 한눈에 보아도 Hook 규칙이 적용되는지를 파악할 수 있기 때문 (공홈)
4. React는 Hook 호출되는 순서에 의존
한 컴포넌트에서 여러개의 hook이 사용되는 경우
hook은 위에서부터 아래로 순서에 맞게 동작한다.
node.js는 자바스크립트에서 분리된 언어로 문법이 같다. 즉, node.js를 사용해 자바스크립트가 웹브라우저에서만 동작하는 한계를 극복해 프로그램을 만들 수 있게 되었다. 특히, node.js를 사용해 서버를 만들 수 있게 됨으로써 자바스크립트라는 하나의 언어를 사용해 웹페이지를 만들 수 있게 되었다.
node.js는 v8이라는 자바스크립트 엔진과 비동기 작업을 처리하는 libuv라는 라이브러리로 이루어져있습니다.
- 먼저 v8에는 memory heap과 하나의 call stack이 있다. (여기서 하나의 call stack이 있다는 것과 싱글 스레드는 같은 의미로 이해할 수 있다) memory heap은 메모리 할당이 일어나는 곳이고, call stack은 코드 실행에 따라 호출 스택이 쌓인다. call stack은 차례대로 실행되기 때문에 비동기 처리를 할 수 없다.
- 따라서, 비동기 작업을 가능하게 하는 것은 바로 libuv라는 라이브러리에서 non-blocking IO라는 기능을 가능하게 하는 이벤트 루프를 제공하기 때문이다. libuv는 c언어로 생성되었고, 시스템 커넬을 이용하는데, 커넬은 멀티 스레드를 이용한다. 따라서, node.js는 libuv가 멀티 스레드로 동작하기 때문에 비동기 처리를 할 수 있다. 아래 이미지의 internal C++ Thread Pool이 멀티 스레드이다.
콜 스택에 현재 실행 중인 실행 컨텍스트가 있는지, 태스크 큐에 대기 중인 함수가 있는지 반복해서 확인
콜 스택이 비어있고, 태스크 큐에 대기 중인 함수가 있다면 순차적(FIFO, First In First Out)으로
태스크 큐에 대기 중인 함수를 콜 스택으로 이동시킨다.
-> 이러한 반복을 tick이라고 함
가비지 컬렉션이란?
- 가비지 컬렉션은 프로그램에서 더 이상 사용하지 않는 메모리를 자동으로 정리하는 것이다.
- 비워줘야 할 메모리 공간을 남겨두지 않고 메모리를 꽉채우게 되면, 메모리 누수(memory leak)가 발생한다.
- 메모리 누수로 속도저하, 예기치 못한 종료, 느린 응답속도 등과 같이 많은 문제가 발생할 수 있다.
- 메모리 누수가 발생하지 않게 프로그래머는 이를 방지하고 버그가 있으면 잡아야한다.
- 가비지 컬렉터는 프로그래밍 언어에서 프로그래머가 해야할 위와 같은 일을 대신해준다.
- 가비지 컬렉션 기능을 가진 언어(혹은 엔진)는 자바, C#, 자바스크립트 등이 있다.