<목차>
- 호이스팅
- 동기와 비동기
10. 호이스팅
- 자바스크립트에서 중요한 개념
- 변수나 함수 선언을 코드의 상단으로 끌어올린다는 의미
- 실행 전에 해당 선언들을 메모리에 저장하는 자바스크립트의 동작 방식
- var 키워드로 선언된 변수는 호이스팅되어 스코프 최상단으로 이동, 초기화는 실제 코드에 작성된 위치에서 발생, 초기화 전 변수에 접근하면 undefined값을 얻게 됨
- 변수 호이스팅 : let과 const 키워드로 선언된 변수도 호이스팅된다. 하지만 선언 전 접근하려고 하면 참조 에러가 발생 => 일시적 사각지대(Temporal Dead Zone)때문
- 함수 호이스팅 : 함수를 선언하기도 전에 호출할 수 있게 해주는 특징. 함수 선언이 코드의 어느 위치에 있는지 간에 전체 스코프에서 접근사용가능.
- 함수 호이스팅에서 함수선언(function키워드로 시작): 함수 호출이 함수 선언 위쪽에서도 가능하다.
- 함수 호이스팅에서 함수표현식(함수를 변수에 할당하는 방식) : 함수 표현식은 호이스팅의 영향을 받지만 var, let, const 변수 호이스팅 규칙을 따름. 그러므로 var의 경우 선언 전 호출이 가능하지만 undefined를 얻게 될 것이고 let,const는 일시적 사각지대 때문에 에러가 발생
- 화살표 함수도 var,let,const 키워드를 함께 사용하기 때문에 함수표현식
Q. Javascript의 호이스팅에 대해 설명해주세요.
자바스크립트에서 호이스팅은 매우 중요한 개념입니다. 호이스팅은 변수나 함수 선언을 코드의 상단으로 끌어올린다는 의미로, 실행 전 해당 선언들을 먼저 메모리에 저장하는 자바스크립트의 동작 방식입니다. 호이스팅은 변수 호이스팅과 함수 호이스팅이 있습니다. 변수 호이스팅은 var, let, const 모두 기능하지만, var의 경우 실제 코드가 작성된 위치에서 초기화가 발생하기 때문에 초기화 전에 변수에 접근하면 undefined라는 결과를 얻게 됩니다. let과 const는 일시적 사각지대 때문에 선언 전에 접근하려 한다면 참조 에러가 발생합니다. 함수 호이스팅의 경우 함수 선언을 할 때와 함수 표현식을 사용할 때로 나뉘는데, 함수 선언 즉 function 키워드로 시작하면, 함수가 호이스팅되어 코드 실행 전 스코프 최상단으로 끌어올려집니다. 이로 인해 함수를 선언하기 전에 함수를 호출할 수 있습니다. 이와 반대로 함수 표현식의 경우 변수 호이스팅과 같은 방식으로 동작해 var의 경우 선언 전에 호출하면 undefined가 나오고, let과 const는 에러가 발생하게 됩니다.
11. 동기와 비동기
동기(Synchronous)프로그래밍
- 작업들이 순차적으로 실행
- 하나의 작업이 완료된 후 다음 작업 시작
- 모든 작업은 시작된 순서대로 완료, 어떤 작업이 오래걸려도 다 끝나고 다음 작업이 진행
비동기(Asynchronous)프로그래밍
- 한 작업이 완료되지 않아도 다음 작업 시작
- 작업은 백그라운드에서 실행
- 해당 작업이 완료되면 콜백 함수나 프로미스 등을 통해 결과를 처리 가능
- 웹 서버 요청, 파일 I/O, 데이터베이스 작업 등에 유용하게 사용
- 예를 들어 서버에서 데이터를 요청하고 바로 다음 코드 라인을 실행하면서 데이터가 도착하면 그 때 처리 진행
비동기 프로그래밍의 필요성
- 효율성과 성능 개선 : 동시에 여러작업을 처리 => 효율성 향상
- 사용자 경험 개선 : 데이터 로딩과 같은 백그라운드 작업이 진행되는 동안에도 다른 인터페이스 요소를 자유롭게 조작 가능
- 자원의 효율적 사용 : 서버는 여러 요청을 받고 데이터 조회를 시작한 후 결과를 기다리는 동안 다른 사용자의 요청을 받을 수 있음, 현대 컴퓨터의 여러개 cpu코어를 비동기 프로그래밍을 사용하여 시스템 자원을 더 효율적으로 사용가능
Q. 동기와 비동기의 차이에 대해 설명해주시고 비동기프로그래밍의 필요성에 대해 답변해주세요.
동기와 비동기 프로그래밍은 프로그램이 작업을 수행하는 방식을 말합니다. 동기 프로그래밍에서는 작업들이 순차적으로 진행되어 한 작업이 완료된 후에야 다음 작업이 시작됩니다. 중간에 어떤 작업이 오래 걸려도 그 작업이 완전히 끝나고 나서야 다음 작업이 진행됩니다. 반면, 비동기 프로그래밍에서는 한 작업이 완료되지 않았어도 다음 작업을 시작할 수 있습니다. 예를 들어, 서버에 데이터를 요청하고 바로 다음 코드 라인을 실행하면서, 데이터가 도착하면 그때 해당 일을 처리하는 방식입니다. 이 방식은 웹 서버 요청이나 데이터베이스 작업 등에서 유용하게 사용됩니다. 비동기 프로그래밍은 효율성과 성능을 개선할 수 있는 장점이 있으며, 사용자 경험도 향상시킬 수 있습니다. 동시에 여러 작업을 처리할 수 있어 효율성이 향상되며, 데이터 로딩과 같은 백그라운드 작업이 진행되는 동안에도 다른 인터페이스 요소를 자유롭게 조작할 수 있습니다.