본문 바로가기

Backend/Javascript

ES8 (ES2017)

이번 포스팅에선 ES8 의 기능들에 대해 알아보도록 하겠습니다.

 

- Async functions

 

ES 에서 그간 추가된 스펙 중에 현재 자바스크립트 프로그래밍에서 가장 많이 쓰는 기능이 아닐까 싶습니다.

async functions 이 제공하는 syntax 를 통해 훨씬 향상된 비동기 프로그래밍이 가능케 되었습니다.

 

const test1 = () => {
  return new Promise(resolve => {
    resolve(3);
  });
};

(async () => {
  const result = await test1();
  console.info(result); // 3
})();

 

async 함수에선 await 키워드를 사용할 수 있고, await 는 전달된 promise 의 해결을 기다리는 역할을 합니다.

async 가 없으면 await 키워드는 유효하지않고 SyntaxError 를 던집니다.

 

const test1 = () => {
  return new Promise((resolve, reject) => {
    reject(5);
  });
};

(async () => {
  try {
    const result = await test1();
    console.info(result);
  } catch (err) {
    console.error('ERROR', err); // ERROR 5
  }
})();

 

기존 거부된 promise 를 catch 구문에서 처리할 수 있었던 것 처럼, await 에 전달된 promise 가 거부된 경우엔 try - catch 로 할 수 있습니다.

 

const test1 = async () => {
  return 1;
};

(async () => {
  const result1 = test1();
  console.info(result1); // Promise { 1 }
  
  const result2 = await test1();
  console.info(result2); // 1
})();

 

async 함수는 항상 promise 를 반환하게 되어있습니다. 명시적으로 promise 를 반환하지 않더라도, 암묵적으로 promise 가 감싸지게 됩니다. 따라서 위처럼 test1 함수를 await 없이 호출했을 땐 promise 객체 상태를 받게 됩니다.

확실히 이전까진 promise 를 통해 callback hell 을 없애도 .then().then()... 등의 구문이 길어지면서 가독성이 떨어지는 부분이 있었는데, async - await 를 통해 깔끔한 비동기 프로그래밍이 가능해졌습니다.

 

- Object.values

 

const test1 = { id: 1, name: 'tom', age: 40 };

console.info(Object.values(test1)); // [1, 'tom', 40]

 

파라미터로 전달된 객체의 값들로만 이뤄진 배열을 반환하는 Object 의 static method 입니다.

 

- Object.entries

 

const test1 = { id: 1, name: 'tom', age: 40 };

for (const [key, value] of Object.entries(test1)) {
  console.info(key, value);
  /*
    id 1
    name tom
    age 40
  */
}

 

파라미터로 전달된 객체의 key, value 쌍으로 이뤄진 배열을 반환하는 Object 의 static method 입니다.

 

- Object.getOwnPropertyDescriptors

 

const test1 = { id: 1, get age() { return 40; }};

console.info(Object.getOwnPropertyDescriptors(test1));
/*
  {
    id: { value: 1, writable: true, enumerable: true, configurable: true },
    age: {
      get: [Function: get age],
      set: undefined,
      enumerable: true,
      configurable: true
    }
  }
*/

 

이 메서드는 주어진 객체의 모든 descriptor 를 반환하는 Object 의 static method 입니다.

descriptor 는 value, writable, get, set, enumerable, configurable 를 가진 레코드입니다.

 

  • value : 속성의 값
  • writable : true 인 경우 속성의 값이 변경 가능한 상태를 의미
  • get : 속성에 대한 getter 역할을 하는 함수, 정의되지 않은 경우엔 undefined
  • set : 속성에 대한 setter 역할을 하는 함수, 정의되지 않은 경우엔 undefined
  • enumerable : true 인 경우 열거 가능한 상태의 속성
  • configurable : true 인 경우 객체의 descriptor 가 변경 및 삭제될 수 있는 상태를 의미

이 메서드는 지금까지 사용해본적은 없네요..

이 외에 새로운 메모리 모델에 대해 소개하고 있는데, 이 부분에 대해선 다른 포스팅에서 다뤄보도록 하겠습니다.

'Backend > Javascript' 카테고리의 다른 글

ES7 (ES2016)  (0) 2022.03.19
ES12 (ES2021)  (0) 2022.03.13
ES11 (ES2020)  (0) 2022.03.05
ES10 (ES2019)  (0) 2022.02.27
ES9 (ES2018)  (0) 2022.02.19