본문 바로가기

ECMAScript 6

객체 리터럴 프로퍼티 기능 확장

객체 리터럴 프로퍼티 기능 확장

객체 리터럴 프로퍼티 기능 확장에 대해서 알아보도록 하자.

#1 프로퍼티 축약 표현

ES5에서 객체 리터럴의 프로퍼티는 프로퍼티 이름과 프로퍼티 값으로 구성된다.

프로퍼티의 값은 변수에 할당된 값일 수도 있다.

// ES5
var x = 1, y = 2;
var obj = {
x: x,
y: y
};

console.log(obj); // { x: 1, y: 2 }


ES6에서는 프로퍼티 값으로 변수를 사용하는 경우에는 프로퍼티 이름을 '생략'할 수 있다.

이때 프로퍼티 이름은 변수의 이름으로 자동 생성된다.

// ES6
let x = 1, y = 2;
const obj = { x, y };
console.log(obj); // { x: 1, y: 2 }


#2 프로퍼티 이름 조합

ES5에서 객체 리터럴의 프로퍼티 이름을 문자열이나 변수를 조합하여 동적으로 생성하고 싶을 때, 객체 리터럴 외부에서 프로퍼티 이름을 생성하고 객체에 할당해야 한다.

// ES5
var i = 0;
var propNamePrefix = 'prop_';
var obj = {};

obj[propNamePrefix + ++i] = i;
obj[propNamePrefix + ++i] = i;
obj[propNamePrefix + ++i] = i;
console.log(obj); // { prop_1: 1, prop_2: 2, prop_3: 3 }


하지만 ES6에서는 객체 리터럴 내부에서 프로퍼티 이름을 동적으로 생성할 수 있다.

// ES6
let i = 0;
const propNamePrefix = 'prop_';

const obj = {
[propNamePrefix + ++i]: i,
[propNamePrefix + ++i]: i,
[propNamePrefix + ++i]: i
};
console.log(obj); // { prop_1: 1, prop_2: 2, prop_3: 3 }


#3 메소드 축약 표현

ES5에서 메소드를 선언하려면 프로퍼티의 값으로 함수 선언식을 사용해야 한다.

// ES5
var obj = {
name: 'Lee',
sayHi: function() {
console.log('Hi! ' + this.name);
}
};

obj.sayHi(); // Hi! Lee

ES6에서는 메소드를 선언할 때 function 키워드를 생략한 축약 표현이 사용 가능하다.

// ES6
const obj = {
name: 'Lee',
// 메소드 축약 표현
sayHi() {
console.log('Hi! ' + this.name);
}
};

obj.sayHi(); // Hi! Lee


#4 __proto__ 프로퍼티에 의한 상속

마지막으로 __proto__ 프로퍼티에 의한 상속을 알아보자.

ES5에서 객체 리터럴을 상속하려면  Object.create() 함수를 사용한다.

이를 프로터타입 패턴 상속이라고 한다.

// ES5
var parent = {
name: 'parent',
syaHi: function() {
console.log('Hi! ' + this.name);
}
};

// 프로토타입 패턴 상속
var child = Object.create(parent);
child.name = 'child';
parent.sayHi(); // Hi! parent
child.sayHi(); // Hi! child

ES6에서는 객체 리터럴 내부에서 __proto__ 프로퍼티를 직접 설정할 수 있다.

이는 객체 리터럴에 의해 생성된 객체의 __proto__ 프로퍼티에 다른 객체를 직접 바인딩하여 상속을 표현할 수 있음을 의미하는 것이다.

// ES6
const parent = {
name: 'parent',
sayHi() {
console.log('Hi! ' + this.name);
}
};

const child = {
// child 객체의 프로토타입 객체에 parent 객체를 바인딩하여 상속을 구현한다.
__proto__: parent,
name: 'child'
};

parent.sayHi(); // Hi! parent
child.sayHi(); // Hi! child

'ECMAScript 6' 카테고리의 다른 글

클래스 -1  (0) 2019.08.16
디스트럭처링  (0) 2019.08.14
Spread 연산자  (0) 2019.08.12
Rest 파라미터  (0) 2019.08.11
화살표 함수 (=>)  (0) 2019.08.10