2018-08-13 모 스타트업 서류전형 통과하고 진행했던 코딩과제 / Promise

모 스타트업 서류전형 통과하고 진행했던 코딩과제

저장소 : https://bitbucket.org/phpbae/es6-cal-projec

모 스타트업 프론트/백엔드 주니어로 지원을 했었는데, 위와 같은 과제를..

요구사항 1
더하기 빼기를 할 수 있는 계산기를 만들어주세요.
(곱셈, 나눗셈은 안하셔도 됩니다.)
1. 사용자에게 입력을 받아야 하며, 입력은 문자열로 받아야 합니다. (숫자 및 +, - 기호 포함)
2. es6 문법을 사용하여 작성 (npm 사용해서 프로젝트 구성)
3. 본인이 할 수 있는 가장 우아하고 고급스러운 코딩을 부탁드립니다.
(각종 디자인 패턴/ 유지보수를 고려한 코딩/ 각종 라이브러리 사용 가능합니다.)
예)
입력 : 1 - 2 + 3
출력 : 2

요구사항 2
이전에 작성한 계산기 소스를 rollup.js 를 이용하여
컴파일하는 프로젝트를 생성하여 제출해주세요.
(반드시 npm 으로 프로젝트를 구성하시기 바랍니다.)
rollup.js 는 https://rollupjs.org 에서 참고하셔서 진행

위의 요구사항을 충족시키는 앱을 만들라고 했었는데.. 저같은 경우는, node.js readline 모듈을 이용하여 콘솔에서 입력 받고 출력하는 형식으로 했었습니다. 코드는 ES6 문법을 요구하더군요.

rollup.js 는 처음 경험해보았네요.(대부분, webpack을 사용하고 있으니..)

그리고, 저 과제가 통과하여 면접을 보러 갔었는데. Quiz가 또..!!! ㅠㅠ Promise 관련한 문제였습니다. ES6가 완전하게 공부가 안된상태여서.. 어찌저찌 대답만 하고 손코딩은 결과만 나오는 코딩을 했었네요.(배열에 담긴 숫자의 합을 구하기.)

- Promise ?
A promise is an object that may produce a single value some time in the future
프로미스는 자바스크립트 비동기 처리에 사용되는 객체.
비동기 -> 특정 작업 시, 완료까지 기다리지 않고 다음 작업을 수행하는 특성을 의미 합니다.
예) 제가 전자레인지에 토스트를 돌리고, 설거지를 하러감. -> 비동기

자바스크립트는 비동기 처리를 위한 하나의 패턴으로 콜백 함수를 사용한다. 하지만 전통적인 콜백 패턴은 가독성이 나쁘고 비동기 처리 중 발생한 에러의 예외 처리가 곤란하며 여러 개의 비동기 처리 로직을 한꺼번에 처리하는 것도 한계.

비동기 처리가 왜 필요할까?
주로 서버에 요청/응답 작업을 할 때, 필요합니다. 서버에 요청을 보내고 응답이 오기까지 애플리케이션이 멈춰있다면..? 사용자는 매우 불편하겠죠?
그런데, 비동기처리도 문제가 있는게 서버에 요청을 보내고 아 다음작업 해야지 하고 넘어갔는데 응답 데이터가 필요한데 요청보내고 받아오기도 전에 뭔가 작업을 하려고 하면 오류가 발생하거나 undefiend 이렇겠죠? -> 이와 같은 문제를 해결하려는 방법이 Promise 입니다.

Promise로 구현된 비동기 함수는 Promise 객체를 반환

- Pending 상태
new Promise()

new Promise() 메서드를 호출할 때 콜백 함수의 인자로 resolve, reject에 접근할 수 있습니다.
new Promise((resolve, reject) => {
  //비동기 작업 code
})

- resolve를 아래와 같이 실행하면 Fulfilled(이행) 상태
new Promise((resolve, reject) => {
  resolve()
})

- reject 인자로 reject() 메서드를 실행하면 Rejected(실패) 상태
new Promise((resolve, reject) => {
  reject()
})


이제, 저 Promise 들을 어떻게 접근할까요?
.then()
.catch()
를 이용하면 됩니다.

.then((result) => {
    //result는 resolve() 결과가.. resolve(1) -> result = 1
})

.catch((err) => {

  })

Categories:

Updated:

Comments