면접 질문 - 2일차(20190109)


심화 2

  • Iterable
  • Class
  • 비동기 프로그래밍

1.Iterable과 Iterator이 무엇인가?

Iterable이란 순회가능한 자료구조이고
Iterator란 객체이고 next라는 메소드를 갖는데, 이 next메소드는 done과 value의 속성을 가지고 있는 객체를 반환한다.

2.Generator함수에 대해 설명하세요

iterable 객체를 생성하는 함수.
function* gen(){ ... }
이런 방법으로 만들 수 있고 generator로 만들어진 함수는 일반 함수처럼 동작하지만 yield 키워드를 사용할 수 있다.

3.Class 는 무엇이고, Prototype, fucntion의 ES5 스펙만으로 Class를 구현할수 있는가?

Class는 기존 prototype 상속을 기반으로 만들어졌기때문에 ES5의 prototype으로 구현할 수 있다.

4.ES6 클래스와 ES5 함수 생성자의 차이점은 무엇입니까?

클래스는 함수로 호출될 수 없다.
클래스 선언은 `let`과 `const` 처럼 블록스코프에 선언되며, 호이스팅이 일어나지않는다.
클래스의 메소드 안에서 `super` 키워드를 사용할 수 있다.

5.클래스 상속보다 객체 구성을 선호한다는 것은 무엇을 의미하는가?

코드 재사용은 클래스에서 상속받고 객체 분류를 만드는 대신에 작은 단위의 함수를 new 객체로 모으는 방식으로 수행되는 것이 좋다.

6.동기와 비동기의 차이점을 설명하라

여러가지 작업이 있을 때
동기는 한가지 작업을 모두 완료하고 다음 작업으로 넘어가는 방식으로, 순차적으로 작업을 진행하고,
비동기는 한가지 작업을 진행하는데 시간이 소요될 때, 해당 작업이 완료될때까지 다른 작업을 먼저 진행하는 것이다.

7.Promise란 무엇이며 코드가 어떻게 구성되어있는가

언젠가 끝나는 작업의 결과물을 담는 객체이다.

function delay(ms){
  return new Promise(resolve =>{
    setTimeOut(()=>{
      resolve(ms)
    }, ms)
  })
}
delay(1000).then(t => {

  console.log(`${t}초가 지났습니다.`)
  return t
  })

8.Promise와 Callback의 차이점은 무엇이며 각각의 장단점에 대해 설명하라

Callback : 복잡한 비동기 작업을 할 수는 있지만 코드가 많이 복잡해진다.(콜백지옥)
Promise : 연이어 비동기 작업을 하는 코드를 깔끔하게 작성할 수 있다.

9.Async, Await가 무엇이며, 사용해본 경험이 있는가

Async는 비동기 함수로, 동기식 코드를 짜듯이 비동기식 코드를 짤 수 있다는 장점이 있다.
await는 async에서 사용하는 키워드로 await 뒤에 오는 Promise가 결과값을 가질 때까지 함수를 잠시 멈추고, Promise의 결과값이 반환되면 연산을 다시 진행한다. 비동기식으로 작동하기 때문에 해당 함수가 잠시 멈췄을 때 다른 작업을 처리할 수 있다.

10.이벤트 루프란 무엇입니까?

콜 스택을 모니터하고 태스크 큐에서 수행할 작업이 있는지 확인하는 단일 스레드 루프이다. 콜 스택이 비어있고 태스크 큐에 콜백 함수가 있는 경우 함수는 큐에서 제외되고 실행될 콜 스택으로 푸시된다.