7월 1일 목요일 TIL (1)

김병훈·2021년 7월 1일
0

til

목록 보기
28/89

원시 자료형과 참조 자료형

  • 원시 자료형과 참조자료형의 구분이 왜 필요한지에 대해서 알아야 한다.
  • 원시 자료형과 참조 자료형의 차이를 이해하고, 상황에 따라 사용해야 한다.
  • 원시 자료형이 할당될 때에는 변수에 value 자체가 담기고, 참조형이 할당될 때는 보관함의 주소가 담긴다는 개념을 코드로 짤 수 있어야한다.
  • 참조 자료형은 기존에 고정된 크기의 보관함이 아니고, 동적으로 크기가 변하는 특별한 보관함을 사용한다는 것을 알아야한다.

primitive type data 원시타입데이터

let a;
a = 1;
1; => 1;

number, boolean, null, undefined, string 이 다섯가지는 원시타입데이터라고 한다.

reference type data 참조타입데이터

heap이라는 빈 공간을 만들었다. 사물함에 이름표를 달아주고 값 대신 주소를 넣는다. 그 주소는 heap에 연결되어있고
해당 주소지의 값을 줄줄이 연결해준다.
값을 찾을 땐, 사물함안의 주소를 보고 heap에서 찾아서 반환한다. 이렇게 되면 원소를 빼거나 넣어도 해당주소지에서 처리하게 된다.
Object, Array, Function 이 세 가지는 이에 해당된다. 이것을 참조타입데이터라고 부른다.

둘의 차이점

원시타입 데이터는 각 변수간의 원시타입데이터를 복사할 경우엔, 데이터값이 복사되기 때문에 기존의 데이터에 영향이 가지 않는다. 그렇지만 참조타입데이터는 주소를 복사한다. 그렇기 때문에 복사한 데이터에서 원소를 변경하게 된다면 주소안에 있는 데이터가 변경이 되는 것이기 때문에 기존에 데이터에도 영향이 가게 된다.

원시타입
let a = 1;
a = b;
b = 2;
a; => 1
참조타입
let e = [10, 20];
let f = e;
f[0] = 50;
e; => [50, 20]

CheckPoint

  • 참조자료형이 변수에 할당되는 경우는, 변수에 이 데이터가 저장되는 곳의 주소가 할당이 된다.
    • 변수는 사실 컴퓨터의 메모리에 무언가를 저장하는 것을 보다 인간이 이해하기 쉽게 하기 위해서 만든 개념이다.
      그렇기 때문에 변수의 선언은 메모리에 자리를 잡는 것이고, 값의 할당은 메모리에 값을 채우는 것이라고 볼 수 있다.
  • 원시 자료형은 배열과 객체와는 다르게 하나의 정보만 담고 있기 때문에, 변수에 직접 값을 복사해도 큰 문제가 없다.
    변수하나에 값 하나, 단순하게 이해할 수 있다.
  • 하지만 객체와 배열은 다르다. 코드에 따라서 담길 수 있는 정보의 크기가 달라진다. 그렇기 때문에 , 동적으로 변수의 크기가 변할 수 있어야 한다. 변수에 하나의 객체를 통째로 넣을 수 없는 이유다.
    • 그래서 JS는 메모리에 공간은 알아서 부여하고, 변수는 그 공간의 주소만 참조하도록하게 해서 참조형 자료형이 만들어졌다.
let x = {foo: 3};
let y = x;
// 변수x를 변수 y에 할당하는 경우, x의 값은 참조 자료형이기 때문에, x의 값 {foo: 3}의 주소를 y에 할당한다.
// 이 상태는 변수 x,y모두 같은 {foo: 3}이라는 객체의 주소를 바라보고 있다. 
y.foo = 2;
// 3이었던 값에 dot notation으로 접근을해서 2를 할당했다. 그러면 x.foo는 어떻게 될까?
// 현재는 같은 주소를 바라보고 있는 y.foo가 2로 변경이 되었으니 , 같은 주소를 바라보고 있었던 x.foo도 2가 되어야 한다.

기타

  • === 은 주소값이 같은지를 판별하는 것 같다.
profile
블록체인 개발자의 꿈을 위하여

0개의 댓글