ECMAScript 버전 6 이후를 통틀어 일반적으로 ES6이라고 부름
계속해서 발전해가는 JavaScript 표준 문법
2015년, ECMAScript 버전 6 이후 많은 현대적인 문법이 추가됨.
그러므로 다른 언어에서 부터 지원되던 유용한 기능들이 이 자바스립트로 넘어온것이다. 그러다 보니 사용자들이 사용자 코드들 중 ECMAScript버전 6 이전에 사용된 코드가 있을 수 도 있고 이후에 사용된 코드들도 있을 것이다.
1.현대전인 문법은 생산성 향상에 도움을 줌 => 작은 코드로도 더 유용한 기능을 할 수 있다.
2.Node.js는 빠르게 최신 ECMAScript를 지원 중
3.자주 사용되는 유용한 문법을 익히고 필요한 부분에 적절하게 활용하는것이 중요하다.
Node.js는 ES6의 모든 문법을 지원하지는 않지만 Node.js로 자주 사용되는 유용한 ES6문법의 코드를 실해해보며 Node.js와 친숙해질 수 있다.
기존의 자바스크립트에서는 변수를 선언할 때는 var라는 키워드를 사용하였다.하지만 이 var 라는 키워드는 상수와 변수의 구분이 없는 문제점을 가지고 있었고 ES6버전을 이용하여 const와 let 으로 상수와 변수의 구분이 가능해졌다.
Template String은 우리가 원하는 문자열로 만들수 있는것이다. 기존의 자바스크립트의 문법에서는 + 를 사용해 문자열과 변수를 연결하고 줄 바꿈 문자 \n을 사용해야 했었지만 ES6 버전에서는 문자열 사이에 간단한 변수를 사용 가능하게 되었고 줄 바꿈을 지원 가능하게 해주었다.
기본적인 문법에서는 그림과 같이 function이라는 함수와 함수 이름, 매게변수, 괄호를 넣어주어야만 함수를 만들수 있었다. 하지만 ES6에서는 '=>'를 기준으로 왼쪽에는 매게변수, 오른쪽에는 할일을 적어서 간편하게 함수를 만들수 있다.
=> 이 장점은 위의 그림에 있는 익명함수를 간결하게 표현할 때 분명히 나타난다.
class는 객체지향 프로그램이나 자바와 같은 언어에서 사용되는 언어인데 기존의 자바스크립트의 복잡한 형태보다 더 일반적인 형태의 class를 구현 가능하게 만들어 줄수 있다.
어떤 자료를 분해는것을 의미한다. 예를 들어 name 은 'elice age는 5라는 작은 객체를 만들어 주었다. 그다음 name과 age를 각각 obj.name이라고 두는데 ES6에서는 obj를 오른쪽에 두어 이 변수를 한번에 obj라고 지정해줄 수 있다.
promise와 Async-Awaite은 간단한 요약이 어려움으로 나중에 비동기 코딩때 실습해보겠다.
복잡하거나 직관적이지 않던 방법을 보기 좋게 만들고 간결하게 표현할 수 있게 되고, 현대적인 문법은 처음 접할 땐 어색하지만 익숙해지면 좋은 코드로 작성 할 수 있게 됨.
비동기란 쉽게 말하자면 어떤일을 할 때 그일이 끝나기전까지 기다리지 않고 다른일을 하거나 기다리는것을 의미한다.
처음에는 전통적이 javascrpit의 이벤트 기반 코딩 방식을 사용하였지만 이것의 문제점을 해결하기위해서 promise가 나왔고 그 이후에 단점을 보안하기 위해 Async-Await가 나오게 되었다.
db.getUers 함수는 데이터베이스에서 유저 목록을 찾아오는 비동기 동작을 수행하게 되는데 이 말은 즉,node.js가 하는 일이 아니라는 것이다. 일을 시키고 일의 결과가 나오면 console.log의 값을 나타내는 것을 볼 수 있다.
쿼리가 완료되면 오류가 있는지, 혹은 유저목록의 결과로 미리 등록된 callback 함수를 실행하는데 이 함수를 위에서는 console.log를 가리키게된다.
callback 함수를 실행하는데 callback 함수의 표준이 있는데 그것은 에러와 결과를 같이 전달하는것이 표준으로 위와 같이 잡혀있는것을 볼 수 있다.
콜백 지옥
위의 그림과 같이 node.js는 기본적으로 비동기 동작을 callback으로 처리하기 때문에 callback의 callback의 callback...를 볼수 있다. 이와 같은 코드는 되게 복잡해 보이고, 쉽게 쓸수 가 없을 것이다. 이로 인해 우리는 이 단점을 극복하기 위해 promise함수를 사용하게 된다.
Promise 함수는 동작이 완료되면 then에 등록된 callback을 실행하고 오류가 발생한 경우 catch에 등록된 callback을 실행시킨다. 이는 chaining을 사용해 코드를 간결하게 만들수 있고short-hand 표현 방법으로 더욱 간결하게 만들어 줄 수 있다.
이러한 프로미스도 callback 함수와 같이 then이 꼬리에 꼬리를 물어 작동이 될 수도 있다.
직관적으로 생각한다면 위와 같은 콜백 지옥과 유사한 해결핵이 Async-Await가 됨.
async구문 어떤 작업을 있어서 '이 작업을 하겠다', '명시하겠다'라는 뜻을 가지고 있고, async 함수 내에서 promise 함수의 결과는 await으로 받을 수 있고, await 한 promise 함수가 완료 될때 가지 다음 라인으로 넘어가지 않는다. 하지만 await 간에서는 작업을 비동기로 진행을 할 수있다.
Async 함수의 오류처리
async 함수의 오류처리는 promise 함수와 동일하게 처리된다.
정리