Daily Front_Minhhk

[JS] 원시자료형(stack) / 참조자료형(heap) 본문

Code개발일지

[JS] 원시자료형(stack) / 참조자료형(heap)

Minhhk 2022. 11. 7. 12:40

원시자료형

JavaScript에서 원시 타입의 데이터(primitive data types; 원시 자료형)는

객체가 아니면서 method를 가지지 않는 6 가지의 타입

string, number, bigint, boolean, undefined, symbol, (null)

을 말합니다.

이 중에서 자주 사용하는 4 (+1)가지 원시 자료형

string, number, boolean, undefined, (null)

원시 자료형은 모두 "하나"의 정보, 즉, 데이터를 담고 있다.

===

원시 자료형은 데이터 보관함에 저장할 때 하나의 데이터만 담을 수 있다.

변수와 값이 stack에 할당된다.

원시 자료형은 값 자체에 대한 변경이 불가능(immutable)하지만, 변수에 다른 데이터를 할당할 수는 있다.

let word = "hello world!"
word = "hello man!"
// word라는 변수에 재할당을 하여 변수에 담긴 내용을 변경하는 것은 가능!

 

참조자료형

JavaScript에서는 참조 자료형(reference data type; 참조 타입)이라고도 부릅니다.

배열([])과 객체({}), 함수(function(){})가 대표적

변수에 넣을 수 있는 데이터 크기가 제한되기 때문에 따로 자료 구조를 구현,,

참조 자료형을 변수에 할당할 때는 변수에 값이 아닌 주소를 저장한다.

"데이터의 크기가 동적으로 변하는" 특별한 데이터 보관함이 필요해졌다 → 특별한 데이터 보관함을 heap이라고도 부릅니다.

원시 자료형과 참조 자료형의 특징

  • 원시 자료형이 할당될 때에는 변수에 값(value) 자체가 담기고, 참조 자료형이 할당될 때는 보관함의 주소(reference)가 담깁니다.
  • 그래서 참조 자료형은 기존에 고정된 크기의 보관함이 아니라, 동적으로 크기가 변하는 특별한 보관함을 사용할 수 있습니다.

참조 자료형의 ===(strict equality)는 주소값이 같은지를 확인

console.log('codestates' === 'codestates'); // true
console.log(3.14 === 3.14); // true
console.log([1,2,3] === [1,2,3]); // false
console.log({ foo: 'bar' } === { foo: 'bar' });  // false

// 배열, 객체, 함수는 참조자료형 -> 주소 값 비교 하기에 false
// string, number, undefined, null 은 원시자료형,, 값 비교 -> 같아? -> true