[Javascript] 데이터 타입 - 종류/ 변수 할당/ 복사/ 가비지 컬렉터

반응형

01 데이터 타입의 종류


자바스크립트에서 데이터 값의 타입은 기본형(Primitive Type)과 참조형(Reference Type)으로 구분된다. 기본형과 참조형의 구분 기준은 값의 저장 방식과 불변성 여부이다.

💡 [기본형과 참조형의 구분 기준]
1. 복제의 방식
    (1) 기본형 : 값이 담긴 주소 값을 바로 복제
    (2) 참조형 : 값이 담긴 주소 값들로 이루어진 묶음들을 가리키는 주소 값을 복제
2. 불변성의 여부
    (1) 기본형 : 불변성을 띔
    (2) 참조형 : 불변성을 띄지 않음

https://velog.io/@imjkim49/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%83%80%EC%9E%85-%EC%A0%95%EB%A6%AC

 


02 변수 할당 예시 - 참조형 데이터의 변수 할당 과정


아래의 코드를 바탕으로 변수 할당 예시를 봐보면 변수(객체) obj1을 1001이라는 주소에 할당해두고 그 안에 들어가는 a와 b 변수를 7103, 7104 주소에 각각 저장한다. 그리고 그거에 맞는 데이터 값인 1과 'bbb'를 또 다른 주소 5001과 5002에 저장하는 식으로 메모리를 할당한다.

 

만약에 데이터를 변경한다면?

obj1 객체에 있는 a 변수의 값을 1에서 2로 변경하고자 할 때, 데이터 주소값에 2가 없으면 그다음 공간인 5003 메모리 공간에 데이터 값을 할당한다. 그리고 a의 참조 데이터 위치를 1의 값이 있던 5001에서 2의 값이 있는 5003으로 변경해주면 끝이 난다.

변수를 저장할때 변수라는 공간을 두고 데이터를 다른 공간에 저장해서 그 저장공간을 불러오는 식으로 한다. 그래서 값이 변경되면 또 다른 공간에 값을 두고 그 저장공간을 불러와서 바꾸기 때문에 이전 데이터 값들과 같이 쓸모 없는 값들은 가비지 컬렉터가 수거하고 다님, 그렇게 메모리 관리를 함

 

03 가비지 컬렉터 GC, Garbage Collector


더 이상 사용되지 않는 객체를 자동으로 메모리에서제거하는 역할을 함. 자바스크립트는 가비지 컬렉션을 수행함으로써 개발자가 명시적으로 메모리 관리를 하지 않아도 되도록 지원함. 자바스크립트 내부적으로 수행되며, 개발자는 가비지컬렉션에 대한 직접적인 제어를 할 수 없다

 

04 참조카운트란 ?


객체를 참조하는 변수나 다른 객체의 수를 나타내는 값. 참조 카운트가 0인 객체는 더이상 사용되지 않음으로, 가비지 컬렉터에 의해 메모리에서 제거됌

 

 

05 중첩 객체 할당


obj 객체 안에 배열값이 선언될 경우 먼저 obj 객체를 주소 1001번위치에 할당하고 그 안에 들어가는 x와 arr 변수를 각각 7103, 7104 위치에 할당한후 그 안에 들어가는 데이터 값을 5001, 5002, 5003번에 할당해주고 그 값을 참조하도록 하면 된다. 그리고 arr 배열안에 인덱스 3가지의 공간도 별도로 잡아주어 데이터 값을 참조하도록 한다.



06 변수 복사


a 변수에 값을 저장하고 다른 변수인 b를 선언하면서 데이터 값으로 a변수를 지정하면 a변수의 데이터 저장공간을 참조해서 가지고 온다. 


복사 이후 값 변경
위 처럼 변수를 복사하고 값을 변경하고자할때 문제가 생기는데 아예 데이터 주소가 같기때문에 변수 a와 obj1의 데이터 값도 변경이 되기 때문에 이와 같은 방법을 대체할 수 있는 방법이 필요하다.


변수 복제 문제 해결 : 복사이후 객체 자체를 변경

그래서 위의 문제와 같이 다른 변수의 데이터의 값에 영향을 주지 않고 데이터의 값을 변경하기 위해서는 값이 변경되는 값이 아니면 그대로 참조하고 변경이 된 데이터가 있으면 데이터 저장공간에 추가적으로 할당하여 참조 위치를 해당 위치로 바꿔주면 된다.

반응형