본문 바로가기

JavaScript

[JavaScript] 기본형과 참조형

JS에서의 자료형은 크게 기본형과 참조형으로 구분할 수 있다.

 

 

기본형(Primitive Type)                                

 값을 그대로 할당하는 자료형으로, Number, Strignm Boolean, null, undefined가 이에 해당한다.

 기본형의 변수는 특정 메모리의 주소를 가지고 해당 메모리에 값을 저장한다. 변수에 새로운 값을 대입하는 것은 값을 변경하는 것이 아닌 새로 덮어쓰는 행위이다. 

 

var A = 4

 

 

참조형(Reference Type)                                

 값이 저장된 주소값을 할당하는 자료형으로, 주로 객체가 이에 해당하며 대표적으로 Array, Function, RegExp가 이에 해당한다.

  제일 기본적인 객체를 이용하여 참조형에서 데이터를 저장하는 과정을 살펴보자

var obj = {
	a = 'a',
	b = 1
}

 

 위와 같은 객체를 아래와 같은 과정으로 저장된다.

 객체는 프로퍼티를 가지고 있는 데, 이러한 프로퍼티의 명과 주소를 매치하기 위해서 새로운 주소공간을 할당한다. 이후 각 프로퍼티의 값이 지정될 새로운 주소 공간을 할당하여 이를 각 프로퍼티 명에 매칭한다. 객체의 주소에는 각 프로퍼티의 매칭정보가 담긴 주소(1001)를 저장한다. 이처럼 참조형 객체는 객체에 대한 정보는 어딘가 따로 저장하고 있으며, 이에 대한 주소정보를 저장한다. 때문에 서로 다른 변수에서 같은 객체를 가르키는 것이 가능하다.

  

var obj = {
	a = [4, 5, 6]
}

 

 그렇다면 객체 안에 객체가 있는 형태는 어떻게 될까? 위와 마찬가지로 프로퍼티 명과 주소를 매치하기 위한 새로운 공간을 할당할 것이다. 이때, a 역시 객체이므로 a가 가르키는 주소에는 각 배열의 원소가 지정될 메모리 주소의 매치 정보가 저장되게 되고, 배열의 값은 각각의 주소에 따로 저장된다.

 그렇다면 obj.a = 'new'와 같은 값 할당이 일어나면 어떻게 될까? a가 가르키는 주소에는 'new'라는 데이터 값이 저장될 것이다. 이때, 각 원소들이 저장되어 있던 메모리 공간은 링크를 잃게 되어 galbage collerctor라고 하는 메모리 청소기의 청소 대상이 되어 삭제되게 된다.