[자바스크립트]자주 사용하는 ES6 문법 총 정리!!
ES6(ECMAScript6)는 무엇인가요?
ECMAScript 2015로도 알려져 있는 ECMAScript 6는 ECMAScript 표준의 가장 최신 버전입니다. ES6는 새로운 언어 기능이 포함된 주요 업데이트이며, 2009년도에 표준화된 ES5 이후로 언어 기능에 대한 첫 업데이트이기도 합니다. 현재 주요 JavaScript 엔진들에서 ES6 기능들을 구현 중에 있습니다.
1. let, const 키워드
- let 변수 선언 키워드와 상수 선언 키워드인 const가 추가되었다. const는 var보다 강력하고 사용되면 다시 변수를 할당할수 없다 .즉, 객체와 함께 사용할 때를 제외하고는 변경불가능한 변수 이다.
- let은 새로운 값을 가질 수도 있고 재할당할 수도 있습니다. 변경 가능한 변수가 생성됩니다.
- let은 const와 동일하게 모두 블럭 범위라는 점입니다. 즉, 변수는 범위 내에서만 사용할 수 있습니다.
2. 템플릿 리터럴
- 더이상 문자열을 연결하기 위해 더하기(+)연산자를 사용할 필요가 없으며 사용법은 백틱(`)으로 가능하다.
- ${} 중괄호 앞에 달러 표시를 통해 자바스크립트 표현식 사용이 가능하다.
1
2
3
4
5
6
|
const myFunc = (name, age) => {
return `안녕 ${name}, 너의 나이는 ${age}살 이다!`;
};
console.log(myFunc1('영희', 22));
// 출력 => 안녕 영희, 너의 나이는 22살 이다!
|
cs |
3.객체 리터럴
- 이전 보다 훨씬 간결해진 코드로 객체를 선언할 수 있다.
- 메소드에 더 이상 콜론(:)이나 function을 붙이지 않아도 된다.
- 함수명이 겹치는 경우에는 한 번만 쓸 수 있다.
1
2
3
4
5
6
7
8
9
10
11
|
const person = {
name: {
firstName,
lastName
},
city,
gender,
sayHello() {
return `Hello, ${firstName} ${lastName} from ${country}!`
},
}
|
cs |
4. 화살표 함수
- 함수 표현식을 화살표 함수로 표현할 수도 있다.
- 화살표 함수가 추가되어 함수를 간결하게 나타낼 수 있게 되어 가독성 및 유지 보수성이 올라갔다.
- 만약 함수의 본문(body)에 return만 있는 경우 화살표 함수는 return과 {}를 생략할 수 있다. 단, 같이 생략해야한다.
1
2
3
4
5
6
7
8
9
10
11
|
// ES6 화살표 함수
const myFun = (name) => {
return `안녕 ${name}`;
}
console.log(myFun('민수')); // 출력 => 안녕 영희
// 또는 화살표를 사용하거나 'return' 키워드를 사용하지 않아도 됩니다
const myFun = (name) => `안녕 ${name}`;
console.log(myFun('민수')); // 출력 => 안녕 영희
|
cs |
또한 map 과 filter reduce 등 함수와 함께 사용할 수 있다.
5. 비구조화 할당(구조분해 할당)
- 객체나 배열에서 사용하며, 값을 해체한 후, 개별 값을 변수에 새로 할당하는 과정을 말한다.
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
26
27
28
29
30
31
32
33
34
|
const person = {
name: {
firstName: 'Youngkyun',
lastName: 'Kim'
},
country: 'South Korea',
gender: 'Male'
}
const counts = [1, 2, 3]
// 기존의 객체, 배열 할당 방식
const firstName = person.name.firstName;
const lastName = person.name.lastName;
const gender = person.gender;
console.log(`${firstName} ${lastName} is a ${gender}`);
const one = counts[0]
const two = counts[1]
const three = counts[2]
console.log(`one + two + three = ${one + two + three}`);
// 비구조화 객체, 배열 할당 문법
const { name: { firstName, lastName }, gender } = person;
console.log(`${firstName} ${lastName} is a ${gender}`);
const [one, two, three] = counts;
console.log(`one + two + three = ${one + two + three}`);
// 비구조화 문법으로 함수 인자에도 적용 가능
const sayHello = ({ name: { firstName, lastName }, country }) => {
return `Hello, ${firstName} ${lastName} from ${country}!`
}
console.log(sayHello(person)); // Hello, Youngkyun Kim from South Korea!
|
cs |
6. Promise
- 자바스크립트에서 비동기 처리를 기존에는 콜백 함수를 사용한, 콜백 패턴을 사용하였다.
- 결과론적으로, 콜백헬을 발생시켰고 이를 해결하기 위해 프로미스가 도입되었고, 프로미스 후속처리 메소드를 이용해 에러 처리를 효과적으로 할 수 있게 되었다.
1
2
3
4
5
6
7
8
|
const myPromise = () => {
return new Promise((resolve, reject) => {
resolve('안녕하세요 Promise가 성공적으로 실행했습니다');
});
};
cosole.log(myPromise());
// Promise {<resolved>: "안녕하세요 Promise가 성공적으로 실행했습니다"}
|
cs |
예를 들어 API에서 데이터를 가져오거나 실행하는데 시간이 걸리는 함수를 가지고 있을 때 사용할 수 있습니다.
관련 포스팅으로 이동 👉
async 와 await , 유용한 Promise APIs
7. Class
- 자바스크립트는 프로토타입 기반의 객체 지향 언어이다.코드를 더욱 안전하게 캡슐화할 수 있습니다.
- 클래스 기반의 객체 지향 프로그래밍도 할 수 있게 Class 키워드를 도입하였다..
1
2
3
4
5
6
7
8
9
10
11
|
class myClass {
constructor(name, age) {
this.name = name;
this.age = age;
}
}
const user = new myClass('영희', 22);
console.log(user.name); // 영희
console.log(user.age); // 22
|
cs |
이제 new 키워드를 사용하여 class 메서드와 속성에 액세스할 수 있습니다.
관련 포스팅으로 이동 👉
[자바스크립트]클래스(class) [2] -Getter & Setter
8. String Method (includes, startsWith, endsWith)
- 포함되어있는지(includes), 시작하는지(startsWith), 끝나는지(endsWith)
- boolean 타입을 return 해준다.
9. Multi-line String
- 문자열이 라인을 넘어가게 되면 ‘\n’ 과 덧셈 연산자를 사용했어야했다.
- 백틱을 사용하게 되면서 여러줄의 문자열 관리도 편해졌다.
10. Default Parameter
- 기존에는 함수의 매개변수에 초기화를 하려면 내부 작업이 필요했으나, ES6 에서는 필요 없어졌다.
1
2
3
4
5
6
|
const myFunc = (name, age = 22) => {
return `안녕 ${name} 너의 나이는 ${age}살 이니?`;
};
console.log(myFunc1('영희'));
// 출력 => 안녕 영희 너의 나이는 22살 이니?
|
cs |
- 보시다시피 함수는 두 번째 매개 변수를 놓쳤더라도 값을 반환합니다. 이제 기본 파라미터를 사용하여 오류를 미리 처리할 수 있습니다.
- 매개변수에 인자값을 넘기지 않는다면(할당하지 않는다면) undefined이다
- default 파라미터엔 함수입력도 가능합니다.
function 임시함수(){
return 10
}
function 더하기 (a, b = 임시함수() ){
console.log(a + b)
}
더하기(3);
위 코드는 실행하면
13이 출력됩니다.
b자리에 파라미터가 들어오지 않으면 임시함수()를 실행한 값을 b 파라미터에 할당해줍니다.
임시함수()를 실행하면 그 자리에 10이 남습니다.
(return 10이 그 뜻입니다)
그래서 console.log(3 + 10)을 실행해줍니다.
default 파라미터엔 함수입력도 가능합니다.
10. Rest 파라미터 & Spread operator
spread operator 는 iterable 객체에 ...을 붙여서 요소 하나 하나를 손쉽게 전개시켜 주는 역할d입니다.
...을 어디에 어떻게 사용하냐에 따라, Spread Syntax가 될 수도 있고, Rest Syntax가 될 수도 있습니다.
요소를 하나씩 모두 전개시킬 때는 Spread의 역할을, 그리고 나머지 요소를 묶을 때는 Rest의 역할이라고 생각하면 편합니다.
먼저 Rest parameter는 배열의 인수를 가져오고 새 배열을 반환하는데 사용됩니다.
const arr = ['영희', 20, '열성적인 자바스크립트', '안녕', '지수', '어떻게 지내니?'];
// 비구조화를 이용한 값을 얻기
const [ val1, val2, val3, ...rest ] = arr;
const Func = (restOfArr) => {
return restOfArr.filter((item) => {return item}).join(" ");
};
console.log(Func(rest)); // 안녕 지수 어떻게 지내니?
Spread operator는 Rest parameter와 구문이 동일하지만 Spread operator는 인수뿐만 아니라 배열 자체를 가집니다. for 반복문이나 다른 메서드를 사용하는 대신 Spread operator를 사용하여 배열의 값을 가져올 수 있습니다.
const arr = ['영희', 20, '열성적인 자바스크립트', '안녕', '지수', '어떻게 지내니?'];
const Func = (...anArray) => {
return anArray;
};
console.log(Func(arr));
// 출력 => ["영희", 20, "열성적인 자바스크립트", "안녕", "지수", "어떻게 지내니?"]
관련 포스팅으로 이동 👉[자바스크립트]Rest 파라미터 & Spread operator
12.Multi-line String
- 문자열이 라인을 넘어가게 되면 ‘\n’ 과 덧셈 연산자를 사용했어야했다.
- 백틱을 사용하게 되면서 여러줄의 문자열 관리도 편해졌다.
// ES5
var str = 'asdhasfhfsahsfhfshasfhsfahsfahsfahasfh.\n' +
'mxmxmxmxmxmxmxmmxmxmxmxmxmmxmxmxmxmxm.\n'
// ES6
let str = `asdhasfhfsahsfhfshasfhsfahsfahsfahasfh
mxmxmxmxmxmxmxmmxmxmxmxmxmmxmxmxmxmxm`;
13.Import and export(가져오기 및 내보내기)
export를 사용하면 다른 JavaScript 구성 요소에 사용할 모듈을 내보낼 수 있습니다. 우리는 그 모듈을 우리의 컴포넌트에 사용하기 위해 가져오기 import를 사용합니다.
예를 들어, 두 개의 파일이 있습니다. 첫 번째 파일은 detailComponent.js이고 두 번째 파일은 homeComponent.js입니다.
detailComponent.js에서는 detail 함수를 내보낼 예정입니다.
// ES6
export default function detail(name, age) {
return `안녕 ${name}, 너의 나이는 ${age}살 이다!`;
}
그리고 homeComponent.js에서 이 기능을 사용하려면 import만 사용합니다.
import detail from './detailComponent';
console.log(detail('영희', 20));
// 출력 => 안녕 영희, 너의 나이는 20살 이다!
둘 이상의 모듈을 가져오려는 경우, 중괄호에 넣기만 하면 됩니다.
import { detail, userProfile, getPosts } from './detailComponent';
console.log(detail('영희', 20));
console.log(userProfile);
console.log(getPosts);
14. Module
- 모듈이란, 재사용하기 위한 코드 조각을 뜻하며, 세부사항은 캡슐화 시키고, API 부분만 외부에 노출시킨 코드이다.
- type에 module을 추가시키고 확장자를 mjs로 변경하여 사용한다.
- 모듈은 모듈 스코프를 가지며, import와 export 키워드를 이용하여 사용한다.
<script type="module" src="lib.mjs"></script>