원시타입과 참조타입

Verba volant, scripta manent·2020년 12월 2일
0

JavaScript

목록 보기
5/20
post-thumbnail

자바스크립트에는 원시 타입과 참조 타입이라는 두가지 자료형이 있다.

  • Primitive Type(원시 타입) : 데이터의 실제 값 할당
  • Reference Type(참조 타입) : 데이터의 위치 값만 할당

Primitive Type (원시 타입)

자바스크립트에서 원시 타입의 데이터(primitive type data; 원시 자료형)는 객체가 아니면서 method를 가지지 않는 타입을 말한다.

1. Primitive Type의 종류

  • 불린(Boolean)
  • 숫자(Number)
  • 문자열(String)
  • undefined
  • null
  • bigint
  • symbol

2. Primitive Type의 특징

  1. 원시 타입 데이터는 변수에 할당될 때 메모리 상에 고정된 크기로 저장되고 해당 변수가 원시 데이터의 값을 보관한다.
  2. 원시 타입 자료형은 모두 변수 선언, 초기화, 할당시 값이 저장된 메모리 영역에 직접적으로 접근한다.
    => 즉, 변수에 새 값이 할당될 때 할당된 메모리 블럭에 저장된 값을 바로 변경한다.

3. Primitive Type의 변수 복사

각 변수 간에 원시 타입 데이터를 복사할 경우 데이터의 값이 복사된다.
ex)

var x = 100; // 원시 타입 데이터를 선언
var y = x; // 값을 새 변수에 복사

x = 99; // 'x'의 값을 변경

console.log(y); // 100; , 'y'의 값은 변경되지 않음

여기서 var x = 100;이라는 데이터의 값을 복사하기 때문에, console을 실행하기 전에 x를 99로 바꾸었지만 이전의 값인 100을 복사해뒀기 때문에 100이 찍힌다.

Reference Type (참조 타입)

자바스크립트에서 원시 타입(Primitive Type)이 아닌 타입들을 말한다.

1. Reference Type의 종류

  • 객체(Object)
  • 배열(Array)
  • 함수(function)

2. Reference Type의 특징

  1. 참조 타입 데이터는 크기가 정해져 있지 않고 변수에 할당될 때 값이 직접 해당 변수에 저장될 수 없으며, 변수에는 데이터에 대한 참조만 저장된다.
  2. 변수의 값이 저장된 힙(Heap)메모리의 주소값을 저장한다.
  3. 참조 타입은 변수의 값이 저장된 메모리 블럭의 주소를 가지고 있고, 자바스크립트 엔진이 변수가 가지고 있는 메모리 주소를 이용해서 변수의 값에 접근한다.

3. Reference Type의 변수 복사

각 변수 간에 참조 타입 데이터를 복사할 경우, 데이터의 참조가 복사된다.
ex)

var x = { count : 100 }; // 참조 타입을 선언
var y = x; // 참조를 새 변수에 복사

x.count = 99; // 참조 타입 데이터를 변경

console.log(y); //99 , 'x'와 'y'는 동일한 참조를 담고 있기 때문에 동일한 객체를 가리킨다.

여기서 변수 x와 y는 동일한 참조를 담고 있다.
그래서 변수 y값에 { count : 100 }이라는 데이터의 참조는 변수 x값에도 동일하게 담고 있다.
그래서 변수 x의 count가 99로 바뀌면 y도 99로 변경된다.

Primitive Type vs Reference Type

1. 원시 자료형과 참조 자료형의 근본적인 차이는 보관함의 크기에서 발생한다.

원시 자료형은 고정된 크기의 보관함을 사용한다.
참조 자료형은 동적으로 크기가 변하는 특별한 보관함을 사용한다.

2. 원시 자료형이 할당될 때에는 변수에 값 자체가 담기고, 참조 자료형이 할당될 때는 보관함의 주소가 담긴다.

profile
말은 사라지지만 기록은 남는다

0개의 댓글