JavaScript - 원시 자료형과 참조 자료형

uk·2022년 10월 14일

JavaScript

목록 보기
9/19

원시 자료형(primitive data types)이란?

  • JavaScript에서 객체가 아니면서 method를 가지지 않는 6가지의 타입을 말한다.
    string, number, bigint, boolean, undefined, symbol, null
  • 고정된 저장 공간을 차지하는 데이터이다.
  • 변수에 하나의 데이터만 담을 수 있다.
  • 값 자체에 대한 변경이 불가능(immutable)하지만 변수에 다른 데이터를 할당할 수 있다.
// 원시 자료형은 변수(보관함)에 하나의 데이터만 담을 수 있다.
 let num1 = 123;
 let num2 = 123456789;
 
// "hello world"는 변경할 수 없는 고정된 값이다.
"hello world"

// 하지만 word라는 변수에 재할당을 하여 변수에 담긴 내용을 변경하는 것은 가능하다.
let word = "hello world"
word = "hello"
let x = 2;
let y = x;
y = 3;
consloe.log(x);  // 2
consloe.log(y);  // 3
  • 원시 자료형은 그 값 자체를 변수에 할당한다. 즉, 값을 복사하여 변수에 저장한다.
  • 변수 x를 y에 할당하는 경우 x의 값은 원시 자료형이기 때문에 2를 y에 할당한다.
  • 하지만 변수 y에 3이 할당되어도 x는 2이다. x의 값을 y로 복사하여 할당했기 때문에 세번째 줄의 코드는 변수 x에 영향을 주지 않는다.

참조 자료형(reference data type)이란?

  • JavaScript에서 원시 자료형이 아닌 모든 것은 참조 자료형이며 배열과 객체, 함수가 대표적이다.
  • 원시 자료형은 변수에 넣을 수 있는 데이터 크기가 제한되기 때문에 대량의 데이터를 다루기에 적합한 참조 자료형을 사용한다.
  • 변수에 할당할 때 값이 아닌 주소를 저장한다.
let first = [10, 20, 30, 40];
let second = first;
second[0] = 5;
    1. first === second는 true이다.
      O, first와 second는 같은 주소를 참조하기 때문에 true이다.
    1. first의 0번째 인덱스에 있는 요소는 5이다.
      O, 값만 복사하는 것이 아닌 같은 주소를 참조하기 때문에 first도 똑같이 변경된다.
    1. first와 second는 다른 주소를 공유하고 있다.
      X, 같은 주소를 공유하고 있다.
    1. first와 second는 참조 자료형이다.
      O, 같은 주소를 참조하기 때문에 참조자료형이다.

참조 자료형이 저장되는 특별한 데이터 보관함

  • 참조 자료형에는 하나의 데이터가 아닌 여러 데이터가 담기며 특별한 데이터 보관함에 저장되는데 이 데이터가 위치한 곳(메모리 상 주소)을 가리키는 주소가 변수에 저장된다. 쉽게 말하자면, 변수에는 특별한 데이터 보관함을 찾아갈 수 있는 주소가 담겨있다.
  • 또한 이 특별한 데이터 보관함은 자기 마음대로 사이즈를 늘렸다가 줄였다가 할 수 있는데 이처럼 데이터는 별도로 관리되고 변수에는 주소가 저장되기 때문에 reference data type이라고 불리며 이런 특별한 데이터 보관함을 heap이라고 부른다.

특별한 데이터 보관함이 동적으로 크기가 변하는 이유

  • 배열과 객체는 대량의 데이터를 쉽게 다루기 위해서 사용되며 크기가 고정되어 있지 않은데 우리가 데이터를 추가, 삭제하는 것에 따라서 크기가 달라지기 때문이다. 100만 개의 데이터가 들어올 수 있는 상황에서 고정된 데이터 공간을 사용하는 것이 합당할까? 대량의 데이터가 들어오는 경우 고정된 데이터 공간을 사용하는 것이 비효율적이다.
  • 그렇기 때문에 크기가 상황에 따라서 커졌다가 작아지는 특별한 데이터 저장소를 만들어 사용하기로 합의하였고 데이터가 언제 늘어나고 줄어들지 모르기 때문에 별도의 저장 공간을 마련하여 따로 관리하는 것이다. 변수에는 원시 값 혹은 주소만 지정할 수 있고 주소는 크기가 변하는 특별한 데이터 저장소를 참조하게 된다.

원시 자료형과 참조 자료형의 특징

  • 원시 자료형이 할당될 때에는 변수에 값(value) 자체가 담기고 참조 자료형이 할당될 때는 보관함의 주소(reference)가 담긴다.
  • 그래서 참조 자료형은 기존의 고정된 크기의 보관함이 아니라 동적으로 크기가 변하는 특별한 보관함을 사용한다.

[] === [] ?

  • 참조 자료형의 ===(strict equality)는 주소값이 같은지 확인하기 때문에 위 두 배열을 비교하면 false를 반환한다.
  • 컴퓨터가 위 코드를 읽으면서 이미 두 개의 heap 저장 공간의 주소를 확보하였지만 우리가 눈으로 직접 확인할 수는 없다. 그러므로 두 배열은 서로 다른 주소를 참조하기 때문에 false를 반환한다.

0개의 댓글