min

원시타입과 참조타입 본문

자바스크립트

원시타입과 참조타입

minprogramming 2023. 5. 22. 10:17

원시타입과 참조 타입

자바 스크립트의 변수 타입에는 크게 원시 타입과 참조 타입으로 나누어져 있다.

1. 원시타입
: 메모리 공간을 확보하여 독자적인 값을 저장한다.
원시타입의 종류로는 string , number, bigint , boolean, undefined, symbol 이 있다.
따라서 원시타입은 불변성을 가지게 된다.
예를 들어 다음과 같은 코드가 있다고 하자
///////////////

let a = 10
a = 5
console.log(a)

///////////////
위 코드를 실행하게 되면 5가 출력되게 된다.
위 코드를 메모리 공간에서 어떻게 작용하는 지 살펴보자
(1) let a = 10
메모리에 Number라는 타입의 10이란 값이 생성되고 식별자 a는 메모리 100의 주소를 가르킨다.
(2) a = 5
메모리의 10이란 값이 5로 수정되는 겂이 아닌  Number라는 타입의 5라는 값이 새로운 메모리에 생성되고
식별자 a가 가르키는 주소가 메모리 5의 주소로 바뀌게 된다.
즉 원시타입의 불변성은 메모리의 값의 변함이 없다는 뜻인 것이다.


2. 참조 타입
:참조 타입은 원시타입을 제오한 나머지를 참조 타입 즉 객체라고 할 수 있다.
참조 타입의 경우 object의 데이터 자체는 별도의 메모리 공간(heap)에 저장되며 변수에는 그 heap의 주소가 담기게 된다.
참조 타입을 잘 이해하기 위해서 다음과 같은 코드를 준비했다.

/////////
const arr = [1,2,3]
arr.push(4)
console.log(arr)
/////////

다음을 출력하면 undefined라고 생각하신 분들도 계실 것이다.(저도 처음에는 ,....)
하지만 출력 결과는 [1,2,3,4]가 뜬다. 왜 그런 것일까?
이유는 다음과 같다.
arr라는 변수는 배열의 데이터가 담긴 heap을 저장하게 된다.
그리고 arr.push(4)를 하게 되면 배열의 데이터가 담긴 heap이 바뀌지 heap의 주소는 변하지 않게 된다.
따라서 const 에 위배되지 않고 [1,2,3,4]라고 출력될 수 있었던 것이다!!

오늘은 원시타입과 참조타입에 대해서 배워봤다....!!
만약 틀린 개념이나 모르는 부분이 있다면 010-5608-3415로 연락 주세용!!!