230222.til

Universe·2023년 2월 22일

면접스터디 데일리 과제

Q1. Hoisting 이란? TDZ란?

1-1. Hoisting 이란 무엇인가요 ?
런타임 이전에 실행 컨텍스트를 생성할 때, 실행 할 코드를 읽어서
코드를 실행하는데 필요한 변수나 함수를 메모리에 등록하게 되는데,
이러한 과정이 변수나 함수의 선언이 스코프의 최상단으로 끌어올려지는 것
같은 효과를 낸다고 해서 호이스팅이라고 부릅니다.
호이스팅이 발생하는 이유는 자바스크립트가 인터프리터 언어이기 때문입니다.
컴파일 되는 대신에 인터프리터에 의해 실행되므로,
런타임 이전에 코드의 구조를 미리 파악하여 실행 순서를 변경하고 최적화하는 과정을
수행하게 됩니다.

1-2. TDZ란 무엇인가요?
자바스크립트의 변수나 함수는 선언, 초기화, 할당의 세 단계를 거치게 됩니다.
그런데 let과 const로 선언한 변수나 함수가 선언된 시점부터 초기화 되기 전까지,
선언되어 메모리상에 존재는 하지만 접근할 수는 없는 상태에 빠지게 되는데
이를 Temporal Dead Zone (TDZ) 라고 합니다.
var 로 선언한 변수는 선언과 초기화 단계가 같이 일어나기 때문에
TDZ 속성의 영향을 받지 않습니다.

@ 실행 컨텍스트
실행 컨텍스트는 자바스크립트 엔진이 코드를 실행하는 데 필요한 정보를 담고있는 객체입니다.
해당 코드 블록의 변수, 함수, 매개변수, this 바인딩 같은 정보를 담고 있으며,
이런 정보를 토대로 코드 실행 과정에서 필요한 컨텍스트의 정보를 확보하고 관리하게 됩니다.

실행 컨텍스트는 크게 세가지 객체로 이루어져 있습니다.
변수 객체는 현재 컨텍스트에서 사용되는 지역 변수, 매개변수, 전역 변수등에 대한 정보를
담고 있으며 함수 실행 컨텍스트에서만 생성됩니다.
스코프 체인은 현재 실행 컨텍스트의 변수 객체와 상위 컨텍스트의 변수 객체를
서로 체인 형식으로 연결합니다. 이 체인 구조를 통해 변수에 대한 검색을 할 수 있습니다.
this 바인딩은 this의 값에 대한 정보를 가지고 있습니다. this는 함수의 호출 방식에
따라서 값이 변화하는 성질을 가지고 있기 때문에 실행 컨텍스트에서
this의 값을 바인딩 하게 되며, 함수 실행 시점에 결정됩니다.

함수가 호출되면 해당 함수의 실행 컨텍스트가 생성되게 됩니다.
그 후, 생성된 실행 컨텍스트의 변수 객체가 생성됩니다.
그런 다음 스코프 체인이 생성되고, this의 바인딩을 결정하게 됩니다.
모든 실행 컨텍스트가 결정되면 코드를 실행하게 됩니다.

@ 컴파일러 vs 인터프리터
컴파일러는 전체 프로그램 코드를 읽고 분석하여 목적 코드로 변환하는 프로그램 입니다.
목적코드는 실행 가능한 파일로 만들어져 기계어로 직접 실행되므로
프로그램 실행 시간을 단축시키며 더 빠른 실행속도를 제공하게 됩니다.
하지만 소스 코드를 컴파일하고 실행 파일을 생성하는 추가적인 작업이 필요해
개발 주기가 더 길어질 가능성이 있습니다.

인터프리터는 소스 코드를 한 줄씩 읽고 읽은 코드를 바로 실행하는 프로그램 입니다.
개발 주기가 빠르고, 디버깅이 쉬우며, 확장성이 좋다는 장점이 있습니다.
하지만 실행시간에 소스 코드를 해석하기 위해 리소스를 사용하기 때문에
실행 속도는 상대적으로 느릴 수 있습니다.

컴파일러는 정적 타입의 언어에서 사용되며,
코드를 실행하기 전에 컴파일러가 타입 검사를 수행합니다.
이를 통해 프로그램의 안정성을 높이고 버그를 사전에 방지할 수 있습니다.
컴파일러를 사용하는 언어로는 C, Java, Rust 등이 있습니다.

반면에 인터프리터는 동적 타입의 언어에서 사용되며,
런타임시 타입을 결정합니다. 개발자에게 더 많은 유연성을 제공하지만,
코드의 안정성과 예측 가능성을 낮출 수 있습니다.
인터프리터를 사용하는 언어로는 Python, Ruby, JavaScript 등이 있습니다.

Q2. parameter와 argument의 차이에 대해 설명해주세요.

parameter 는 함수 정의 시 함수에 전달되는 값의 이름이고,
argument는 함수 호출 시 함수에 전달되는 값 입니다.

햄버거를 만드는 함수가 있다고 가정해보면,
함수의 도면에 들어갈 빵, 패티, 치즈,
그러니까 어떤 재료가 들어가야 하는지에 대한 계획을 parameter 라고 볼 수 있고,
실제로 햄버거를 만들 때 사용되는 재료를 argument 라고 할 수 있습니다.

profile
Always, we are friend 🧡

0개의 댓글