[JavaScript] 모던 자바스크립트 Deep Dive로 배우는 JS #10 객체 리터럴(1)

ChilihC·2022년 9월 5일
1
post-thumbnail

TIL(Today I Learned) 🧑🏻‍💻


10. 객체 리터럴(1)


10.1  객체란?

  • 자바스크립트는 객체(object) 기반의 프로그래밍 언어이며, 원시 값을 제외한 나머지 값(함수, 배열, 정규 표현식 등)은 모두 객체다.

  • 원시 타입은 단 하나의 값만 나타내지만 객체 타입(object/reference type)은 다양한 타입의 값(원시 값 또는 다른 객체)을 하나의 단위로 구성한 복합적인 자료구조(data structure)다.

  • 원시 타입의 값, 즉 원시 값은 변경 불가능한 값(immutable value)이지만 객체 타입의 값, 즉 객체는 변경 가능한 값(mutable value)이다.

  • 객체는 0개 이상의 프로퍼티로 구성된 집합이며, 프로퍼티는 키(key)와 값(value)으로 구성된다.

var person = {
  // 객체는 프로퍼티의 집합이다.
  name: 'Lee',
  age: 20
};

자바스크립트에서 사용할 수 있는 모든 값은 프로퍼티 값이 될 수 있다.

  • 자바스크립트의 함수는 일급 객체이므로 값으로 취급할 수 있으며, 프로퍼티 값으로 사용할 수 있다.

  • 프로퍼티 값이 함수일 경우, 일반 함수와 구분하기 위해 매서드(method)라 부른다.

var counter = {
	num: 0, // 프로퍼티: 객체의 상태를 나타내는 값(data)
  	increase: function() { 
      // 매서드: 
      // 프로퍼티(상태 데이터)를 참조하고 조작할 수 있는 동작(behavior)
    	this.num++;
    }
}

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

  • 자바스크립트는 프로토타입 기반 객체지향 언어로서 클래스 기반 객체지향 언어와는 달리 다양한 객체 생성 방법을 지원한다.

객체 리터럴, 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 = {
    // key: value
	name: 'Lee',
    age: 20
}
  • 프로퍼티를 나열할 때는 쉼표(,)로 구분한다. 일반적으로 마지막 프로퍼티 뒤에는 쉼표를 사용하지 않으나 사용해도 좋다.

프로퍼티 키와 값으로 사용할 수 있는 값

  • 프로퍼티 키: 빈 문자열을 포함하는 모든 문자열 또는 심벌 값
  • 프로퍼티 값: 자바스크립트에서 사용할 수 있는 모든 값
  • 식별자 네이밍 규칙을 따르지 않는 키(key)값 에는 반드시 따옴표를 사용해야한다.

  • 가급적 식별자 네이밍 규칙을 준수하는 프로퍼티 키를 사용하자.

var person = {
	firstName: 'Dong', // 식별자 네이밍 준수
  	'last-name': 'Lee' // 식별자 네이밍 미준수
};

console.log(person); // {firstName: 'Dong', last-name: 'Lee'}
var person = {
	firsName: 'Dong',
  	last-name: 'Lee' // SyntaxError: Unexpected token ... 
}
  • 문자열 또는 문자열로 평가할 수 있는 표현식을 사용해 프로퍼티 키를 동적으로 생성할 수도 있다.
var obj = {};
var key = 'hello';

// ES5: 프로퍼티 키 동적 생성
obj[key] = 'world';
// ES6: 계산된 프로퍼티 이름
// var obj = { [key]: 'world' };

console.log(obj); // {hello: 'world'}
  • 프로퍼티 키에 문자열이나 심벌 값 외의 값을 사용하면 암묵적 타입 변환을 통해 문자열이 된다.
var foo = {
 // 따옴표는 붙지 않지만 내부적으로는 문자열로 변환된다. 
 0: 1,
 1: 2,
 2: 3,
};
  • 이미 존재하는 프로퍼티 키를 중복 선언하면 나중에 선언한 프로퍼티가 먼저 선언한 프로퍼티를 덮어쓴다. ( 에러가 발생하지 않음에 주의한다 )
var foo = {
  name: 'Lee',
  name: 'Kim' 
};

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

새로운 용어 정리


  • 인스턴스(instance): 인스턴스란 클래스에 의해 생성되어 메모리에 저장된 실체를 말한다. 클래스는 인스턴스를 생성하기 위한 템플릿의 역할을 한다. 인스턴스는 객체가 메모리에 저장되어 실제로 존재하는 것에 초점을 맞춘 용어다.

참고 문헌


* 모던 자바스크립트 Deep Dive ( 자바스크립트의 기본 개념과 동작 원리 ) / 이웅모 지음

profile
developer junior

1개의 댓글

comment-user-thumbnail
2022년 11월 19일

잘 보고 갑니다~

답글 달기