Javascript "ES6"문법
오늘은 자바스크립트에서 2015년도에 대규모 문법적 향상 및 변경인
ES6 문법에 대해 정리하고자 한다.
1. let 과 const
✅ let : 재할당 가능, 재선언 불가
let name = "john"
console.log(name) // john
name = "bob" // 재할당 가능
console.log(name) // bob
let name = "alex" // 재선언 불가능, SyntaxError: Identifier 'name' has already been declared
✅ const : 재할당, 재선언 불가 / 초기값 없을시 선언 불가능
const name; // 초기값 없이 선언 불가능, SyntaxError: Missing initializer in const declaration
---
const name = "john"
console.log(name) // john
name = "bob" // 재할당 불가능, TypeError: Assignment to constant variable.
const name = "bob" // 재선언 불가능, SyntaxError: Identifier 'name' has already been declared
2. 화살표 함수 (Arrow Function)
✅ function 이나 return 키워드 없이 함수를 만드는 방법이다.
// ES5
function func() {
return true
}
//ES6
const func = () => {
return true
}
// return 문이 한줄이면 return도 생략 가능.
const func = () => true
// function 은 호출시 this가 정해짐, 화살표함수는 선언시 this가 정해진다.
3. 삼항 연산자 (ternary operator)
✅ if..else 문을 간단하게 표현하는 연산
condition ? expr1 : expr2
console.log(box ? "참" : "거짓") // 참
// 만약 box의 값이 true면 참을, false면 거짓을 반환해라 ~
console.log(box ? "참" : "거짓") // 거짓
// 만약 box의 값이 true면 참을, false면 거짓을 반환해라 ~
4. 구조 분해 할당 (Destructuring)
✅ 배열 [ ] 이나 객체 { } 의 속성을 분해해서 그 값을 변수에 담는 문법.
// 배열의 경우
let [value1, value2] = [1, "new"];
console.log(value1); // 1
console.log(value2); // "new"
let arr = ["value1", "value2", "value3"];
let [a,b,c] = arr;
console.log(a,b,c) // value1 value2 value3
// let [a,b,c] = arr; 은 아래와 동일!
// let a = arr[0];
// let b = arr[1];
// let c = arr[2];
let [a,b,c,d] = arr
console.log(d) // undefined
let [a,b,c,d = 4] = arr // 비어있던 d의 값을 4로 할당가능
console.log(d) // 4
// 객체의 경우
let user = {name: "nbc", age: 30};
let {name, age} = user;
// let name = user.name;
// let age = user.age;
console.log(name, age) // nbc 30
// 새로운 이름으로 할당
let {name: newName, age: newAge} = user;
console.log(name, age) // ReferenceError: name is not defined
console.log(newName, newAge) //nbc 30
let {name, age, birthDay} = user;
console.log(birthDay) // undefined
let {name, age, birthDay = "today"} = user;
console.log(birthDay) // today
5. 단축 속성명 (property shorthand)
✅ 객체의 key 와 value의 값이 같을시, 생략 가능
const name = "john"
const age = "25"
const obj = {
name: name
age: age
};
// 단축 속성명 사용시
const obj = {
name,
age
};
console.log(obj); // { name: john, age: 25 }
6. 전개 구문 (Spread)
✅ 배열이나 객체를 전개하는 문법. 구조 분해 할당과 함께 정말 많이 사용된다!
// 배열
let arr = [1,2,3];
let newArr = [...arr, 4];
console.log(newArr) // [1,2,3,4]
// 객체
let user = {name: "nbc", age: 30};
let user2 = {...user} // 새로운 객체 user2 = {name: "nbc", age: 30} 생성.
user2.name = "nbc2" // user2 객체의 name을 nbc2 로 변경 (user 객체에는 영향 x)
console.log(user.name) // nbc
console.log(user2.name) // nbc2
7. 나머지 매개변수 (rest parameter)
✅ 나머지 매개변수는 함수에 전달된 인수들 중, 매개변수로 명시하지 않은 나머지 인수들을 배열로 수집한다.
function exampleFunction(param1, param2, ...restParams) {
console.log(param1); // 첫 번째 매개변수
console.log(param2); // 두 번째 매개변수
console.log(restParams); // 나머지 매개변수들 (배열)
}
exampleFunction(1, 2, 3, 4, 5);
// param1 = 1
// param2 = 2
// resrParams = [3, 4, 5] 가 할당된다.
8. 템플릿 리터럴 (Template literals)
✅ 백틱(` `) 과 ${ } 를 통해 표현하는 방법.
let name = "John";
let age = 30;
// 템플릿 리터럴 사용
let greeting = `안녕하세요, ${name}님! 나이는 ${age}세 입니다.`;
console.log(greeting);
// 출력: 안녕하세요, John님! 나이는 30세 입니다.
템플릿 리터럴을 사용하면 문자열을 여러 줄에 걸쳐 작성할 수 있다.
let multiLineString = `
이것은
여러 줄로
구성된 문자열입니다.
`;
console.log(multiLineString);
/*
출력:
이것은
여러 줄로
구성된 문자열입니다.
*/
9. named export vs default export
✅ 1. default export
하나의 모듈에선 하나의 항목만을 기본으로 내보낼 수 있다. 이를 'default export' 라고 부르며, 가져올 때는 이름을 지정하지 않고 가져올 수 있다.
// 모듈 정의 (exampleModule.js)
const myDefaultExport = "This is the default export.";
export default myDefaultExport;
이제 다른 파일에서 이 모듈을 가져올 때, 'default export' 는 이름을 지정하지 않고 가져올 수 있다.
// 모듈 가져오기
import myDefaultExport from './exampleModule';
console.log(myDefaultExport); // 출력: This is the default export.
✅ 2. named export
'named export' 는 여러 개의 항목을 명시적으로 내보낼 수 있도록 하는 방법이다.
'named export' 를 사용하면 모듈에서 여러 항목을 가져올 때 항목의 이름을 사용하여 가져올 수 있다.
// 모듈 정의 (exampleModule.js)
export const variable1 = "This is variable1.";
export const variable2 = "This is variable2.";
export function myFunction() {
console.log("This is myFunction.");
}
이제 다른 파일에서 이 모듈에서 내보낸 항목들을 가져올 때, 항목의 이름을 사용하여 가져올 수 있다.
// 모듈 가져오기
import { variable1, variable2, myFunction } from './exampleModule';
console.log(variable1); // 출력: This is variable1.
console.log(variable2); // 출력: This is variable2.
myFunction(); // 출력: This is myFunction.
여러번 반복 학습을 통해 ES6의 새로운 문법 9가지를 많이 익혔다.
하지만 익힌 것과는 별개로, 내가 코딩을 할 때 이 문법을 어떻게, 어디서 적용해야 할지는 아직 감이 잡히지 않는다.
앞으로 코딩하는 프로젝트에서는 ES6의 문법을 적극 활용해보도록 노력해야겠다.