[JS/TIL] 원시 값과 객체의 비교

김재범·2022년 11월 15일
0
post-thumbnail

원시 값과 객체의 비교

  • 원시 타입의 값은 변경 불가능한 값, 객체 타입은 변경가능한 값
  • 원시 값을 변수에 할당하면 변수(확보된 메모리공간)에는 실제 값이 저장된 객체를 변수에 할다앟면 변수에는 참조 값이 저장된다.

원시 값은 변경 불가능한 값

  • 따라서 변수 값을 변경하기 위해 원시값을 재할당하면 새로운 메모리 공간을 확보하고 저장한 후, 변수가 참조하던 메모리 공간의 주소를 변경. 이러한 특성을 불변성이라 한다.
  • 불변성을 갖는 원시 값을 할당한 변수는 재할당 이외에 방법이 없다.

객체

  • 객체는 프로퍼티의 개수가 정해져있지 않으며, 동적으로 추가되고 삭제할 수 있다.

자바스크립트 객체의 관리 방식
-> 자바스크립트 객체는 프로퍼티 키를 인덱스로 사용하는 해시테이블이라고 생각할 수 있다.

대부분의 자바스크립트 엔진은 해시테이블과 유사하지만 높은 성능을 위해 일반적인 해시테이블보다 나은 방법으로 객체를 구현한다.

해시테이블


자바, C++ 같은 클래스 기반 객체지향 프로그래밍 언어는, 객체를 생성하기 전에 이미 프로퍼티와 매서드가 정해져있고 그대로 객체를 생성한다. 객체가 생성된 이후에는 프로퍼티를 삭제하거나 추가할 수 없다.

하지만, 자바스크립트는 클래스 없이 객체를 생성할 수 있고, 객체가 생성된 이후에도 동적으로 프로퍼티와 매서드를 추가할 수 있다.

이는 편리하지만 비효율적인 방식이다. 그래서 V8엔진은 프로퍼티에 접근하기위해 동적탐색 대신 "히든클래스"라는 방식을 사용해 성능을 보장한다.

변경 가능한 값

  • 객체 타입의 값, 즉 객체는 변경가능한 값이다.

    -> 원시값을 할당한 변수를 참조하면 메모리에 저장되어 있는 원시값에 접근한다. 하지만, 객체를 할당한 변수를 참조하면 메모리에 저장되어 있는 참조값을 통해 실제 객체에 접근한다. 따라서 재할당없이 프로퍼티를 동적으로 추가할 수 도 있고 프로퍼티값을 갱신, 삭제할 수 있다.
profile
지식을 쌓고 있습니다.

0개의 댓글