원시자료형과 참조자료형

Dl2l·2023년 1월 2일
0

🦖원시자료형(Primitive type)

왜 '원시'자료형일까? 옛날에는 메모리 용량이 제한되어 변수 하나에 데이터 용량이 제한된 하나의 원시 자료형밖에 담을 수 없었다고 한다. 그 시절의 원시적인 방식인 셈이라 생각하니 원시자료형이 보다 친근하게 느껴졌다ㅎㅎㅎ

원시자료형이란

고정된 저장 공간을 차지하는 데이터를 모두 원시 자료형(primitive type)이라고 한다. 좀 더 자세히 말하면 객체가 아니면서 method를 가지지 않는 6가지의 타입이다.

그 종류로는 number, string,, boolean, null, underined(값을 할당하지 않은 변수)와
es6의 symbol이 있다.

원시자료형의 특징

- 하나의 변수에는 하나의 데이터만을 담을 수 있다.
  • 값 자체에 대한 변경이 불가능(immutable)하지만, 변수에 다른 데이터를 할당할 수는 있다.

  • 언어 구조체 중 가장 빨리 연산처리된다.

원시자료형 변수에 데이터가 할당되는 과정

변수를 선언하면 별도 공간에 데이터를 저장한 주소를, 선언한 식별자의 변수에 대입한다.

자세히 알아볼까?!!

  1. 변수를 선언하면 컴퓨터는 우선 메모리의 빈 공간에 식별자(여기서 study)를 저장하고 그 공간에 자동으로 undefined를 할당한다.

  1. 원시형 데이터를 할당하려고 하면 별도의 공간에 데이터를 저장하고 그 공간의 주소(여기서 2000)를 변수의 값 영역에 할당한다.

원시자료형은 이렇게 할당된다!

원시자료형의 복제

원시자료형은 할당이나 연산 시 복제되는데, 값이 담긴 주솟값을 바로 복제한다.

(원시자료형 변수 a를 복사한 b는 , 식별자 a를 검색해서 같은 주소를 참조한다.)

그런데 복제된 변수가 변경된다면 새로운 데이터 영역에 값이 저장되고 복제된 변수에도 새로운 데이터 영역의 값이 들어간다. 여기서 변수 데이터 영역 자체는 변경되지 않기 때문에 원시자료형은 불변값이라고 한다.

🦖참조자료형(Reperence type)

참조자료형이란

원시자료형이 아닌 모든건 참조 자료형이다. 객체, 배열, 함수, 날짜, 정규표현식 등과 es6에서 추가된 map, WeakMap, Se, WeakSet등이 객체의 하위 분류에 속한다.

참조자료형은 저장 공간의 크기가 동적으로 변하는 자료형 타입이다.

참조자료형의 데이터는 언제 늘어나고 줄어들지 모르기 때문에 별도의 저장 공간을 마련하여 따로 관리한다.

조금 더 자세히 설명하자면,

원시자료형과 다르게 데이터 그룹이 담겨야 하기에 별도의 변수 영역을 확보해서 데이터 영역 빈공간에 그 정보를 저장한다. 이 때 정보가 다른 데이터 영역에 있을 경우 그 주소를 참조한다고 할 수 있다.

참조자료형 변수에 데이터가 할당되는 과정

아래와 같은 객체를 예시로 할당 과정을 알아보자!
let obj1 = {

a: 1,

b: 'bbb'

};

  1. obj1이라는 변수를 만들었다! 컴퓨터는 빈공간을 확보하고(요기선 1001에 입주!), 그 주소의 이름을 obj1로 지정한다.
  1. 어라 저장하려고 보니 객체다. 내부의 프로퍼티들을 저장해야한다.
  1. 별도의 변수 영역을 마련한다. (원시자료형과 차이점)
  1. 마련한 변수 영역의 주소(7000)를 데이터영역 (여기서 2001번)에 저장한다.
  1. 변수영역에 각각 a, b라는 프로퍼티 이름을 저장한다.
  1. a의 값인 1을 데이터 영역에서 찾아본다. 없어서 2003에 임의로 추가한다.
  1. 변수영역 '값'에 데이터 영역의 주소를 넣어준다.

만약 값이 바뀌면 그 값이 있는 새로운 데이터영역의 주소를 넣어준다. 데이터 영역 주소의 값이 바뀌진 않는다.

그래서 데이터영역은 불변값, 변수 영역은 언제나 바뀌는 가변값이다.

참조자료형의 복제

obj를 복제한 obj2를 만들면, 새로운 객체를 만든게 아니라 obj가 바라보던 객체를 함께 바라보고 있다.(포인터가 같다고 표현)

obj === obj2는 완벽히 동일한 객체를 참조한다고 말한다.

그리고 참조 자료형의 ===는 데이터가 같은지가 아니라 주소값이 같은지를 확인한다.

그리고 중요한 것!

원시자료형 a를 복사한 변수 b의 값을 바꾸면 b의 값(주소)가 달라지는데
참조자료형 obj1을 복사한 변수 obj2의 프로퍼티 값을 바꿔도 obj2의 값은 달라지지 않는다!

profile
안녕하세요

0개의 댓글

관련 채용 정보