Posts es6에서 도입된 문법
Post
Cancel

es6에서 도입된 문법

let, const 키워드를 통한 변수선언

기존 자바스크립트에서는 var 키워드로만 변수선언이 가능했다. 하지만, let const 키워드를 추가하여 보다 예측가능한 코드를 작성할 수 있게 됐다.

1
2
3
4
5
6
7
8
9
10
11
12
13
// es6 이전.
// var는 재선언 가능
var a = "This is string";
var a = 1234;

// ES6 이후
// let은 재선언 불가능
let b = "This is string";
b = 1234;

// const는 재할당 불가능
const c = "This is string";
c = 1234; // <-- 에러 발생

const는 상수 키워드로 재할당, 재선언이 불가능하다. 변경할 수 없다로 이해하기 쉽지만, letvar는 헷갈릴 수 있다. 차이는 다음과 같다.

 varlet
재선언가능불가능
재할당가능가능
scopefunction-scopeblock-scope
호이스팅일어남안일어남
(정확히는 일어나지만 할당문을 만나기 전까지는 사용불가능)


템플릿리터럴

문자열 내에 변수사용을 쉽게 만들어주는 문법으로 다음과 같이 사용한다.

1
2
3
4
5
6
7
const name = "user-1";
const count = 324;

// es6 이전
var str1 = name + " has pushed button " + count + " times."; 
// es6 이후
const str2 = `${name} has pushed button ${count} times.`;


화살표함수

함수 표현식을 화살표함수로 표현하여 간결하게 함수를 작성할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
// es6 이전
function func(a, b) {
  return a + b;
}

// es6 이후
const func = (a, b) => {
  return a + b;
}
// return 생략
const func = (a, b) => a + b;


구조분해할당

객체, 배열의 구조를 분해하여, 새로운 변수에 할당하는 과정이다. 객체/배열에서 값을 꺼낼때 가독성 좋게 가져올 수 있도록 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// es6 이전 (배열)
var arr = [1, 2, 3];
console.log(arr[0], arr[1], arr[2]);
// es6 이후 (배열)
const [first, second, third] = arr;
console.log(first, second, third);

// es6 이전 (객체)
var obj = {
  name : "user-1",
  count: 123
}
console.log(obj.name, obj.count);

// es6 이후 (객체)
const {name, count} = obj;
console.log(name, count);


Promise

ES6 이전에 자바스크립트의 비동기처리는 콜백함수로 이루어졌다. 하지만 비동기 함수가 많아지면서 콜백 지옥이 일어나기도 했다.

1
2
3
4
5
6
7
8
9
10
11
12
13
// es6 이전
function callbackHell(callback) {
  setTimeout(function() {
    ...	// do something
   	setTimeout(function() {
      ... // do something
      setTimeout(function() {
        ... // do something
        callback();
      }, 1000)
    }, 1000)
  }, 1000)
}

이러한 콜백 지옥을 개션하기 위한 문법으로 다음과 같이 코드가 변경된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function callbackFree(callback) {
  const promise1 =  new Promise((resolve, reject) => {
    setTimeout(() => {
      ... // do something
      resolve();
    }, 1000)
  })
  
  const promise2 = promise1.then(() => {
   return new Promise((resolve, reject) => {
       setTimeout(() => {
        ... // do something
        resolve();
      }, 1000)
   })
  });
  
  promise2.then(() => {
    setTimeout(() => {
	    ... // do something
      callback();
    }, 1000)
  })
}


Class

자바스크립트에서 객체 지향 프로그래밍이 가능하도록 Class 키워드가 도입되었다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Polygon {
  constructor(height, width) {
    this.name = 'Polygon';
    this.height = height;
    this.width = width;
  }
}

class Square extends Polygon {
  constructor(length) {
    super(length, length);
    this.name = 'Square';
  }
}


모듈 시스템

자바스크립트에서 코드를 분리하여 관리할 수 있게하여 재사용성과 생산성을 높이기위해 모듈 시스템이 도입되었다.

  • script 태그 사용 예시

    1
    
    <script type="module" src="lib.mjs"></script>
    
  • es6에서 사용 에시

    1
    2
    3
    4
    5
    
    import compute from "commons/compute";
      
    const result = compute(1,2);
      
    export result;
    
  • commonsJs에서 사용 예시

    1
    2
    3
    4
    5
    
    const compute = require("commons/compute");
      
    const result = compute(1,2);
      
    module.exports = { result };
    

require와 import의 차이점

  • require/exports
  • 구형브라우저나, 브라우저 밖에서 사용하는 CommonJS 문법
  • 파일의 어디서나 호출 가능

  • import/export
  • ES6에서 도입된 문법
  • 파일의 시작부분에서만 실행가능(import 전용 비동기 문법으로 중간에 불러올 수도 있다.)
  • 필요한 부분만 선택하여 로드 가능. 또한 require보다 성능이 우수함

  • 하나의 파일에서 두 키워드를 동시에 사용할 순 없


출처

  • https://hanamon.kr/javascript-es6-%EB%AC%B8%EB%B2%95/
This post is licensed under CC BY 4.0 by the author.

영상이 자동재생되지 않는 문제

IOS 16.5에서 video가 크기 변경이 적용되지 않는 이슈

Comments powered by Disqus.