# 향상된 객체 리터럴(Enhanced Object Literal)

향상된 객체 리터럴이란 기존 자바스크립트에서 사용하던 객체 정의 방식을 개선한 문법입니다. 자주 사용하던 문법들을 좀 더 간결하게 사용할 수 있도록 객체 정의 형식을 바꿨습니다.

# 기존 객체 정의 방식

기존 자바스크립트의 객체 정의 방식은 다음과 같습니다.

var josh = {
  // 속성: 값
  language: 'javascript',
  coding: function() {
    console.log('Hello World');
  }
};

# 축약 문법 1 - 속성과 값이 같으면 1개만 기입

객체를 정의할 때 속성(property)와 값(value)이 같으면 아래와 같이 축약이 가능합니다.

var language = 'javascript';

var josh = {
  // language: language,
  language
};

console.log(josh); // {language: "javascript"}

위와 같은 축약 문법을 뷰 컴포넌트 등록 방식과 뷰 라우터 등록 방식에 대입해보면 아래와 같습니다.

// #1 - 컴포넌트 등록 방식에서의 축약 문법
const myComponent = {
  template: '<p>My Component</p>'
};

new Vue({
  components: {
    // myComponent: myComponent
    myComponent
  }
});
// #2 - 라우터 등록 방식에서의 축약 문법
const router = new VueRouter({
  // ...
});

new Vue({
  // router: router,
  router
});

# 축약 문법 2 - 속성에 함수를 정의할 때 function 예약어 생략

기존에 객체를 정의할 때 객체의 속성에 함수를 연결하여 사용하는 경우가 많았습니다. 예를 들면 아래와 같이 말이죠.

const josh = {
  // 속성: 함수
  coding: function() {
    console.log('Hello World');
  }
};
josh.coding(); // Hello World

실제로 기능을 구현하다보면 위와 같이 정의해야 할 때가 너무 많습니다. 따라서, ES6에서는 아래와 같이 축약하여 코딩하는 것을 추천합니다.

const josh = {
  coding() {
    console.log('Hello World');
  }
};
josh.coding(); // Hello World

이렇게 function 예약어를 생략해도 동일하게 동작하기 때문에 타이핑 하는 시간이 줄어듭니다.

그럼 이번에는 뷰 코드에 적용해서 얼마나 타이핑이 줄어드는지 확인해볼까요?

new Vue({
  // ...
  methods: {
    fetchData: function() {
      // ...
    },
    showAlert: function() {
      // ...
    }
  }
});

위의 코드를 아래와 같이 생략할 수 있습니다.

new Vue({
  // ...
  methods: {
    fetchData() {
      // ...
    },
    showAlert() {
      // ...
    }
  }
});