JS (10) - 객체 리터럴

최조니·2022년 6월 20일
0

JavaScript

목록 보기
7/36

10.1 객체란 ?

  • 원시 타입
    단 하나의 값만 나타냄
    변경 불가능한 값 (immutable value)
    ex. string, number, bigint, boolean, undefined, symbol, null

  • 객체 타입
    다양한 타입의 값을 하나의 단위로 구성한 복합적인 자료구조
    변경 가능한 값 (mutable value)

  • 객체
    • 0개 이상의 property로 구성된 집합
    • property는 keyvalue로 구성
    • property의 값이 함수일 경우, 일반 함수와 구분하기 위해 method라 부름
var person = {
  name: 'Lee',
  age: 20
};

var counter = {
  num: 0, 					// property
  increase: function() {	// method
    this.num++;
  }
};

10.2 객체 리터럴에 의한 객체 생성

  • 클래스 기반 객체지향 언어 (c++, java)는 클래스 사전 정의, 필요한 시점에 new 연산자와 함께 생성자 호출
  • 프로토타입 기반 객체지향 언어 (javascript) 다양한 객체 생성 방법 지원
    • 객체 리터럴 > 가장 일반적, 간단
    • Object 생성자 함수
    • 생성자 함수
    • Object.create 매서드
    • 클래스 (ES6)
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}

10.3 프로퍼티

객체는 프로퍼티의 집합이며, 프로퍼티는 키와 값으로 구성된다.

  • 프로퍼티 키 : 빈 문자열을 포함하는 모든 문자열 또는 심벌 값
  • 프로퍼티 값 : 자바스크립트에서 사용할 수 있는 모든 값
var person = {
  firstName: 'Ung-mo',
  lastName : 'Lee'
};
  • 문자열 또는 문자열로 평가할 수 있는 표현식을 사용해 프로퍼티 키를 동적으로 생성할 수 있음
var obj = {};
var key = 'hello';

obj[key] = 'world';
console.log(obj); 		// {hello : "world"}
  • 문자열 또는 문자열로 평가할 수 있는 표현식을 사용해 프로퍼티 키를 동적으로 생성할 수 있음
var obj = {};
var key = 'hello';

obj[key] = 'world';
console.log(obj); 		// {hello : "world"}
  • 예약어(var, function 등) 과 빈 문자열을 프로퍼티 키로 사용 가능하지만 권장하지 않음

  • 프로퍼티 키에 문자열이나 심벌 값 외의 값을 사용하면 암묵적 타입 변환을 통해 문자열로 변환 (내부적으로 문자열로 변환됨)

var foo = {
  0: 1,
  1: 2,
  2: 3
};

console.log(foo);	// {0: 1, 1: 2, 2: 3}
  • 이미 존재하는 프로퍼티 키를 중복 선언하면, 나중에 선언한 프로퍼티가 먼저 선언한 프로퍼티를 덮어씀
var foo = {
  name: 'Lee',
  name: 'Kim'
};

console.log(foo);	// {name: "Kim"}

10.4 메서드 (Method)

객체에 묶여 있는 함수
프로퍼티 값이 함수일 경우, 일반 함수와 구분하기 위해 메서드라 부른다.

var circle = {
  radius: 5,				 	// -> property
  		
  getDiameter: function() { 	// -> method
    return 2 * this.radius;		// this == circle
  }
};

console.log(circle.getDiameter()); 	// 10

10.5 프로퍼티 접근

방법
1. 마침표 표기법 : 마침표 프로퍼티 접근 연산자. 사용
2. 대괄호 표기법 : 대괄호 프로퍼티 접근 연산자[...] 사용

var person = {
  name: 'Lee'
};

console.log(person.name);		// Lee
console.log(person['name']);	// Lee
  • 대괄호 프로퍼티 접근 연산자 내부, key는 따옴표로 감싼 문자열이여야 함

10.6 프로퍼티 값 갱신

이미 존재하는 프로퍼티에 값을 할당하면 프로퍼티 값이 갱신됨

var person = {
  name: 'Lee'
};
person.name = 'Kim';	// name 값 갱신
console.log(person);	// {name: "Kim"}

10.7 프로퍼티 동적 생성

존재하지 않는 프로퍼티에 값을 할당하면 프로퍼티가 동적으로 생성되어 추가되고, 값이 할당된다.

var person = {
  name: 'Lee'
};
person.age = 20;		// age 동적 생성 및 값 할당
console.log(person);	// {name: "Lee", age: 20}

10.8 프로퍼티 삭제

delete 연산자 : 객체의 프로퍼티 삭제

var person = {
  name: 'Lee'
};
person.age = 20;			// age 동적 생성 및 값 할당

delete person.age;			// age 프로퍼티 삭제
delete person.address;		// address 프로퍼티는 존재 x, 무시

console.log(person);		// {name: "Lee"}

10.9 ES6에서 추가된 객체 리터럴의 확장 기능

- 프로퍼티 축약 표현

프로퍼티 값으로 변수를 사용하는 경우, 변수 이름과 프로퍼티 키가 동일한 이름일 때 프로퍼티 키를 생략할 수 있음 (키는 변수이름으로 자동 생성)

let x = 1, y = 2;

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

- 계산된 프로퍼티 이름

객체 리터럴 내부에서도 계산된 프로퍼티 이름으로 프로퍼티 키를 동적 생성 가능

const prefix = 'prop';
let i = 0;

const obj = {
  [`${prefix}-${++i}`]: i,
  [`${prefix}-${++i}`]: i,
  [`${prefix}-${++i}`]: i
};

console.log(obj);	// {prop-1: 1, prop-2: 2, prop-3: 3}

- 메서드 축약 표현

메서드 정의 시, function 키워드를 생략한 축약 표현 사용 가능

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

obj.sayHi();	// Hi! Lee
profile
Hello zoni-World ! (◍ᐡ₃ᐡ◍)

0개의 댓글