원시타입,참조타입

fe_sw·2022년 7월 30일
0

Javascript

목록 보기
7/22
post-thumbnail

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

원시타입

원시타입(Primitive type)의 데이터는 불변하는 값으로, 메모리를 한번 할당받으면 값이 변경되지 않는다(불변성).


데이터 복사가 일어날 때 메모리 공간을 새로 확보하여 독립적인 값을 저장한다.

값을 재할당하면 새로운 메모리 공간을 할당받아 값을 넣고, 변수가 가리키는 메모리주소를 변경한다.
이전 값은 더 이상 사용되지 않으므로 가비지 컬렉션 대상이 된다.

자바스크립트에서 원시타입은 string, number, bigint, boolean, undefined, symbol 총 6가지이다.

참조타입

참조 타입은 변수에 할당될 때 값이 직접 해당 변수에 저장되는 것이 아니다.변수에는 데이터에 대한 참조(주소)만 저장된다.

원시 타입을 제외한 모든 것이 참조 타입으로, 객체, 배열, 함수 등이 모두 참조 타입이다.(또는 object타입)

const person = {
  name: 'Lee'
}

const p1 = person
p1 === person  // true (객체 타입을 담은 변수를 다른 변수에 할당하면, 메모리 주소를 공유하기 때문에 같은 객체를 가리킨다.)


const p2 = { ...person }

p2 === pserson  // false(객체를 복사해서 새로운 변수에 할당하면, 객체의 구성은 같을 수 있어도 메모리 주소가 다르기 때문에 서로 다른 객체이다.)

원시타입과 가장 큰 차이점은 변수의 크기가 동적으로 변한다는 것이다.참조타입의 데이터 는 별도의 메모리 공간(heap)에 저장되며,

변수에 할당 시 데이터에 대한 주소(Heap메모리의 주소값)가 저장되기 때문에 자바스크립트 엔진이 변수가 가지고 있는 메모리 주소를 이용해서 변수의 값에 접근하게 되는것이다.

또한 값을 재할당할때 원래있던 메모리 공간에서 값을 바꾼다.

결론

원시 타입(Primitive Type)

  • 값의 저장 방법: 하나의 데이터만 가진다
  • 변수에 할당: 값(value)

참조 타입(Reference Type)

  • 값의 저장 방법: heap에 데이터'들'을 저장 후, 주소를 가진다.
  • 변수에 할당: 주소(reference)

0개의 댓글