CHAPTER 1. A gentle introduction to ECMASCRIPT 6
Transpilers
ES6๋ ๋ง์ง๋ง ๋จ๊ณ์ ๋๋ฌํด์๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ธ์์ ์์ ํ ์ง์๋์ง ์๋๋ค. ๊ทธ๋ฆฌ๊ณ , ๋ช๋ช ๋ธ๋ผ์ฐ์ ธ๋ค์ ์ด๋ฐ ํธ๋ ๋์ ๋ค์ณ์ง ๊ฒ์ด๋ค. (๋ง์ฝ ๋ง์ดํฌ๋ก์ํํธ๊ฐ ์ฃ์ง์์๋ ์ ๋์ํ๋ค ํ๋๋ผ๋). ๋ง์ฝ ๋ด๊ฐ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ ๋ํด ๊ฑฑ์ ํ๋ค๊ณ ํ๋ฉด ๋ชจ๋ ๋ธ๋ผ์ฐ์ ธ์์ ์ฌ์ฉ๋ ์ ์๋ ๊ฒ์ ๋ฌด์์ธ๊ฐ? ๋ผ๋ ์๊ฐ์ ํ ์ง๋ ๋ชจ๋ฅธ๋ค. ๊ทธ๋ฆฌ๊ณ ๋น์ ์ด ํ๋ ์๊ฐ์ด ๋ง๋ค. ๋๋ฌธ์ ์ค๋๋ ๋ธ๋ผ์ฐ์ ธ๋ ๋ฌด์ํ๋ ์ฑ ๋ค์ด ๋ง๋ค. ๊ทธ๋ฌ๋, ES 6๋ฅผ ์ฌ์ฉํ๋ ค๋ JS ๊ฐ๋ฐ์๋ค์ ES6 ์ฑ์ผ๋ก ๋ง๋ค๊ธฐ๋ฅผ ์ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ปค๋ฎค๋ํฐ๋ ๊ทธ์ ๋ํ ํด๋ต์ ๋ฐ๊ฒฌํ์๋ค. : a transpiler.
Tanspiler๋ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ธ์์ ๋์ํ ์ ์๋๋ก ES6์ฝ๋๋ฅผ ์ทจํฉํ์ฌ ES5 ์ฝ๋๋ก ๋ณํํด์ค๋ค. ๊ทธ๊ฒ์ ์ฌ์ง์ด ๋ธ๋ผ์ฐ์ ธ์์ ES6 ์์ค๋ฅผ ์ง์ ์ ์ผ๋ก ๋๋ฒ๊ทธ๋ฅผ ํ์ฉํด์ฃผ๋ ์์ค๋งต ํ์ผ๋ ๋ณํํด์ค๋ค. ์ด ์์ ์์, ES6 ์ฝ๋๋ฅผ ๋ณํํด์ฃผ๋ ๋ ๊ฐ์ง ๋์์ด ์๋ค.
Traceur, a Google project
Babeljs, ์ ์ ๊ฐ๋ฐ์๋ก(๊ธ์ ์์ฑํ ๋น์์ 17์ธ ์์)๋ถํฐ ์์๋ ํ๋ก์ ํธ๋ก ๋ค์ํ ์์๋ฅผ ์ ๊ณตํ๋ค.
๊ฐ๊ฐ์ ์ฅ์ ๊ณผ ๋จ์ ์ ๊ฐ์ง๊ณ ์๋ค. ์๋ฅผ ๋ค์ด, Babeljs๋ Traceur์ ๋นํด ๊ฐ๋ ์ฑ ์๋ ์ฝ๋๋ฅผ ์์ฑํ๋ค. ๊ทธ๋ฌ๋ Traceur๋ ๊ตฌ๊ธ ํ๋ก์ ํธ๋ก์จ Angular์ ํจ๊ป ์ฌ์ฉํ์์ ๊ฒฝ์ฐ์ ๋์ฑ ์ฑ๋ฅ์ด ์ฐ์ํ๋ค. Angular 2 ์์ค์ฝ๋๋ TypeScript๋ก ๋ฐ๋๊ธฐ ์ด์ ์๋ Traceur์ ์ฌ์ฉํ์ฌ ์์ฒด์ ์ผ๋ก ๋ณํํ์๋ค.
TypeScript๋ Microsoft์์ ๊ฐ๋ฐ๋ ์คํ ์์ค ์ธ์ด์ด๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์ ํ์ฅ๋ ๊ธฐ๋ฅ์ด๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ ๊ณง ๊ทธ ์ธ๋ถ์ ์ผ๋ก ํ์ ํด๋ณผ ๊ฒ์ด๋ค. ์์งํ Babel์ Traceur๋ณด๋ค ๋์ฑ ์ฅ์ ์ด ๋ง๋ค. ๊ทธ๋์ ๋๋ Babel์ ์ฌ์ฉํ๋ผ๊ณ ์ถฉ๊ณ ํ๋ค. Babel์ ์ฌ์ค์ ํ์ค์ผ๋ก ๋น ๋ฅด๊ฒ ํ์ฐ ๋๊ณ ์๋ค. ๊ทธ๋์ ๋ง์ฝ ๋๊ฐ ES6๋ฅผ ์ฌ์ฉํ๊ธฐ๋ฅผ ์ํ๋ค๋ฉด, ๋๋ ๋์ ํ๋ก์ ํธ์ ์ ์ฉํ๊ธธ ์ํ๋ค๋ฉด, transpilers๋ฅผ ์ดํด๋ณด๊ณ ๋น๋ ๊ณผ์ ์ค์ ํ๋๋ก ์ถ๊ฐํ๋๋ก ํด๋ผ.
์ด๊ฒ์ ๋์ ES6 ์์ค ํ์ผ์ ๋์ผํ ES5์ฝ๋๋ก ๋ณํํด์ค๊ฒ์ด๋ค. ์ด๊ฒ์ ๋งค์ฐ ์ ๋์ํ์ง๋ง ์๋ก์ด ๋ช ๊ฐ์ง ๊ธฐ๋ฅ๋ค์ ES5๋ก ๋ณํํ๋๊ฒ ์ด๋ ต๊ฑฐ๋ ๋ถ๊ฐ๋ฅํ ์๋ ์๋ค. ๊ทธ๋ฌ๋, ํ์ฌ ๊ด์ ์์๋ ์๋ฌด ๊ฑฑ์ ์์ด ์ฌ์ฉํ๊ธฐ์ ์ถฉ๋ถํ๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ฐ๋ฆฌ๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ ์์์ ํ ์ ์๋ ์ด๋ฐ ์๋ก์ด ๊ฒ๋ค์ ์ดํด๋ณด๋๋ก ํด๋ผ.
Let
๋ง์ฝ ๋น์ ์ด JS๋ฅผ ์ฌ์ฉํด๋ณธ์ ์ด ์๋ค๋ฉด, var ์ ์ธ์ ์์์๋ผ๋ ๊ฒ์ ์๊ณ ์๋ค. ๋ค์ํ ๋ง์ ์ธ์ด์์, ๋ณ์๋ ์ ์ธํ๋ ๊ณณ์์ ์ ์๋์ด์ง๋ค. ๊ทธ๋ฌ๋ JS ์ปจ์ ์์๋ ๋น์ ์ด ๋์ค์ ํธ์ถ์ ํ์๋๋ผ๋ ๋ณ์๋ฅผ ์ ์ธํ ํจ์์ ์ต ์์์์ ์ ์ธ๋๋ โhoisting(๋์ด์ฌ๋ฆฌ๊ธฐ)โ์ผ๋ก ๋ถ๋ฆฌ์ด์ง๋ค. ๋ง์ฝ ๋น์ ์ด if ์์ญ์์์ name์ ํธ์ถํ์๋ค.
function getPonyFullName(pony) {
if(pony.isChampion){
var name = 'Champion ' + pony.name;
}
return pony.name;
}
์ด๊ฒ์ ํจ์์ ์์์ ์ ์ธํ ๊ฒ๊ณผ ๋์ผํ๋ค.
function getPonyFullName(pony) {
var name;
if(pony.isChampion){
name = 'Champion ' + pony.name;
return name;
}
// name is still accessible here
return pony.name;
}
ES6๋ ๋ณ์ ์ ์ธ์ ๋ํด์ ๋น์ ์ด ๊ธฐ๋ํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ โletโ ์ด๋ผ๋ ์๋ก์ด ๋ฐฉ๋ฒ์ ์๊ฐํ๊ณ ์๋ค
function getPonyFullName(pony) {
if(pony.isChampion){
let name = 'Champion ' + pony.name;
return name;
}
// name is still accessible here
return pony.name;
}
name ๋ณ์๋ ์ง๊ธ์ ์์ ์ ์์ญ์์์ ์ ํ๋์ด ์๋ค. Let์ ์ง์์ ์ธ ์ฌ์ฉํ๋ ์์ญ์์์ var๋ฅผ ๋์ฒดํ๊ธฐ ์ํด ์๊ฐ๋์๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๋๋ ์ค๋๋ var ๋จ์ด๋ฅผ ์ ๊ฑฐํ๊ณ let์ ๋์ฒดํ์ฌ ์ฌ์ฉํ ์ ์๋ค. ๋ ์ข์ ๊ฒ์ ๋ง์ฝ ๋๊ฐ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด ๋์ ์ฝ๋์์ ์๋ชป๋ ์ด๋ ํ ์ ์ ์ง์ ๋นํ ์ ์๋ค.
Constants
์๋ก์ด ํค์๋ & ๋ณ์๋ค์ ๋ํ ์ฃผ์ ๋ก์จ, ๋ ํ๋์ ํฅ๋ฏธ๋ก์ด ๊ฒ์ด ์๋ค. ES6๋ constants๋ฅผ ์ ์ธํ๊ธฐ ์ํด const๋ฅผ ์๊ฐํ๊ณ ์๋ค. ๋น์ ์ด const๋ฅผ ์ฌ์ฉํ์ฌ ๋ณ์๋ฅผ ์ฌ์ฉํ๊ฒ๋๋ค๋ฉด, ๊ทธ๊ฒ์ ์ด๊ธฐํ๋์ด์ง ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๋น์ ์ ํ์ ์ด๋ ํ ๊ฐ๋ ํ ๋นํ์ง ๋ชปํ ๊ฒ์ด๋ค.
const poniesInRace = 6;
poniesInRace = 7;
Let์ ์ฌ์ฉํ์ฌ ๋ณ์๋ฅผ ์ ์ธํ๋ค๋ฉด, constants๋ ๋ธ๋ก ๋จ๊ณ์์ ์ค์ง ์ ์๋์ด ์ง๊ฒ์ด๊ณ ์์์์ ์ ์ธ๋์ด ์์ง ์์ ๊ฒ์ด๋ค. ๋น์ ์ด ๋๋๋งํ ์ฌ์ํ ํ๊ฐ์ง๋ ๋น์ ์ object์ ํจ๊ป constants๋ฅผ ์ด๊ธฐํํ ์ ์๊ณ , ์ถํ์๋ object๋ฅผ ์์ ํ ์๋ ์๋ค.
const PONY = {};
PONY.color = 'blue'; //works
๊ทธ๋ฌ๋ ๋น์ ์ ๋ค๋ฅธ object๋ฅผ ํ ๋นํ ์๋ ์๋ค.
const PONY = {};
PONY = {color = 'blue'}; //SyntaxError
๋ฐฐ์ด๋ค๋ ๊ฐ์ ์ด์ ์ด๋ค.
const PONIES = [];
PONIES.push({color : 'blue'}); //works
PONIES = []; //SyntaxError
Creating Objects
์๋ก์ด ํค์๋๋ ์๋์ง๋ง ES6์ฝ๋๋ฅผ ์ฝ๊ณ ์๋ค๋ฉด ๋น์ ์ ์์ ์ ์ฌ๋ก์ก์ ๊ฒ์ด๋ค. ์ง๊ธ์ ๋น์ ์ด ๋ณ์๋ก์จ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋์ด์ง ๋งํผ Object ์์๋ฅผ ์์ฑ ํ๊ธฐ๋ฅผ ์ํ ๊ฒฝ์ฐ์ object๋ฅผ ์์ฑํ๋ ๊ฐ๋ฒผ์ด ์์ฝ ์ ๋ฆฌ์ด๋ค.
function createPony() {
const name = 'Rainbow Dash';
const color = 'blue';
return { name: name, color: color };
}
๋์ฑ ๊ฐ๋จํ๊ฒ ์ ์ํ ์ ์๋ค.
function createPony() {
const name = 'Rainbow Dash';
const color = 'blue';
return { name, color };
}
css ์ค์ฒฉ
๋ฏธ๋์ด ์ฟผ๋ฆฌ์ ๊ฐ์ด ๊ท์น ์ธํธ ๋ด๋ถ์ ๋ค์ ์ ์ธ๋๋ ๊ตฌ์กฐ์์๋ 1๋ ๋ฒจ ์ฉ ์ถ๊ฐํ์ฌ ๋ค์ฌ์ฐ๊ธฐ ํฉ๋๋ค.
@media screen and (min-width: 750px) {
html, body { font-size: 19px; }
.measure {
margin: 5rem;
padding: 0 3rem;
}
}
Destructuring assignment
์ด๊ฒ์ object๋ ๋ฐฐ์ด๋ค๋ก๋ถํฐ ๋ณ์๋ฅผ ํ ๋นํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๊ฐ๋จํ ์์ฝ ์ ๋ฆฌ์ด๋ค.
In ES5:
function httpOptions = { timeout: 2000, isCache: true };
// later
var httpTimeout = httpOptions.timeout;
var httpCache = httpOptions.isCache;
Now, in ES6, you can do:
const httpOptions = { timeout: 2000, isCache: true };
// later
const{ timeout: httpTimeout, isCache: httpCache} = httpOptions;
๊ทธ๋ฆฌ๊ณ ๋น์ ์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ ๊ฒ์ด๋ค. ์ด๊ฒ์ Object ๋ด๋ถ์ ์์๋ฅผ ํค ๊ฐ์ผ๋ก ์ฌ์ฉํ ๊ฒฝ์ฐ์๋ ๋ณ์๋ฅผ ํ ๋นํ ๊ฒฝ์ฐ์ ์ฝ๊ฐ์ ๋ถ์๊ฐ์ ์ค ์ ์๋ค. ๊ทธ๋ฌ๋ ๋น์ ์ด ๊ฐ๋จํ๊ฒ ์์ฑํ ์์๋ฅผ ๊ฐ์ ์ด๋ฆ์ ๋ณ์๋ก ์ ์ธํ๊ธธ ์ํ ๊ฒฝ์ฐ์ ์ด๊ฒ์ ๊ต์ฅํ๋ค.
const httpOptions = { timeout: 2000, isCache: true };
// later
const{ timeout, isCache} = httpOptions;
// you now have a variable named 'timeout'
// and one named 'isCache' with correct values
๊ต์ฅํ ๊ฒ์ ๋ด๋ถ์ object๋ฅผ ํฌํจํ ๊ฒ๋ ๋ํ ์ ์์ ์ผ๋ก ๋์ํ๋ค.
const httpOptions = { timeout: 2000, isCache: true };
// later
const{ timeout, isCache} = httpOptions;
// you now have a variable named 'chortTimeout' with value 1000
// and a variable named 'mediumTimeout' with value 2000
๊ทธ๋ฆฌ๊ณ ์ด๋ฌํ ๋ฐฐ์ด๋ค๋ ๊ฐ๋ฅํ๋ค.
๋ฌผ๋ก ๋ฐฐ์ด ์์ ๋ฐฐ์ด ๋ํ object์์ ๋ฐฐ์ด์ด ์๋ ๊ฒ ๋ฑ๋ฑ ๋ ์ ์์ ์ผ๋ก ๋์ํ๋ค. ํ๊ฐ์ง ํฅ๋ฏธ๋ก์ด ๊ฒ์ ๋ณ์๋ค์ ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ๋๋ ค์ค ์ ์๋ค๋ ๊ฒ์ด๋ค. race์์ ์์น์ pony๋ฅผ ๋๋ ค์ฃผ๋ randomPonyInRace ํจ์๋ฅผ ์์ํด๋ณด์๋ผ.
function randomPonyInRace(){
const pony = { name: 'Rainbow Dash' };
const position = 2;
// ...
return { pony, position };
}
const { position, pony } = randomPonyInRace();
๋ณ์์ ์์น์ ํด๋นํ๋ ํจ์์ ์ํด ๋๋ ค๋ฐ๋ ์์น๋ฅผ ํ ๋นํด์ฃผ๋ ๊ธฐ๋ฅ์ ์๋กญ๊ฒ ์ฌ๋ผ์ง ๊ธฐ๋ฅ์ด๋ค. ๋ง์ฝ ๋๊ฐ ์์น์ ๋ํด ์๊ดํ์ง ์๋๋ค๋ฉด ๋๋ ์์ฑํ ์ ์๋ค.
function randomPonyInRace(){
const pony = { name: 'Rainbow Dash' };
const position = 2;
// ...
return { pony, position };
}
const { pony } = randomPonyInRace();
๊ทธ๋ฆฌ๊ณ ๋๋ ์ค์ง pony๋ฅผ ๊ฐ์ง ๊ฒ์ด๋ค.
Default parameters and values
์๋ฐ์คํฌ๋ฆฝํธ์ ํน์ง ์ค ํ๋๋ ๊ฐ๋ฐ์๊ฐ ํ๋ผ๋ฏธํฐ์ ๊ฐ์๋ฅผ ์๋ฌด๋ ๊ฒ๋ ์ฌ์ฉํ์ฌ ํจ์๋ฅผ ์คํํ์ฌ๋ ํ์ฉํ๋ค๋ ๊ฒ์ด์๋ค :
๋ง์ฝ ๋น์ ์ด ํ๋ผ๋ฏธํฐ์ ๊ฐ์๋ณด๋ค ๋ ๋ง์ ํ๋ผ๋ฏธํฐ๋ฅผ ๋๊ธด๋ค๋ฉด, ๋๋จธ์ง ํ๋ผ๋ฏธํฐ ๋ค์ ๋ฌด์๋์ด ์ง ๊ฒ์ด๋ค. ( ๋น์ ์ ํน๋ณํ ๋ณ์๋ค๊ณผ ํจ๊ป ์ฌ์ฉํ ์ ์์ ๊ฒ์ด๋ค. )
๋ง์ฝ ๋น์ ์ด ํ๋ผ๋ฏธํฐ์ ๊ฐ์๋ณด๋ค ๋ ์ ์ ํ๋ผ๋ฏธํฐ๋ฅผ ๋๊ธด๋ค๋ฉด, ๋ถ์กฑํ ํ๋ผ๋ฏธํฐ๋ค์ undefined๋ก ํ ๋น๋ ๊ฒ์ด๋ค.
๋ ๋ฒ์งธ ๊ฒฝ์ฐ๋ ์ฐ๋ฆฌ์๊ฒ ๊ฐ์ฅ ๊ด๋ จ ์๋ ๊ฒฝ์ฐ์ด๋ค. ํ๋ผ๋ฏธํฐ๊ฐ ์ ํ์ ์ผ ๊ฒฝ์ฐ์ ์ฐ๋ฆฌ๋ ์ฃผ๋ก ์ ์ ํ๋ผ๋ฏธํฐ๋ค์ ๋๊ธด๋ค.
function getPonies(size, page){
size = size || 10;
page = page || 1;
// ...
server.get(size, page);
}
์ ํ์ ์ธ ํ๋ผ๋ฏธํฐ๋ค์ ์ฃผ๋ก ๊ธฐ๋ณธ ๊ฐ๋ค์ ๊ฐ์ง๊ณ ์๋ค. OR ๊ธฐํธ๋ ๋ง์ฝ ์ผ์ชฝ์ ๋ณ์๊ฐ undefined์ผ ๊ฒฝ์ฐ์ ๊ธฐํธ์ ์ค๋ฅธ์ชฝ ๋ณ์๋ฅผ ๋๊ธธ ๊ฒ์ด๋ค. ๋ง์ฝ ํ๋ผ๋ฏธํฐ๊ฐ ์ ํํ๊ฒ ๊ณต๊ธ๋์ง ์๋ ๋ค๋ฉด ํด๋น ๊ฒฝ์ฐ์๋ 0,false,โโ์ด ๋ ๊ฒ์ด๋ค. ์ด ์์์๋ฅผ ์ฌ์ฉํ์ฌ getPoines ํจ์๋ ๋ค์๊ณผ ๊ฐ์ด ํธ์ถ๋ ๊ฒ์ด๋ค.
getPonies(20, 2);
getPonies(); // same as getPonies(10, 1);
getPonies(15); // same as getPonies(15, 1);
์ด๊ฒ์ ์ ํํ๊ฒ ๋์ํ๊ฒ ์ง๋ง ํจ์ body๋ฅผ ์ฝ์ง ์์ ์ํ์์ ๊ธฐ๋ณธ ๊ฐ์ ๊ฐ์ง๊ณ ์๋ ์ ํ์ ์ธ ๋ณ์๋ค์ ๋ช ๋ฐฑํ์ง๋ ์์ ๊ฒ์ด๋ค. ES6๋ ๊ธฐ๋ณธ ํ๋ผ๋ฏธํฐ๋ฅผ ๊ฐ์ง ์ ์๋ ๋ ์ ์ฉํ ๋ฐฉ๋ฒ์ ์๊ฐํ๋ค.
function getPonies(size = 10, page = 1){
// ...
server.get(size, page);
}
๋ง์ฝ ์๋ฒฝํ ์ ์๋์ง ์์๋ค๋ฉด size ํ๋ผ๋ฏธํฐ๋ 10์ด ๋ ๊ฒ์ด๊ณ Page parameter๋ 1์ด ๋ ๊ฒ์ด๋ค.
NOTE : ์์ ์ฐจ์ด๊ฐ ์๋ค. ๋ง์ฝ 0 ๋๋ โโ ๊ฐ์ด ์ ์ํ ๊ฐ๋ค์ด๋ผ๋ฉด ์ด๊ฒ์ ํ๋์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก size = size || 10 ์ผ๋ก ์์ฑ๋์ด ์ง์๋ฏ์ด ๋ณ๊ฒฝ๋ ๊ฒ์ด๋ค. ์ด๊ฒ์ size = size === undefined ? 10 : size; ๋ก ์ ์๋ ๊ฒ๊ณผ ๊ฐ๋ค.
๊ธฐ๋ณธ ๊ฐ์ ํจ์ ์คํ์ด ๋ ์๋ ์๋ค.
๋๋ ๋ค๋ฅธ ๋ณ์๋ค, ์ ์ญ ๋ณ์๋ค, ๋๋ ํจ์์ ๋ค๋ฅธ ํ๋ผ๋ฏธํฐ๋ค
function getPonies(size = defaultSize(), page = size - 1){
// if page is not provided, it will be set to the value
// of the size parameter minus one.
// ...
server.get(size, page);
}
๋ง์ฝ ๋น์ ์ด ์ค๋ฅธ์ชฝ ํ๋ผ๋ฏธํฐ์ ์ ๊ทผ ํ๊ธฐ๋ฅผ ์ํ๋ค๋ฉด, ํจ์์ ํ๋ผ๋ฏธํฐ๋ ํญ์ undefined ์ผ๊ฒ์ด๋ค.
function getPonies(size = page, page = 1){
// size will always be undefined, as the page parameter is on its right
server.get(size, page);
}
ํ๋ผ๋ฏธํฐ์ ๋ํ ์๋ฆฌ๋ ๋ณ์๋ค์ ์ ์ฉ๋ ์ ์๋ค. ๋ง์ฝ ๊ฐ์๋ ํ ๋น์ ์ฌ์ฉํ๋ค๋ฉด
const { timeout = 1000 } = httpOptions;
// you now have a variable named 'timeout'
// with the value of 'httpOptions.timeout' if it exists
// or 1000 if not
Rest Operator
ES6๋ ํจ์๋ด์์ ๋ณ์ ์ ์ธํ๋ ์๋ก์ด ๋ฐฉ์์ ์๊ฐํ๋ค. ์ด์ ๋ถ๋ถ์์๋ ์ธ๊ธํ์๋ฏ์ด, ๋น์ ์ ํจ์์ ๊ทธ ์ธ์ ํ๋ผ๋ฏธํฐ๋ฅผ ๋๊ธธ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ํน๋ณํ ๋ณ์๋ค์ ์ฌ์ฉํ ๊ฒ๋ค์ ์ป์ ์ ์๋ค.
function addPonies(ponies){
for (var i=0; i<arguments.length; i++){
poniesInRace.push(arguments[i]);
}
}
addPonies('Rainbow Dash', 'Pinkie Pie');
๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๊ฐ ๋์์ง๋ ์๊ณ ๋ช ๋ฐฑํ์ง๋ ์๋๋ค๋ ๊ฒ์ ๋์ํ๋ค๊ณ ์๊ฐํ๋ค. Poines ํ๋ผ๋ฏธํฐ๋ฅผ ์ ๋ ์ฌ์ฉ๋์ง ์์๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ๋ ์ด๋ป๊ฒ ๋ช๋ช์ ponies๋ฅผ ๋๊ฒจ์ผ ํ ์ง ์๊ณ ์๋๊ฐ? ES6๋ โฆ์ ์ฌ์ฉํ์ฌ ์ฐ๋ฆฌ์๊ฒ ๋ ๋์ ๋ฌธ๋ฒ์ ์ ๊ณตํ๋ค.
function addPonies(...ponies){
for (let pony of ponies){
poniesInRace.push(pony);
}
}
Poines๋ ์ด์ ์ฐ๋ฆฌ๊ฐ ๋ฐ๋ณตํ ์ ์๋ ๋ฐฐ์ด์ด๋ค. For โฆ of ๊ตฌ์กฐ๋ ๋ฐ๋ณต๋ฌธ์ ์ํด ์ฌ์ฉ๋์ด์ ธ์๋ค. ES6์์ ์๋ก์ด ํน์ง์ผ๋ก ์ถ๊ฐ๋์๋ค. ์ด๊ฒ์ ์งํฉ ๋ณ์๋ค์ ๋ฐ๋ณตํ๋ ๊ฒ๋ ํ์ฉํ๋ค. ๊ทธ๋ฆฌ๊ณ for โฆ in์ผ๋ก์จ ์ฌ์ฉํ ์๋ ์๋ค. ์ฐ๋ฆฌ์ ์ฝ๋๊ฐ ๋ ์๋ฆ๋ต๊ณ ๋ช ํํ๋๊ฒ์ ๋์ ํ๋๊ฐ? ๋๋จธ์ง ์ฐ์ฐ์๋ ๊ฐ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ๋๋ ๋์ํ๋ค.
const [winner, ...losers] = poniesInRace;
// assuming 'poniesInRace' is an array containing serveral ponies
// 'winner' will have the first pony,
// and 'losers' will be an array of the others cones
๋๋จธ์ง ์ฐ์ฐ์๋ ํ์ฐ ์ฐ์ฌ์์ ํผ๋๋์ง ์๋๋ค. ๋๋ ๋น์ ์๊ฒ ๊ต์ฅํ ๋น์ทํ ์ฝ๋๋ฅผ ๋ณด์ฌ์ค ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ ํ์ฐ ์ฐ์ฐ์๋ ์ ๋ฐ๋์ด๋ค. ์ด๊ฒ์ ๋ฐฐ์ด์ ๊ฐ์ ธ์ฌ ์ ์๊ณ ๊ฐ์น์๋ ์๋ฏธ์๋ ํ๋ผ๋ฏธํฐ์์์ ๊ทธ๊ฒ์ ํ์ฐํ๋ค. ์ด์์ ๋ ์ต์๊ฐ, ์ต๋๊ฐ ๊ฐ์ ํจ์๋ก ์ฌ์ฉ๋ ์ ์๋ค. ๋๋ ์๋ง๋ ๋ฐฐ์ด์ ํธ์ถํ๊ธธ ์ํ ์ง๋ ๋ชจ๋ฅธ๋ค.
const ponyPrices = [12,3,4];
const minPrice = Math.min(...ponyPrices);
Classes
๊ฐ์ฅ ์์ง์ ์ธ ํน์ง์ค์ ํ๋์ด๋ฉฐ ์ฐ๋ฆฌ๋ Angular app์ ์์ฑํ ๊ฒฝ์ฐ์ ๋๋จํ ์์ฃผ ์ฌ์ฉํ ๊ฒ์ด๋ค. ES6๋ ์๋ฐ์คํฌ๋ฆฝํธ์ Classes๋ฅผ ์๊ฐํ๊ณ ์๋ค. ๋น์ ์ ์ฝ๊ฒ class์ ์์์ ์ฌ์ฉํ ์ ์๋ค. ๋น์ ์ ํ๋กํ ํ์ ์์์ ์ด์ฉํ ์ ์๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ์ด๋ณด์์๊ฒ ์ฝ์ง ์์ ์์ ์ด๋ค.
class Pony {
constructor(color){
this.color = color;
}
toString(){
return '${this.color} pony';
// set that? It is another cool feature of ES6, called template literals
// we'll talk about these quickly!
}
}
const bluePony = new Pony('blue');
console.log(bluePony.toString()); // blue pony
Class ์ ์ธ์ ํจ์ ์ ์ธ๊ณผ ๋ค๋ฅด๊ฒ ๋์ด๋น๊น์ด ์๋๋ค. ๊ทธ๋์ ๋น์ ์ ํจ์๋ฅผ ์ฌ์ฉํ๊ธฐ ์ด์ ์ ์ ์ธํ ํ์๊ฐ ์๋ค. ๋น์ ์ ํน๋ณํ constructor ํจ์๋ฅผ ์ ์ธํด์ผํ ์ง ๋ชจ๋ฅธ๋ค. ๊ทธ๊ฒ์ ์๋ก์ด pony๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ ๋ new ์ฐ์ฐ์์ ํจ๊ป ์คํ๋์ด์ง๋ค. Pony๋ color๊ฐ ํ์ํ๊ณ ์ฐ๋ฆฌ๋ color๊ฐ โblueโ๋ก ๊ตฌ์ฑ๋ color ๋ฅผ ๊ฐ์ง pony ์ธ์คํด์ค๋ฅผ ๋ง๋ ๋ค. ํด๋น ํด๋์ค๋ ํจ์๋ฅผ ๊ฐ์ง๊ณ ์๊ณ toString()์ผ๋ก ๋์ด ์๋ค.
class Pony {
static defaultSpeed() {
return 10;
}
}
์ ์ ์ธ ํจ์๋ ํด๋์ค์์ ๋ฐ๋ก ์ฌ์ฉ๋ ์ ์๋ค.
const speed = Pony.defaultSpeed();
๋ง์ฝ ๋น์ ์ด ์ฐ์ฐ์๋ก ๋ณ์๋ฅผ ์ฐ๊ฒฐํ๊ธธ ์ํ๋ค๋ฉด Class๋ getter / setter๋ฅผ ๊ฐ์ง ์ ์๋ค.
Class Pony {
get color() {
console.log('get color');
return this._color;
}
set color(newColor) {
console.log('set color ${newColor}');
this._color = newColor;
}
}
const pone = new Pony();
pony.color = 'red';
// set color red
console.log(pony.color);
// get color
// red
๋ฌผ๋ก , ๋น์ ์ด ํด๋์ค๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ฉด ๋น์ ์ ES6์์ ์์์ ์ฌ์ฉํ ์ ์๋ค.
class Animal {
speed(){
return 10;
}
}
class Pony extends Animal {
}
const pony = new Pony();
console.log(pony.speed()); // 10, as Pony overrides the parent method
Animal์ ๊ธฐ๋ณธ ํด๋์ค์ด๊ณ , Pony๋ ํ์๋ ํด๋์ค์ด๋ค. ๋ณด์๋ค์ํผ, ํ์๋ ํด๋์ค๋ ๊ธฐ๋ณธ ํด๋์ค์ ํจ์๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ์ด๊ฒ์ ๋ค์ ์ฌ์ ์ํ ์ ์๋ค.
class Animal {
speed(){
return 10;
}
}
class Pony extends Animal {
speed(){
return super.speed() + 10;
}
}
const pony = new Pony();
console.log(pony.speed()); // 20, as Pony overrides the parent method
๋ณด์๋ค์ํผ, super๋ผ๋ ํค์๋๋ ๊ธฐ๋ณธ ํด๋์ค์ ํจ์๋ฅผ ํธ์ถํ๋ ๊ฒ์ ํ์ฉํ๋ค. Super ํค์๋๋ ๊ธฐ๋ณธ ํด๋์ค constructor ํจ์๋ฅผ ํธ์ถํ๋ ๊ฒ์ผ๋ก constructor์์์ ์ฌ์ฉ๋ ์์๋ค.
class Animal {
constructor(speed) {
this.speed = speed;
}
}
class Pony extends Animal {
constructor(speed, color){
super(speed);
this.color = color;
}
}
const pny = new Pony(20, 'blue');
console.log(pony.speed); // 20
Reference URL
Last updated
Was this helpful?