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

Youngjin Son·2023년 4월 27일

JavaScript

목록 보기
1/4
post-thumbnail

1. 원시 자료형과 참조 자료형

JavaScript에서 자료형이란 값의 종류를 의미한다.
각 자료형은 고유한 속성과 메소드를 가지고 있다.
자료형은 크게 원시 자료형 (primitive type)참조 자료형(reference type)으로 구분할 수 있다.

JavaScript에서는 6가지 자료형 number, string, boolean, undefined, null, symbol을 원시 자료형으로 구분한다.

원시 자료형이 아닌 모든 자료형은 참조 자료형이다.
배열, 객체가 대표적인 참조 자료형이며, 함수도 참조 자료형으로 분류한다.


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


3. 값 자체를 저장 vs 주소값을 저장

원시 자료형을 변수에 할당하면 값 자체가 할당된다.
변수 num을 선언하면 컴퓨터는 num이라는 이름의 공간을 확보하고, 원시 값을 그 공간에 저장한다.

참조 자료형은 특별한 저장 공간에 참조 자료형을 저장한 후, 그 저장 공간을 참조할 수 있는 주소 값을 변수에 저장한다.
이 때 참조 자료형을 저장하는 특별한 저장 공간을 힙 (heap)이라고 부른다.
따라서 변수에 해당하는 저장 공간에는 주소 값이 저장되어 있고, 그 주소 값을 통해 참조 자료형에 접근할 수 있다.


4. 원시 값 자체를 복사 vs 주소 값을 복사

원시 자료형은 값 자체를 복사하며, 참조 자료형은 주소 값을 복사한다.
즉 참조 자료형이 할당된 변수를 다른 변수에 할당하면 두 변수는 같은 주소를 가리키게 된다.
따라서 원시 자료형은 원본에 다른 값을 재할당해도 복사본에 영향을 미치지 않지만 참조 자료형은 원본을 변경하면 복사본도 영향을 받는다.


5. 변경 불가능한 값 vs 변경 가능한 값

한 번 생성된 원시 값은 변경할 수 없다.

let num = 20;

num 을 다른 값으로 바꾸고 싶으면 다음과 같이 값을 재할당하면 된다.

num = 30

변수에 할당된 값이 변경되었기 때문에 원시 자료형인 숫자 타입의 값이 변경된 것처럼 보이지만, 이것은 값이 변경된 것이 아니다.
원시 자료형 변수의 값을 재할당하면, 메모리는 변수가 참조하던 공간에 들어 있던 값을 변경하는 것이 아니다.
메모리는 새로운 공간을 확보한 뒤, 그 공간에 다시 num이라는 이름을 붙이고 재할당된 30이라는 값을 넣는다.

남아있는 값 20은 자동으로 메모리에서 삭제되며, 이러한 기능을 가비지 콜렉터 라고 한다.
가비지 콜렉터가 어떤 시점에 진행되는지는 예측할 수 없다.

즉 변수에 다른 값을 재할당해도 원시 값 자체가 변경되는 것이 아니라 새로운 원시 값을 생성하고, 다른 메모리 공간을 참조한다.
따라서 원시 자료형은 어떤 상황에서도 불변하는 읽기 전용 데이터이며, 이것이 원시 자료형이 높은 신뢰성을 가지는 요인이다.

반면 참조 자료형은 변경이 가능한 값이다. 변수는 참조 자료형이 있는 저장공간(heap)의 주소 값을 저장하고 있다.
참조 자료형 변수는 변수가 참조하고 있는 주소 안에 저장된 값을 변경하는 방식으로 값을 변경할 수 있다.


0개의 댓글