자바스크립트의 Primitive Type(원시타입)과 Reference Type(참조타입)의 차이점을 몰라서 공부하게 되었다.
자바스크립트의 데이터 타입으로는 원시 타입과 객체 / 배열로 나뉜다
number : 64bit의 2진 형식
-(2⁵³ -1) ~ 2⁵³ -1 까지 부동 소수점을 나타내며, 위 범위를 넘어가면 안전 범위에서 넘어남
bigint : number형의 안전 범위를 넘어서는 큰 정수를 안전하게 저장 ・ 연산할 수 있는 형
정수 끝에 n을 추가하거나 생성자를 호출해 생성함
Object(객체)가 아니면서 Method(메서드)로 가지지 않는 데이터
모든 원시 요소들은 Immutability(불변성)을 띔
원시 값이 할당 된 변수와 원시 자체를 혼동하지 말 것
원시 값이 할당 된 변수를 재할당 할 수는 있지만 객체 / 배열 / 함수를 변경하는 방식으로는 원시 값 자체를 변경할 수 없음
메서드란?
→ Object안에 Property(프로퍼티)로 정의된 함수Property(프로퍼티)란?
→ Object의 state(상태)를 나타냄
var bar = 'bar';
ex1) bar.toUpperCase // bar
ex2) bar = bar.toUpperCase // BAR
<!-- bar란 변수에 값을 재할당 할 순 있지만[ex2] 직접 변형은 불가하다[ex1] --!>
let foo = 2;
function addTwo(num) {
num += 2;
};
two(foo) // 2
<!-- addTwo 함수 내에서 foo 원시 값에 직접 연결할 수 없음 --!>
<!-- addTwo 함수 내에서 foo 원시값 복사 후 복사한 값으로 함수 실행, 위 이유로 foo라는 원시 값은 변경되지 않음 --!>
{
one: 1 // one, two, three가 value가 Stack에 있음 (Primitive Type)
two: 2
three: 3
array: [1, 2, 3, 4, 5, ...] // []안의 값이 무엇인지는 Heap에 존재 (Reference Type)
//
주소 -> 값 주소 -> 값
array [] -> [] 1,2,3,4,5,..
------------ --------------------
Stack Heap
}
<!-- 객체 자체는 Heap(힙)에 저장되고 해당 Pointer(포인터)는 Stack(스택)에 저장된다 --!>
Stack(스택)이란?
→ 컴퓨터 프로그램에서 데이터를 임시로 저장하는 자료구조 중 하나
Heap(힙)이란?
→ Object들이 할당되는 메모리 공간
Pointer(포인터)란?
→ Memory Address(메모리주소)를 가르키는 Value(값)
원시 타입은 불변성을 띄고있는 값 자체를 보관하고
참조 타입은 값이 아닌 가리키는 값의 메모리 주소를 보관한다.