728x90
1. 객체란?
- 자바스크립트는 객체 기반의 프로그래밍 언어
- 원시값을 제외한 나머지 값(함수, 배열, 정규식)은 모두 개체
- 원시 값은 변경 불가능한 값이나 객체는 변경 가능한 값
- 0개 이상의 프로퍼티로 구성된 집합. 프로퍼티는 키와 값으로 구성
var person = { // person 이라는 객체
name: 'Lee', // "name: 'Lee'" -> 프로퍼티
age: 20 // "age" -> 프로퍼티 키, "20" -> 프로퍼티 값
};
- 자바스크립트에서 사용할 수 있는 모든 값이 프로퍼티 값 될 수 있음 -> 함수도 가능
- 프로퍼티 값이 함수인 경우 일반함수와 구분 위해 메서드(method) 라고 칭함
- 프로퍼티 : 객체의 상태를 나타내는 값(data)
- 메서드 : 프로퍼티(상태 데이터)를 참조하고 조작할 수 있는 동작(behavior)
var counter = {
num: 0, // "num: 0" -> 프로퍼티
increase: function () { // "increase : ~ " -> 메서드
this.num++;
}
};
2. 객체 리터럴에 의한 객체 생성
- 인스턴스 : 클래스에 의해 생성되어 메모리에 저장된 실체
- 클래스 : 인스턴스를 생성하기 위한 템플릿 역할
- 자바스크립트 -> 프로토타입 기반 객체지향 언어
- 중괄호 {...} 내에 0개 이상의 프로퍼티 정의
- 객체 리터럴의 중괄호는 코드블록과 헷갈려선 안됨.
- 닫는 중괄호 뒤에 세미콜론 붙여야 함
var person = {
name: 'Lee',
sayHello: function () {
console.log(`Hello! My name is ${this.name}`);
}
}; // 세미콜론 주의
console.log(typeof person); // object
console.log(person); // {name:"Lee", sayHello: f}
3. 프로퍼티
- 객체는 프로퍼티의 집합
- 프로퍼티는 키와 값으로 구성 됨
- 프로퍼티 나열은 쉼표(,) 이용
- 프로퍼티 키는 프로퍼티 값에 접근할 수 있는 이름으로서 식별자의 역할을 함
- 식별자 네이밍 준수, 준수하지 않을 경우 따옴표로 프로퍼티 키 묶어야 함
var person = {
firstName: 'Ung-mo',
"last-name": 'Lee'
};
console.log(person); // {firstName:"Ung-mo", last-Name: Lee}
- 프로퍼티 키 동적 생성 하기
var obj = {};
var key = 'Hello';
// ES5 : 프로퍼티 키 동적 생성
obj[key] = 'world';
// ES6 : 계산된 프로퍼티 이름
// var obj = { [key]: "world"};
console.log(obj);
4. 메서드
- 프로퍼티 값이 함수일 경우 일반 함수와 구분하기 위해 메서드라 부름
- 메서드 : 객테에 붂여 있는 함수
var circle = {
radius: 5, // -> 프로퍼티
// 원의 지름 구하기
getDiameter: function () { // -> 메서드
return 2 * this.radius;
}
};
console.log(circle.getDiameter()); // 10
5. 프로퍼티 접근
- 마침표 표기법 : . 사용
- 대괄호 표기법 : [...] 사용
- 대괄호 프로퍼티 접근 연산자 내부에 지정하는 프로퍼티 키는 반드시 따옴표로 감싼 문자열 이여야 함
- 프로퍼티 키가 숫자로 이뤄진 문자열이면 따옴표 생략 가능
var person = {
name: 'Lee'
};
// 마침표 표기법으로 프로퍼티 접근
console.log(person.name); // Lee
// 대활호 표기법으로 프로퍼티 접근
console.log(person['name']); // Lee
6. 프로퍼티 값 갱신
- 이미 존재하는 프로퍼티에 값 할당 시 프로퍼티 값이 갱신 됨
var person = {
name: 'Lee'
};
person.name = 'kim';
console.log(person); // {name : "kim"}
7. 프로퍼티 동적 생성
- 존재하지 않는 프로퍼티에 값을 할당하면 동적으로 생성되어 추가 되고 프로퍼티 값이 할당 됨
var person = {
name: 'Lee'
};
person.age = 100;
console.log(person); // {name : "Lee" , age : 100}
8. 프로퍼티 삭제
- delete 연산자로 객체의 프로퍼티 삭제
- delete 연산자의 피연산자는 프로퍼티 값에 접근할 수 있는 표현식이어야 함
var person = {
name: 'Lee'
};
person.age = 100;
delete person.age;
console.log(person); // {name : "Lee"}
9. ES6에서 추가된 객체 리터럴의 확장 기능
1) 프로퍼티 축약 표현
- ES6에서는 변수를 사용하는 변수 이름과 프로퍼티 키가 동일한 이름이면 키 생략 가능
- 프로퍼티 키가 변수 이름으로 자동 생성 됨
// ES5
var x = 1, y = 2;
var obj = {
x : x,
y : y
};
console.log(obj); // {x : 1, y : 2}
// ES6
let x = 1, y = 2; // 변수 이름으로 프로퍼티 키 자동 생성
// 프로퍼티 축약 표현
const obj = { x , y };
console.log(obj); // {x : 1, y : 2}
2) 계산된 프로퍼티 이름
- 문자열 or 문자열로 타입 변환 가능한 값으로 평가되는 표현식 사용해 프로퍼티를 동적으로 생성
- 프로퍼티 키로 사용할 표현식은 대괄호([...]) 로 묶기
- ES5 : 객체 리터럴 외부에서 계산된 프로퍼티 이름으로 프로퍼티 키 생성 가능
- ES6 : 객체 리터럴 내부에서 계산된 프로퍼티 이름으로 프로퍼티 키 생성 가능
// ES5
var prefix = 'prop';
var i = 0;
var obj = {};
// 계산된 프로퍼티 이름으로 프로퍼티 키 동적 생성
obj[prefix + '-' + ++1] = i;
obj[prefix + '-' + ++1] = i;
obj[prefix + '-' + ++1] = i;
console.log(obj); // {prop-1: 1 , prop-02: 2, prop-3: 3}
// ES6
const prefix = 'prop';
let i = 0;
// 객체 리터럴 내부에서 계산된 프로퍼티 이름으로 프로퍼티 키를 동적 생성
const obj = { // 집가서 다시 확인할 것
[`${prefix}-${++1}`] : i,
[`${prefix}-${++1}`] : i,
[`${prefix}-${++1}`] : i
};
console.log(obj); // {prop-1: 1 , prop-02: 2, prop-3: 3}
3) 메서드 축약 표현
- ES5 : 메서드 정의 시 프로퍼티 값으로 함수 할당
- ES6 : 메서드 정의 시 function 키워드 생략한 축약 표현 사용 가능
// ES5
var obj = {
name: "Lee",
sayHi: function(){
console.log('Hi!' + this.name);
}
};
obj.sayHi(); // Hi! Lee
// ES6
const obj = {
name: "Lee",
// 메서드 축약표현
sayHi() {
console.log('Hi! ' + this.name);
}
};
obj.sayHi(); // Hi! Lee
참고 : 모던 자바스크립트 Deep Dive
728x90
'TIL > JavaScript' 카테고리의 다른 글
[딥다이브] 11장 원시 값과 객체의 비교 (2) | 2022.04.27 |
---|---|
[Vanilla JS 활용] DOM 제어 및 사용자 정보 획득 (0) | 2022.04.26 |
[딥다이브] 9장 타입 변환과 단축 평가 (0) | 2022.04.24 |
[딥다이브] 8장 제어문 (0) | 2022.04.24 |
[딥다이브] 7장 연산자 (0) | 2022.04.21 |