44일차 (CS 13,14)
Javascript의 호이스팅이란
호이스팅(hoisting)이란 인터프리터가 변수와 함수의 메모리 공간을 선언 전에 미리 할당하는 것을 의미한다. 이는 변수와 함수의 선언부가 각자의 현재 스코프 영역 최상단으로 옮겨지는 것처럼 보이는 현상을 의미한다.
JavaScript는 코드를 실행하기 전에 Lexical Environment 내에 있는 메모리에 함수, 변수 선언을 추가한다. Lexical Environment는 코드가 실행되는 동안 변수와 함수가 살고 있는 공간이라고 보면 좋을 것 같다.
호이스팅은 함수 선언식에서만 발생하고, 함수 표현식에서는 발생하지 않는다. 함수 표현식은 변수에 할당하는 형태로 되어있기 때문에 함수가 아니라 변수로 취급되기 때문이다.
var, let, const에 따라 호이스팅의 결과도 달라지는데, var은 호이스팅 시에 undefined로 초기화까지 되는 반면, let, const는 uninitialized로 남아있게 된다.
이러한 호이스팅은 몇 가지의 장점을 가지고 있다. 첫 번째는 호이스팅 덕분에 변수나 함수를 사용하기 전에 선언하지 않아도 되기 때문에 코드의 유연성이 높아진다. 두 번째는 초기화와 관련된 코드를 한 곳에 모아 구조화하는데 도움을 줄 수 있고, 변수 선언과 초기화를 분리한다면 코드의 구조를 더 명확하게 파악할 수 있다는 장점이 있다. 마지막으로 함수 선언문이 호이스팅 되기 때문에, 코드의 어느 위치에서든 해당 함수를 사용할 수 있기 때문에 함수의 사용범위와 가독성을 향상할 수 있다는 장점이 있다.
동기와 비동기의 차이와 비동기프로그래밍의 필요성
동기와 비동기의 차이는 카페의 주문 메커니즘을 예시로 들을 수 있다. 동기적 프로그래밍은 한 작업이 완료될 때까지 기다렸다가 다음 작업을 수행하는 메커니즘으로, 카페에서 줄을 서고 앞 사람의 주문과 음료가 나오는 모든 과정을 뒷사람이 기다렸다가 주문하는 형식을 말한다. 비동기적 프로그래밍은 특정 작업의 완료를 기다리지 않고 다음 작업을 진행하는 메커니즘으로 카페에서 주문 이후, 먼저 주문한 사람들 중 먼저 나온 사람이 먼저 음료를 받는 형식을 말한다.
동기적 프로그래밍은 설계가 매우 간단하고 직관적이라는 장점이 있지만, 대기 시간이 길어질 수 있다는 단점이 있다. 이와 반대로 비동기 프로그래밍은 대기 시간 동안 다른 작업을 수행할 수 있기 때문에 시스템의 효율성이 향상된다. 또한 사용자는 데이터를 서버에 요청할 때 응답을 기다리는 동안 다른 작업을 계속할 수 있기 때문에 사용자 경험이 향상된다. 또한 이벤트 기반의 비동기 시스템에서 수많은 동시 연결이나 요청을 효과적으로 처리할 수 있다. 이러한 이유에서 비동기적 프로그래밍이 필요하다고 생각한다.