es2015에서는 객체를 쉽게 표현하고 분리하거나 추출하는 기능을 제공한다. Vue등 framework에서 많이 볼 수 있는 형태이므로 잘 배워두자.
Enhanced Object Literal(강화된 객체 표현)
강화된 객체 표현(Enhanded Object Literal)은 객체를 표현할 때 좀 더 간결한 문법을 제공하는데 2가지의 개선이 이뤄졌다.
- property shorthand: 객체의 속성 이름과 참조하려는 변수의 이름이 같을 경우는 하나만 사용
- concise method: 객체에 함수 정의 시 속성 이름을 함수 이름으로 사용
강화된 객체 표현 사용
먼저 기존에 객체를 정의하던 형태를 살펴보자.
oldStyle의 languate 는 속성과 값(사용하는 변수)가 같다. 그리고 sayLang 속성은 함수로 선언되어있다. 이 문장을 ES6 형태로 변경하면 아래와 같다.
Spread Operator
Spread Operator는 기존의 객체 또는 배열의 값을 다른 객체나 배열로 복제하거나 옮길 때 사용한다.
객체의 내용 복제란
예를 들어 아래와 같은 객체가 있다고 생각해보자.
이제 새로운 객체를 만들껀데 우연찮게 normal에 있는 내용을 그대로 가져간다. 예를 들어 아래와 같이 구성된다.
즉 special 이라는 객체는 normal 객체의 속성에 추가로 nick이 있는 새로운 객체이다.
이전의 javascript에서는..
special을 만들기 위해 이전의 javaScript는 아래와 같이 작성할 수 있었다.
즉 새로운 객체를 만들면서 기존 객체의 속성을 하나씩 가져오고 추가 속성을 작성하면 된다. 물론 반복문을 이용할 수도 있었을 것이다.
spread operator를 사용하면..
spread operator(...)는 단어 뜻 그대로 객체를 펼쳐서 넣어준다.
이렇듯 spread operator를 사용하면 기존 객체의 속성을 이용하여 쉽게 새로운 객체를 생성할 수 있다.
이 연산자는 배열에서도 동일하게 적용될 수 있다.
de-structuring(구조의 분해)
일반적으로 객체나 배열을 사용하는 이유는 여러 가지 데이터를 하나의 변수에 담아서 사용하기 위해서 사용한다. 이 과정을 구조를 만드는(structuring) 것이라고 이야기 할 수 있다.
그런데 person의 속성들을 하나씩 꺼내서 변수에 할당하고 사용하려면 상당히 수고스럽다.
de-structuring은 structuring의 반대말?
de-structuring은 변수 선언 시 { } 를 이용해서 여러 변수를 선언할 수 있고 객체에 뭉쳐있던 속성들이 해체되서 할당된다.
즉 위와 같은 한 줄의 코드로 3줄을 대체할 수 있다. 물론 이 과정에서 person의 모든 속성을 다 받아들여야 하는 것은 아니다. 필요한 것만 변수에 선언해주면 된다.
de-structuring은 특히 객체가 함수의 파라미터로 전달 될 때 코드를 간략하게 하기 위해서 사용된다.
위의 함수는 파라미터 부분에 de-structuring 연산자가 사용되었다. 즉 함수 호출 시 전달되는 객체에서 name, age, addr 속성을 뽑아서 바로 변수에 할당해주는 형태이다.
computed property name
가끔 객체의 속성을 동적으로 만들어야 하는 경우가 있는데 이때 사용할 수 있는 방법이 computed property name이다. 이 방법은 객체의 속성 선언 시 []를 사용할 수 있는데 [] 안의 내용을 실행해서 속성 이름으로 사용할 수 있다.
다음의 코드는 dynamic_prop_obj를 만들면서 name_1이라는 속성을 동적으로 만들고 있는 예를 보여준다.
이 기법은 일반적으로 키의 이름을 배열등에 저장하고 이것을 참조해서 키 이름을 구성할 때 유용하다.