1. 데이터 타입

히치키치·2022년 1월 21일
0

⭐ 주제

  1. 기본형 타입
  2. 참조형 타입
  3. 기본형 타입과 참조형 타입이 다르게 동작하는 이유

✔ 데이터 타입 종류

⭐ 기본형 타입

number, string, boolean, null, undefined, symbol
값이 담긴 주소값을 복제

⭐ 참조형 타입

object, array, function, date, regexp
object 하위 분류 : map, weakmap, set, weakset
값이 담긴 주소값으로 이루어진 묶음 가리키는 주소값 복제

✔ 배경지식

모든 데이터는 바이트 단위의 메모리 주소값 통해 서로 구분하고 연결 가능

⭐ bit

0 또는 1로 표현되는 하나의 메모리 조각

⭐ byte

8개 bit로 구성
장점 : 검색 시간 줄임, 표현 가능한 데이터 수 늘어남
단점 : 낭비되는 bit 생김

⭐ 변수

변경 가능한 데이터가 담기는 공간

⭐ 식별자

변수명으로 어떤 데이터를 식별시 사용하는 이름

✔ 변수 선언

var a=1;
  1. 빈 메모리 공간 확보 (임시로 1003번 설정)
  2. 식별자(공간의 이름)를 a로 지정

✔ 데이터 할당

변수 영역과 데이터 영역을 분리해 중복된 데이터에 대한 처리 효율 높아짐

⭐ 데이터 할당

var a; //변수 a 선언
a="123"; //변수 a에 데이터 할당


1. 변수 영역에서 빈공간(@1003) 확보
2. 확보한 공간의 식별자를 a로 지정
3. 데이터 영역의 빈공간(@5004)에 "abc" 지정
4. 변수 영역에서 식별자 a 검색
5. 저장된 문자열의 주소(@5004)를 @1003 공간에 대입

⭐ 메모리 영역 변화

var a ="abc";
a="abcdef";


"abc"가 저장된 공간에 "abcdef" 할당 X
1. "abcdef" 문자열 생성
2. 별도의 빈 데이터 공간에 저장
3. 해당 데이터 공간 주소를 변수 공간에 연결

✔ 기본형 데이터 vs 참조형 데이터

⭐ 불변값

할당이 이루어진 데이터 영역 메모리의 변경 가능성
변경은 새로 만드는 동작을 통해서만 이뤄짐

var b=5; //1,2,3
var c=5; //4,5,6
  1. 데이터 영역에서 5 찾기

  2. 없으니 데이터 공간 지정해 5 저장

  3. 5가 저장된 데이터 공간 주소를 식별자가 b인 변수 영역에 저장

  4. 데이터 영역에서 5 찾기

  5. 기존에 5가 저장된 데이터 공간 주소 찾음

  6. 해당 데이터 공간 주소를 식별자가 c인 변수 영역에 저장

cf) 변수 vs 상수
데이터 할당된 변수 공간에 다른 데이터 재할당 가능성

⭐ 가변값

참조형 데이터를 변수에 할당
: 객체의 변수 (property) 영역 별도로 존재하며 변경가능

var obj1={
	x:3,
  	arr:[3,4,5]
}; //1 ~ 13
obj1.arr="str";

  1. obj1의 변수 영역 (@1002) 확보하고 식별자를 변수 이름인 obj1로 지정
  2. 빈 데이터 영역(@5001)에 저장해야 할 데이터가 여러 개 property로 이뤄어 객체(obj1)임
  3. 여러 개의 property를 저장하고자 객체를 위한 별도의 변수 영역 마련 (@7103~)
  4. 별도의 변수 영역 주소(@7103~)를 데이터 영역(@5001)에 저장
  5. 객체(obj1) 변수 영역 주소(@7103과 @7104)에 각각 해당하는 식별자(x과 arr)를 변수 영역에 저장
  6. x property 값(3)과 데이터 영역에 존재하는 지 확인
  7. 없으니 빈 데이터 영역(@5002)에 3 할당하고 해당 주소를 객체 변수 영역(obj1)의 식별자(x)에 해당하는 주소(@7103)에 값으로 데이터 영역 주소(@5002) 할당
  8. arr property 값([4,5,6])과 데이터 영역에 존재하는 지 확인
  9. 존재하지 않고 arr 값([4,5,6])인 객체를 위한 변수 영역 생성(@8104 ~ )
  10. 해당 변수 영역(@8104, @8105, @8106)에 식별자로 배열의 인데스 번호(0,1,2) 부여
  11. 각 인덱스에 해당하는 값(1,2,3)이 데이터 영역에 존재하는지 확인
  12. 모두 없으니 빈 데이터 영역(@5002, @5004, @5005)에 해당 값(4,5,6) 할당
  13. 데이터 영역을 탐색해 "str" 이 없으므로 빈 곳(@5006)에 할당
  14. arr 변수 영역에 식별자에 맞는 배열 값이 담긴 데이터 영역의 주소를 값으로 부여
  15. obj1의 변수영역의 값인 데이터 영역의 주소로 이동
  16. 데이터 영역의 값이 주소임으로 해당 주소로 이동
  17. @7103 ~ 으로 해당 주소부터 식별자가 arr인 곳이 나올 때까지 탐색
  18. arr인 변수 영역(@7104)에 str의 데이터 영역 주소(@5006)를 값으로 부여

참조 카운트가 0이 된 메모리 주소는 가비지 컬렉터가 수거함

0개의 댓글