본문 바로가기

기술면접 준비

예상질문

1. 클로저에 대해서 설명하세요

클로저란 내부함수가 외부함수의 지역변수를 사용 할 수 있고 외부함수는 내부함수가 외부함수의 지역변수를 사용하는 내부함수가 소멸될 떄까지 소멸되지 않는 특성을 의미합니다

 

2. 호이스팅과 Temporal Dead Zone이 어떻게 연관되어있는지 설명하세요.

호이스팅은 var, let, const, function, class 키워드 등을 사용해서 선언하는 모든 식별자(변수, 함수, 클래스 등)가 코드의 선두로 끌어 올려진 것처럼 동작하는 자바스크립트 고유의 특징입니다.

키워드마다 호이스팅 방식의 차이가 다릅니다

var의 경우 선언 단계와 함께 undefined로 초기화되므로 초기화 코드를 만나기 전부터 참조가 가능합니다.

반면에, let, const로 선언된 변수는 선언 단계와 초기화 단계가 분리되어 진행됩니다. 즉, 스코프에 변수를 등록하지만,

초기화 단계는 변수 선언문 코드에 도달했을때 이루어지기 때문에 초기화 이전에 변수에 접근하려고 하면 참조 에러(Reference Error)가 발생합니다.

따라서 스코프의 시작 지점부터 초기화 시작 지점까지는 변수를 참조할 수 없는데, 이를 **Temporal Dead Zone**이라고 합니다.

따라서, let과 const는 호이스팅이 되기는 하지만 초기화가 이루어지지 않은 상태 (Uninitialized)에서 호이스팅이 되기 때문에 초기화 단계를 만나기 전에는 참조할 수가 없으며 일시적 사각지대 (TDZ)가 생기는 것입니다.

 

3.callback, promise, async/await 의 특징과 차이점에 대해서 설명하세요.

콜백은 어떤 이벤트에 의해 호출되거나 다른 함수의 인자로써 이용되는 함수를 의미합니다

이러한 특징으로 비동기적으로 코드를 처리 할 수 있습니다

다만 비동기적으로 처리할 작업이 많아지는경우 함수안에서 함수를 호출하고 또 다시 함수를 호출하는등 콜백지옥이 발생하여 가독성과 코드추적이 힘들어진다는 단점이 있습니다

이러한 단점을 해결하기위해 promise객체가 ES6부터 지원하게 되었습니다

프로미스는 resolve(),reject(), then()같은 프로미스 API를 사용하여 콜백지옥보다 가독성이 좋은 코드를 작성 할 수 있게 해줍니다

프로미스는 3가지의 상태를 가집니다

  • Pending(대기) : 비동기 처리 로직이 아직 완료되지 않은 상태
  • Fulfilled(이행) : 비동기 처리가 완료되어 프로미스가 결과 값을 반환해준 상태
  • Rejected(실패) : 비동기 처리가 실패하거나 오류가 발생한 상태

먼저 Pending(대기)상태가 있는데new Promise()로 메서드를 호출하면 펜딩상태가 됩니다

여기서  resolve() API를 호출하면 Fulfilled(이행)상태가 됩니다

이행상태부터 then() api를 사용하여 처리 결과값을 받을 수 있습니다

프로미스의 단점으로는 코드가 장황하다는 단점이 있습니다

이러한 단점을 해결하기 위해 ES8에서 도입된 async & await이 있습니다

async await은 비동기코드를 동기식으로 표현하여 간단하게 코드를 작성 할 수 있게 해줍니다

사용방법은 함수앞에 async를 선언하면 해당 함수는 항상 프로미스를 반환하게 됩니다

await은 async함수 안에서만 동작합니다

await을 만나면 프로미스처리가 될 떄까지 기다리고 결과는 그 이후에 반환합니다

 

4.React 에서 virtual DOM이 무엇인가요? virtual DOM이 좋은 이유에 대해서 설명하세요.

Virtual DOM은 실제 DOM 변화를 최소화 시켜주는 역할을 합니다.


virtualDOM을 이용하는 이유는 효율성 때문입니다. virtualDOM을 활용하면 실제 DOM을 직접 바꾸는 것보다 시간 복잡도를 낮출 수 있습니다


먼저 브라우저는 HTML 파일을 스크린에 보여주기 위해 DOM 노드 트리 생성, 렌더트리 생성, 레이아웃, 페인팅 과정을 거칩니다.

DOM 노드는 HTML의 각 엘리먼트와 연관되어 있기 때문에 HTML 파일에 20개의 변화가 생기면 DOM 노드가 변경되고 그 이후의 과정역시 20회 다시 이루어 집니다.

작은 변화에도 매우 복잡한 과정들이 다시 실행되기 때문에 DOM 변화가 잦을 경우 성능이 저하됩니다.


Virtual DOM은 뷰에 변화가 있다면, 그 변화가 실제 DOM에 적용되기 전에 Virtual DOM에 적용시키고 최종 결과만 실제 DOM에 전달합니다.


따라서 20개의 변화가 있다면 Virtual DOM은 변화된 부분만 가려내어 실제 DOM에 전달하고 실제 DOM은 그 변화를 1회로 인식하여 단 한번의 렌더링 과정만 거치게 됩니다.

5. Props Drilling 이란 무엇인가요?

프롭스를 하위 컴포넌트로 전달하는것을 의미합니다

프롭스 드릴링의 깊이가 깊어진다면 코드의 복잡성이 높아지는 문제가 발생합니다

프롭스 드릴링을 해결하기위해 저는 리엑트의 컨텍스트 api를 사용하거나 리코일 라이브러리를 주로 사용하여 해결합니다

 

6. JSX가 무엇인가요?

리엑트에서 스크립트 안에서 자바스크립트와 html 형태의 문법을 사용 할 수 있게 확장한 문법입니다

이러한 특징덕에 마크업과 로직을 모두 포함하는 컴포넌트 형태로 코드를 작성할 수 있습니다

 

7. state를 직접 변경하지 않고 setState를 사용하는 이유에 대해서 설명하세요

state로 값을 변경할때는 render 함수를 호출하지 않아서 변경된값이 실제 화면에 반영되지 않는 문제가 있습니다

 

8.React에 있는 라이프사이클과 각 라이프사이클의 역할을 설명하세요.

라이프 사이클은 생성, 업데이트 제거의 순서대로 실행됩니다

함수형컴포넌트의 라이프 사이클은 useEffect로 관리됩니다

컴포넌트가 랜더링 즉 생성이 완료되면 useEffect를 실행합니다

useEffect의 종속성배열에 따라 업데이트마다 useEffect를 실행시킬 수 있습니다

 

9. id와 class 셀렉터의 차이점에 대해 설명하세요.

id 속성과 class의 차이는 고유성에 있습니다 id는 고유한 하나의 요소를 정하는데 사용하고 class는 여러 요소들에 사용할 수 있습니다

id값이 같은 html 요소가 여러 개 있으면 웹 표준에 어긋나기 때문에 협업하는 개발자나 검색엔진에 혼란을 줍니다

 

10. CSS에서 px, em, rem, vh, vw 단위들의 차이점은 무엇인가요?

절대길위단위랑 상대길이단위로 차이점을 나눌 수 있습니다

px는 절대길이단위이고 고정된 값을 가집니다

em과 rem은  글꼴의 크기를 나타낼때 사용하는 상대길이단위입니다

em은 부모의 글꼴을 rem은 뿌리가 되는 요소의 크기에 비례합니다

vh와 vw는 뷰포트의 크기에 따라 변하는 상대길이단위입니다

 

11. Promise의 기능과 필요한 이유에 대해서 설명해주세요.

Promise는 비동기가 순서를 제어하기 위해 필요합니다. 원래 콜백함수로 처리를 했었지만, 콜백헬(callback hell)이 빈번하게 나타남에 따라 코드 가독성이 떨어졌습니다. 그에 따라 Promise가 나오게 되었고 비동기 코드를 동기 코드처럼 처리할 수 있게 되었습니다. 

- 그럼 Promise.all은 어떤 기능을 할까요?
- Promise.all()은 여러 비동기 작업을 동시에 처리하고 순서를 유지하기 위해서 사용합니다. Promise를 요소들로 하는 배열은 전달인자로 받아 이후에 then으로 resolved된 비동기 작업을 처리할 수 있습니다. 공개 API를 쓰는 경우 필요한데, 공개 API에서 한번에 100개의 아이템만 조회할 수 있는 경우 일반적으로 Promise나 async/await을 사용하면 순차적으로 100개의 비동기 작업의 실행과 리턴을 기다려야만 합니다. 동기적인 코드 실행과 실행 시간에 별 차이가 없습니다. 하지만 Promise.all()을 쓰면 컴퓨터와 Node.js가 가능한 만큼 여러 쓰레드를 사용하여 작업할 수 있어서 코드 실행 시간을 단축할 수 있습니다.


12. 순수함수란 무엇인가요? 불변성과 사이드 이펙트와 연결하여 설명해주세요.

순수함수는 함수형 프로그래밍에서 자주 사용되는 개념으로, 오직 함수의 입력만이 함수의 결과에 영향을 주는 함수를 의미합니다.

또한, 사이드 이펙트가 없어야 합니다. 사이드 이펙트는 쉽게 말해서 외부 변수를 참조하거나, 변경하는 모든 종류의 코드를 의미합니다.

즉, 순수함수는 함수 body 내에 있는 코드만 점검하면 되기 때문에 간결하게 코드를 작성하고 사고하는데 도움이 됩니다


자바스크립트에서 순수함수를 제작하기 위해서 데이터의 불변성을 유지하는 것이 중요합니다. 

함수의 전달인자로 참조 자료형이 전달되는 경우, 해당 객체 자체를 바꿔서 사이드 이펙트를 만들 수 있고, 이는 해당 데이터의 불변성을 손상시킬 수 있습니다. 

그래서 배열의 불변성을 보장하는 메서드인 map, filter, reduce 등이 각광을 받게 되었습니다.


13. React의 state와 props에 대해서 설명해주세요.

React에서 state는 변할 수 있는 데이터를 의미합니다.

애플리케이션의 작동 구조를 봤을 때, 변할 수 있는 값이면 React의 상태로 적절합니다.

예를 들어서, input의 value는 사용자가 값을 입력하면 변경될 수 있는 값이기 때문에 state로 적절합니다.

또한, Social media에서 게시글 역시 다른 유저가 추가로 게시글을 작성하고 난 뒤에는 게시글의 수가 변할 수 있기 때문에 게시글 배열도 state로 적절합니다.


props는 외부에서 전달받아 컴포넌트 내에서는 변할 수 없는 값입니다. 

그래서 React에서는 props를 중간에 변경하는 것을 권장하지 않고, lifting state up(상태 끌어올리기)을 통해 상태를 변경시키고, 변경된 상태값을 props로 내려주어 side effect를 최소화시킵니다.


14. React 컴포넌트의 key 속성에 대해서 설명해주세요.

Key 속성은 같은 컴포넌트를 여러번 렌더링할 때, 다른 컴포넌트임을 구분하기 위해서 사용하는 속성입니다.

예를 들어, 100개의 게시글 중 하나의 게시글만 변경되었을 때, 해당 게시글만 새롭게 재렌더링하고, 다른 게시글은 그대로 둘 수 있습니다.

이렇게 key 속성을 활용하면 React가 DOM을 직접 제어하는 것 보다 더 빠르게 렌더링을 할 수 있습니다.

15. useEffect의 dependency array에 대해서 설명해주세요.

useEffect는 React Function Component에서 라이프사이클을 대신할 수 있는 React Hook입니다.

프론트엔드 개발에서는 불가피하게 side effect가 발생합니다.

대표적으로 http 비동기 통신, DOM reference 참조 및 변경 등이 있습니다.

이런 작업을 처리할 때는 React에서 제공하는 useEffect의 callback 함수 내에서 처리해야 합니다.

useEffect를 사용하지 않았을 때는 리액트가 컴포넌트를 렌더링하기 전에 side effect가 생긴다면, 해당 side effect가 화면에 바로 적용되지 않습니다.

useEffect에 dependency array를 주지 않으면, 상태가 변경될 때 마다 컴포넌트가 리렌더링이 됩니다.

간단한 local state가 계속 변경될 때마다 새롭게 컴포넌트가 리렌더링 된다면, 이는 성능에 악영향을 미칩니다.

그래서 특정 상태가 변경될 때만 작동하게 할 수 있도록 dependency array 요소를 정하면, 해당 상태가 변경될 때만 작동합니다.

반대로, 컴포넌트 렌더링 시 딱 한번만 작동되게 하고 싶으면 dependency array에 아무것도 넣지 않으면 됩니다.

 

16. CSR과 SSR의 차이점에 대해서 설명해주세요.

CSR과 SSR은 각각 클라이언트 사이드 렌더링, 서버 사이드 렌더링의 약자입니다.

최초 웹이 탄생하고 ajax가 보편화되기 전 까지는 서버에서 HTML파일을 전부 만들어서 브라우저에 전달하고, 브라우저에서 해당 HTML 파일을 화면에 보여주는 SSR 방식이 보편적이였습니다.

이후 ajax가 보편화되고 나서 부터는 CSR이라는 개념이 대두되었습니다.

CSR은 ajax 요청을 통해 페이지의 일부분에 필요한 정보만 받아서 브라우저에서 렌더링을 할 수 있는 장점이 있습니다.

즉, 단순한 웹 페이지가 아니라 유저와의 즉각적인 상호작용이 필요한 웹 애플리케이션에 적절합니다.

17. GET메서드와 POST 메서드의 차이점

GET 메서드는 서버의 리소스를 조회하고, POST 메서드는 서버의 리소스를 변경하는 HTTP 메서드입니다.

GET 메서드는 요청을 무한대로 보내도 같은 요청을 회신받을 수 있는 멱등성(idempotence)를 가지고 있습니다.

반면, POST는 요청을 무한대로 보내면 최초 응답과는 다른 회신을 받게 됩니다.

이미 해당 리소스가 생성이 되어있거나, 변경되기 때문에 멱등성이 없습니다.

GET은 단순히 조회를 요청하기 때문에 body를 보내지 않는 것이 보편적이고 query parameter나 path parameter를 씁니다.

POST는 리소스의 생성 및 변경을 의미하기 때문에, body에 원하는 변경 사항을 자세하게 적습니다.

18. HTTP 메시지 구조에 대해 설명해주세요.

HTTP 메시지는 크게 start-line, header와 body로 나뉩니다. start-line은 어떤 프로토콜을 사용하는지, 어떤 HTTP 메서드인지, 상태 코드는 무엇인지 등 해당 요청 / 응답의 핵심 정보가 담겨있습니다.

header는 요청 / 응답에서 공통으로 자주 다루는 정보들이 담겨있습니다.

예를 들면, body의 Content-type이 무엇인지, 캐시의 유효 기간은 얼마다 되는지 등 공통으로 자주 주고받는 정보가 담겨있습니다.

body는 해당 요청 / 응답에서 꼭 다뤄야 하는 중요한 정보를 담고 있습니다. 보통 추가/변경/삭제하고 싶은 리소스의 자세한 정보를 담기도 하고, 응답의 경우 요청자가 꼭 알아야 하는 리소스에 대한 정보를 담게 됩니다.



19. Same-Origin Policy와 CORS에 대해서 설명해주세요.


-SOP는 Same Origin Policy의 줄임말로, 동일 출처 정책을 의미합니다.

uri의 프로토콜, 호스트, 포트 이 3가지가 모두 동일해야 같은 출처(Same Origin)으로 인정하게 되는데요,

이 정책이 필요한 이유는 동일한 출처가 아닌 곳에서 요청이 오는 경우 해당 요청을 막아 높은 보안성을 유지하기 위함입니다.

대부분의 모던 브라우저에서는 이 정책을 기반으로 동일 출처로의 요청이 아니면 요청 자체를 막습니다.

크롬, Edge, Firefox와 같은 모던 웹 브라우저 사용을 권장하는 이유입니다.

다만, 서버에서 다른 출처에서의 요청을 허용하게 해줄 수 있는 CORS 설정을 해준 경우는 접근할 수 있습니다.

모든 출처로 부터의 요청을 허용할 수도 있고, 일부 출처로의 요청만 허용하는 것도 가능합니다.

express.js에서는 cors 미들웨어로 상황에 맞게 cors 설정을 제어할 수 있습니다.

 

20. Node.js는 싱글 스레드인가요?

Node.js 자체는 싱글스레드 방식이 아닙니다.

싱글 스레드 방식으로 동작하는 것은 Node.js나 브라우저가 아니라 브라우저에 내장된 자바스크립트 엔진입니다. 

만약 모든 자바스크립트 코드가 자바스크립트 엔진에서 싱글 스레드 방식으로만 동작한다면 자바스크립트는 비동기로 동작할 수 없을 것입니다. 

즉, 자바스크립트 엔진은 싱글 스레드로 동작하지만 브라우저나 Node.js는 멀티 스레드로 동작하는 것입니다.

자바스크립트를 실행하는 부분에서만 싱글스레드로 구성되어있고, 이 때의 작업 동시성은 이벤트 루프를 통해서 구현할 수 있습니다.

 

21. JavaScript는 싱글 스레드입니다. 어떻게 싱글 스레드 방식으로 비동기 호출을 할 수 있는 지에 대해 설명할 수 있나요? 

자바스크립트의 함수가 실행되는 방식을 보통 "Run to Completion" 이라고 말합니다. 이는 하나의 함수가 실행되면 이 함수의 실행이 끝날 때까지는 다른 어떤 작업도 중간에 끼어들지 못한다는 의미입니다. 앞서 말했듯이 자바스크립트 엔진은 단일 호출 스택을 사용하며, 현재 스택에 쌓여있는 모든 함수들이 실행을 마치고 스택에서 제거되기 전까지는 다른 어떠한 함수도 실행될 수 없습니다.

자바스크립트에서는 함수 호출을 관리하는 call stack과 비동기 작업 처리를 위한 Web API가 함께 작업을 처리합니다. Web API는 특히 작업 완료에 시간이 오래 걸리는 작업을 처리하게 되는데, 이 결과값을 처리할 수 있는 callback 함수를 task queue에 쌓습니다.

하나의 js파일이 실행되면, 코드가 차례로 실행됩니다. 코드가 실행되는 도중에 함수가 호출이 되는 순간 call stack에 해당 함수 실행을 위한 모든 정보가 실행 컨텍스트에 담깁니다. 이 함수 내에서 또 함수가 호출되면, call stack에 새로운 실행 컨텍스트가 생깁니다. 함수 실행이 마무리 될 때 마다 결과값을 반환하고 해당 실행 컨텍스트는 없어집니다. 마지막 실행 컨텍스트부터 하나씩 빠지기 때문에 Stack 구조라고 부를 수 있는 것입니다.

이 과정 중에 호출되는 함수가 비동기로 작동되는 경우, 이 비동기 작업은 (브라우저는) Web API에서 처리됩니다. 이 작업의 결과를 처리하는 callback 함수는 이후에 call stack에서 따로 실행이 되어야 하는데, call stack에서 실행 컨텍스트가 아직 남아있는 경우 task queue에서 "대기"하게 됩니다.

시간이 오래 걸리는 작업이 call stack에 머물러서 싱글스레드로 작동되는 event loop를 막지 않도록 도와줍니다. 그래서 연산이 많고 시간이 오래 걸리는 작업은 비동기로 처리하는 것이 효율적인 것입니다.

 

22. Event Loop에 대해 설명할 수 있나요?

JavaScript는 싱글 스레드 방식으로 돌아가지만 실제 자바스크립트가 구동되는 환경(브라우저, Node.js등)에서는 주로 여러 개의 스레드가 사용되기 때문에 필요한 장치가 이벤트 루프입니다.

핵심만 말하자면, JavaScript event loop는 call stack이 비어있는 경우, task queue에서 대기하던 callback을 call stack으로 옮겨서 callback을 실행시켜주는 역할을 합니다.

 

23. 가비지 컬렉션이란 무엇이며, 가비지 컬렉션을 가진 언어에는 무엇이 있나요? 

가비지 컬렉션은 프로그램에서 더 이상 사용하지 않는 메모리를 자동으로 정리하는 것입니다.

이 기능을 가진 언어(혹은 엔진)는 자바, C#, 자바스크립트 등이 있습니다.

mark and sweep 알고리즘 방식에 의해 가비지 컬렉션이 일어납니다

mark and sweep는 객체에 in-use flag를 두고, 사이클마다 메모리 관리자가 모든 객체를 추적해서 사용 중인지 아닌지를 표시(mark)합니다.

그 후 표시되지 않은 객체를 삭제(sweep)하는 단계를 통해 메모리를 해제하는 방식을 mark and sweep 알고리즘이라고 합니다.

24. Stack과 Queue의 차이점은 무엇인가요?

Stack은 “쌓다"라는 의미를 가진 자료구조입니다.

입력과 출력이 하나의 방향으로 이루어지는 제한적 접근 자료구조이며 먼저 들어간 데이터는 제일 나중에 나오는 LIFO(Last In First Out)의 구조를 가지고 있습니다.

Queue는 Stack과 반대되는 개념으로, 먼저 들어간 데이터(data)가 먼저 나오는 FIFO(First In First Out) 을 특징으로 가지고 있습니다. 티켓을 사려고 줄을 서서 기다리는 모습과 흡사한 이 자료구조는 입력과 출력의 방향이 고정되어 있으며, 두 곳으로 접근이 가능합니다.

 

25. Tree와 Graph의 차이점은 무엇인가요?

Tree는 방향성이 있는 비순환 그래프이기 때문에 Cycle이 존재하지 않으나 Graphs는 노드와 노드를 연결하는 엣지로 구성되어 있는 자료구조이므로 순환, 비순환 모두 존재 가능합니다. (즉 Cycle이 있을 수도 있고 없을 수도 있습니다.) 또한 Tree는 방향 그래프만 존재하지만 Graph는 방향, 무방향 둘 다 존재합니다.

Tree는 Root Node라는 개념이 존재하고, 계층적 구조를 가지고 있기 때문에 부모-자식 관계가 존재하지만 Graph는 Root Node 개념 자체가 존재하지 않기 때문에 부모-자식 관계가 존재하지 않습니다.

 

26. 이진 탐색 방법에 대해 설명할 수 있나요?

이진 탐색이란 데이터가 정렬돼 있는 배열에서 특정한 값을 찾아내는 알고리즘입니다.

배열의 중간에 있는 임의의 값을 선택하여 찾고자 하는 값 X와 비교하고, X가 중간 값보다 작으면 중간 값을 기준으로 좌측의 데이터들을 대상으로, X가 중간값보다 크면 배열의 우측을 대상으로 다시 탐색합니다.

동일한 방법으로 다시 중간의 값을 임의로 선택하고 비교합니다. 이런 식으로 해당 값을 찾을 때까지 이 과정을 반복하는 방법입니다

-이진 탐색 트리에 대해 질문

이진 탐색 트리란 이진 탐색(binary search)과 연결 리스트(linked list)를 결합한 이진트리를 말합니다.

이진 탐색의 효율적인 탐색 능력을 유지하면서도, 빈번한 자료 입력과 삭제를 가능하게끔 고안됐습니다.

 

28. 스코프에 대해서 설명하세요.

스코프는 변수나 함수같은 식별자가 유효한 범위를 의미합니다.

 

29. 스코프체인에 대해서 설명하세요

스코프 체인(Scope Chain)은 일종의 리스트로서 전역 객체와 중첩된 함수의 스코프의 레퍼런스를 차례로 저장하고, 의미 그대로 각각의 스코프가 어떻게 연결(chain)되고 있는지 보여주는 것을 말합니다.

 

30. 변수 선언, 초기화, 할당의 차이점에 대해서 설명하세요.

변수 선언 : 변수를 정의하는 것을 의미한다.

변수 할당 : 변수가 선언된 후 대입 연산자(=) 를 통해 값을 넣어주는 것을 의미한다.

변수 초기화 : 변수를 선언함과 동시에 값을 넣어 주는 것을 의미한다.

 

31. ES6의 주요 변화점에 대해서 설명하세요.

가장 큰 변화점으로는 EMCAScript 2015 이전에는 전역 범위와 함수 범위만 존재했습니다. ES6 이후로 let const 키워드의 등장으로 블록 범위가 적용되었습니다.

화살표 함수,클래스, 프로미스, 전개 구문, 구조분해 할당, 템플릿 리터럴기능이 도입되었습니다

 

32.원시 자료형과 참조 자료형의 대표적인 차이는 무엇인가요?

 

원시 자료형이 할당될 때에는 변수에 값(value) 자체가 담기고, 참조 자료형이 할당될 때는 메모리 주소(reference)가 담깁니다.

이로인해 참조형 자료형을 수정하는 경우 수정한곳 뿐만아니라 해당 참조형 자료형을 참조하는곳 모두 값이 바뀝니다

 

33. null과 undefined의 차이에 대해서 설명하세요.

undefined은 변수를 선언하고 값을 할당하지 않은 상태, 

null은 변수를 선언하고 빈 값을 할당한 상태(빈 객체)입니다

정리하자면 null은 개발자가 정의한 빈 값이고

undefined는 개발자가 정의를 하지않은 빈값입니다

 

34. rest syntax와 spread syntax의 차이에 대해서 설명하세요.

Spread Syntax는  배열, 객체, 문자열의 요소를 꺼내는 역할을 합니다

Rest Parameter는 함수의 인수를 배열로 나타낼 수 있게 해줍니다

Spread Syntax는 배열(또는 객체, 문자열)의 요소를 확장하는 개념이라면,

Rest Parameter는 흩어진 함수의 인자를 압축하는 개념입니다

 

35. Synchronous execution(동기) 와 Asynchronous execution(비동기) 의 차이점은 무엇인가요?

 

'' 카테고리의 다른 글

CORS 에러를 해결하는 방법  (0) 2022.12.07
Lighthouse를 이용한 웹 페이지의 품질을 개선  (0) 2022.12.05
웹 표준과 접근성  (0) 2022.11.08
Same-Origin Policy와 CORS  (0) 2022.10.19
HTTP 메세지 구조란?  (0) 2022.10.19