노트 #22 | 원시 자료형과 참조 자료형

HyeonWooGa·2022년 7월 11일
0

노트

목록 보기
23/74

개요

고정된 공간을 차지하는 데이터를 원시자료형(primitive data type), 대량의 데이터를 다루기에 적합한 배열과 객체는 참조 자료형(reference data type) 이라고 분류합니다. 참조 자료형은 원시 자료형과 달리 저장 공간이 계속 늘어날 수 있습니다.


학습 목표

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

원시 타입 자료형 개요

  • 메모리의 스택(stack)에 변수명에 해당하는 이름표에 값(value)가 보관됩니다.
  • number, boolean, null, undefined, string 5가지는 원시 자료형입니다.
  • bigint, symbol 도 원시 자료형이지만 자주 사용하지 않습니다.

참조 타입 자료형 개요

  • 메모리에 힙(heap)이라는 빈공간을 만들어서 값(요소)들을 줄줄이 연결해줍니다.
  • 이름과 주소(reference)를 스택(stack)에 저장해서 필요할 때 이름과 주소값을 참조해서 요소들을 CRUD 합니다.
  • array, object, function 3가지가 참조 자료형에 해당합니다.

원시 자료형과 참조 자료형 데이터 복사 비교

  • 원시 자료형 : 원시 자료형 간의 데이터(값, value) 복사시에 값자체를 복사하기에 서로의 값에 영향이 가지 않습니다. (immutable)
let a = 1;  // a=1
let b = a;  // a=1, b=1
let b = 2;  // a=1, b=2
  • 참조 자료형 : 참조 자료형 데이터 복사시에 주소(refernece)를 복사하기에 서로의 값(요소)에 영향이 갈 수 있습니다. (mutable)
// 서로의 요소에 영향을 줄때
let arr1 = [10, 20];	  // arr1 = [10, 20]
let arr2 = arr1;		  // arr1 = [10, 20], arr2 = [10, 20]
let arr2[0] = 15;		  // arr1 = [15, 20], arr2 = [15, 20]

// 서로의 요소에 영향을 주지 않기 위한 예시
let arr1 = [10, 20];	  // arr1 = [10, 20]
let arr2 = arr1.slice();  // arr1 = [10, 20], arr2 = [10, 20]
let arr2[0] = 15;		  // arr1 = [10, 20], arr2 = [15, 20]

왜 원시 자료형이라고 부르나요?

  • 옛날 컴퓨터(BASIC 등)에서는 데이터 보관함 한 칸(stack)에 하나의 데이터만 넣을 수 있는 그때의 "원시적인" 방식이였습니다.
  • 배열이 없지는 않았지만 보통 사이즈가 제한되어 있었습니다.
  • 변수에는 하나의 데이터만 담습니다.

왜 참조 자료형이라고 부르나요?

  • 옛날 컴퓨터에서는 배열(리스트) 개념을 구현하기 어려워서 띄어쓰기, 탭, 쉼표 등으로 데이터를 구분하여 배열과 비슷한 형태로 자료 구조를 구현하기 시작했습니다. (이 흔적은 csv에서 찾아볼 수 있습니다.)
  • 과거에는 보통 배열의 사이즈가 제한되어 있었기 때문에 배열을 여러개 만들어야 한다거나 요소의 길이가 변경되는 CRUD 진행시 발생되는 번거로움이 많이 있었습니다.
  • 그에 대한 해결법으로 현재는 "데이터의 크기가 동적으로 변하는" 특별한 데이터 보관함을 사용합니다.
  • 참조 자료형의 변수에는 특별한 데이터 보관함을 찾아 갈수 있는 주소를 저장하고 CRUD가 필요할 때 해당 주소를 참조(reference)하여 값(요소)들을 관리합니다.

특별한 데이터 보관함 heap

  • 자기 마음대로 사이즈를 늘렸다가 줄였다가 합니다.
  • "동적(dynamic)으로 변한다"라고 표현하기도 합니다.
  • 데이터는 별도로 관리되고 우리가 직접 다루는 변수에는 주소가 저장됩니다.

결론


변수에는 원시 값 혹은 주소만 지정할 수 있습니다.

주소는 크기가 변하는 특별한 데이터 저장소(heap)를 참조합니다.


profile
Aim for the TOP, Developer

0개의 댓글