[딥다이브] 10장 객체 리터럴, 11장 원시 값과 객체의 비교

주니·2023년 4월 8일
0

딥다이브

목록 보기
5/20

10. 객체 리터럴

자바스크립트는 객체 기반의 프로그레밍 언어이다. 구성하는 거의 '모든 것'이 객체인 만큼 객체에 대한 충분한 이해가 필요하다.

객체

  • 0개이상의 프로퍼티(상태를 나타내는 값)로 구성된 집합이다
  • 프로퍼티는 키(key)와 값(value)으로 구성된다
  • 변경 가능한 값(mutable value)이다.
  • 프로퍼티 값이 함수일 경우 일반 함수와 구분하기 위해 메서드라 부른다.

다양한 객체 생성 방법

  • 객체 리터럴
    const person = { name : 'Lee', age : 20 };
  • Object 행성자 함수
  • 생성자 함수
  • Object.create 메서드
  • 클래스(ES6)

(객체 리터럴 이외의 방식은 후에 다룬다)

프로퍼티 접근법

두 가지의 접근법이 있다.

  • 마침표 표기법
  • 대괄호 표기법 : 프로퍼티 키를 반드시 따옴표로 감싸야 한다.

11. 원시 값과 객체의 비교

저장되는 값

  • 원시 값을 변수에 할당하면, 변수(확보된 메모리 공간)에는 실제 값이 저장된다.
  • 객체를 변수에 할당하면, 변수에는 참조 값이 저장된다.

각 변수를 다른 변수에 할당 할 때

  • 값에 의한 전달: 원본의 원시 값이 복사되어 전달
  • 참조에 의한 전달: 원본의 참조 값이 복사되어 전달

유사 배열 객체

  • 마치 배열처럼 인덱스로 프로퍼티 값에 접근할 수 있고,
  • length 프로퍼티를 갖는 객체를 말한다.
  • 문자열은 인덱스로 접근 가능하고, for문으로 순회할 수 있다.
  • 그러나 문자열은 원시 값이므로 값을 변경할 수는 없다.(이 때 에러는 발생하지 않는다) → 데이터의 신뢰성을 보장한다.

값에 의한 전달

  • 값을 전달하는 것이 아닌 메모리 주소를 전달한다.
  • 카피를 할 경우 메모리 주소를 카피해 새로운 주소를 생성한 것이므로 기존의 메모리 주소는 남아있다. 이는 별개의 값으로 저장되어 재할당을 해도 서로 간섭할 수 없다.

참조에 의한 전달

  • 객체를 가리키는 변수를 다른 변수에 할당하면 원본의 참조 값이 복사되어 전달.
  • 두 개의 식별자가 하나의 객체를 공유하는 것. 객체의 값을 수정하면 서로 영향을 받는다.

결국 '값에 의한 전달'과 참조에 의한 전달'은 식별자가 기억하는 메모리 공간에 저장되어 있는 값을 복사해서 전달한다는 면에서 동일하다.

따라서 자바스크립트에는 '값에 의한 전달'만이 존재한다고 말할 수 있다.

var person1 = {
 name: "Lee"
}
var person2 = {
 name: "Lee"
}
console.log(person1 === person2) // false
console.log(person1.name === person2.name // true

위 코드를 이해하는 것으로 이 장을 마무리하려고 한다.

0개의 댓글