10장 객체 리터럴

1) 객체란?

  • 자바스크립트는 객체(object) 기반의 프로그래밍 언어다. 원시값을 제외한 나머지 값(함수, 배열, 정규 표현식 등)은 모두 객체다.
  • 객체 타입은 다양한 타입의 값을 하나의 단위로 구성한 복합적인 자료구조다.
  • 객체 타입의 값은 mutable value다. (변할 수 있는 값)
  • 객체는 0개 이상의 프로퍼티로 구성된 집합이며, 프로퍼티는 key-value로 구성된다.
  • 객체는 프로퍼티와 메서드로 구성된 집합체다.
    • 프로퍼티 : 객체의 상태를 나타내는 값
    • 메서드 : 프로퍼티를 참조하고 조작할 수 있는 동작
  • 객체지향프로그래밍 : 객체의 집합으로 프로그램을 표현하려는 프로그래밍 패러다임

2) 객체 리터럴에 의한 객체 생성

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

    • 객체 리터럴 (가장 일반적인 방법)
    • Object 생성자 함수
    • 생성자 함수
    • Object.create 메서드
    • 클래스(ES6)
  • code

    //객체 리터럴 방식으로 객체 생성
    const user = {
      name: "slow",
    };
    
    console.log(typeof user); //object
    

3) 프로퍼티

  • 객체는 프로퍼티의 집합이다. 프로퍼티는 키-값으로 구성된다.
    • property key: 빈 문자열을 포함하는 모든 문자열 또는 심벌 값. 식별자 역할을 함.
    • property value: 자바스크립트에서 사용할 수 있는 모든 값
  • 식별자 네이밍 규칙을 준수하는 프로퍼티 키를 사용한다.

4) 메서드

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

  • code

    const user = {
      name: "slow",
    
      greeting: function () {
        //메서드
        return `안녕하세요. ${this.name}님.`;
      },
    };
    
    console.log(user.greeting()); //안녕하세요. slow님.
    

5) 프로퍼티

프로퍼티 접근과 값 갱신

  • 접근 방법
    • 마침표 표기법(dot notation) → 마침표(.) 사용
    • 대괄호 표기법(bracket notation) → 대괄호([]) 사용
      • 대괄호 프로퍼티 접근 연산자 내에 지정하는 프로퍼티 키는 따옴표로 감싼 문자열이어야 함.
  • 이미 존재하는 프로퍼티에 값을 할당하면 프로퍼티 값이 갱신됨.
  • code
    const user = {
      name: "slow",
    };
    //마침표 표기법
    console.log(user.name); //slow
    //대괄호 표기법
    console.log(user["name"]); //slow
    console.log(user[name]); //ReferenceError
    

프로퍼티 동적 생성과 삭제

  • code
//객체 리터럴 방식으로 객체 생성
const user = {
  name: "slow",
};
//ES5: 프로퍼티 키 동적 생성
user.age = 20;
//delete 연산자 활용해 age 프로퍼티 삭제
delete user.age;

6) [ES6] 객체리터럴 확장 기능

프로퍼티 축약 표현

  • 프로퍼티 값으로 변수를 사용하는 경우 변수 이름과 프로퍼티 키가 동일한 이름일 때 프로퍼티를 생략할 수 있다.
  • code
    let nickname = "slow";
    let age = 20;
    //프로퍼티 축약 표현
    const user = { nickname, age };
    

계산된 프로퍼티 이름(computed property name)

  • 문자열 또는 문자열로 타입 변환할 수 있는 값으로 평가되는 표현식을 사용해 프로퍼티 키를 동적으로 생성할 수 있음.

  • code

    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 키워드를 생략할 수 있음.
  • code
const user = {
  name: "slow",

  //메서드 축약 표현
  greeting() {
    return `안녕하세요. ${this.name}님.`;
  },
};

console.log(user.greeting()); //안녕하세요. slow님.

참고 자료