DATA TYPES

이남수·2020년 1월 30일
0

데이터 구조의 종류

  • 기본형(Primitive Type) : Number, String, Boolean, null, undefined
    값을 메모리에 그대로 할당
  • 참조형(Reference Type) : Object
    값이 저장된 주소값을 할당(참조)

두개의 차이를 알아보자

  • 기본형 데이터의 변수 선언
var a; 
  1. 변수를 선언시 메모리에 변수가 담길 공간 확보 -> @413
  2. 확보된 공간의 주소값을 변수명과 매칭
var a; 
a = 10;
  1. a라는 변수에 특정 값이 입력되면 a라는 변수명이 선언되었는지 확인후 없으면 1번과정을 실행하고 있으면 변수명과 매칭된 주소값(@413)을 찾아가 데이터 10을 입력
var a; 
a = 10;

var b = a;
  1. 1번과 2번의 과정을 진행하고 b라는 변수의 주소값(@414)에 10을 입력
var a; 
a = 10;

var b = a;
b = false;
  1. 이때 기본형 데이터의 경우 서로 다른 변수의 비교가 바로되기때문에 변수 b에 새로운 값을 할당하면 a와 b는 서로 다른 값이됨 (a !== b)
  • 참조형 데이터의 변수 선언
var obj = {  
  a: 1,
  b: 'b'
}
  1. 변수를 선언시 메모리에 변수가 담길 공간 확보 -> @413
  2. 확보된 공간의 주소값을 변수명과 매칭
  3. 할당할 변수가 참조형 데이터의 경우 obj 안에 있는 값들의 주소정보를 저장할 공간 확보 -> @1011
  4. a의 값을 저장할 공간을 확보 -> @1012
  5. 그 주소를 3번의 주소정보를 저장할 공간(@1011)에 입력
  6. b의 값을 저장할 공간을 확보 -> @1013
  7. 주소를 3번의 주소정보를 저장할 공간(@1011)에 입력
  8. 각각의 주소정보에 해당하는 공간(@1012, @1013)에 각각의 값을 입력
  9. 3번의 주소정보를 저장할 공간의 주소(@1011)를 1번에서 확보한 공간(@413)에 입력
var obj = {  
  a: 1,
  b: 'b'
}
var obj2 = obj;
  1. 1번과 2번 과정을 진행하고 -> @414
  2. 3번의 주소정보를 저장한 공간(@1011)의 주소값을 1번에서 확보한 공간(@414)에 입력
obj2.a = 10;
console.log(obj2.a);	// 10
console.log(obj.a);	// 10
  1. obj2 의 property 인 a의 값을 10으로 변경시 obj와 obj2 가 같은 주소(@1011)을 가르키고 있기때문에 같은 값이 찍힘 (obj === obj2)
  • 참조형 데이터 안에 또다른 참조형 데이터가 있을 경우(nested)
var obj3 = {
	a: [4, 5, 6] 
}
  1. 변수를 선언시 메모리에 변수가 담길 공간 확보 -> @547
  2. 확보된 공간의 주소값을 변수명과 매칭
  3. 할당할 변수가 참조형 데이터의 경우 obj 안에 있는 값들의 주소정보를 저장할 공간 확보 -> @1184
  4. a의 값을 저장할 공간을 확보 -> @1185
  5. @1185를 @1184에 입력
  6. @1185에 데이터를 입력해야하나 데이터를 확인해보니 참조형데이터이기때문에 4, 5, 6 에 대한 공간확보(@1326, @1327, @1328)
  7. @1326, @1327, @1328를 @1185에 맵핑
  8. @1326, @1327, @1328에 해당하는 값 4, 5, 6을 각각 입력
  9. 모든 객체에 대하여 맵핑완료후 @547에 @1184주소를 입력
var obj3 = {
	a: [4, 5, 6] 
}
obj3.a = 'new';
  1. property a 에 새로운 문자열 new 를 할당하게 되면 @1185 공간에 'new'를 입력하고 기존@1185에 가지고 있던 주소정보들(@1326, @1327, @1328)이 사라진다.
  2. 사라진 주소에 있던 값들 (4, 5, 6)은 링크가 사라지게 되고 가비지콜랙터에 의해 추후에 삭제된다.
profile
큘슈호윤

0개의 댓글