[JavaScript] 데이터 타입, 원시 타입, 참조 타입

임뚜기·2023년 3월 31일
0

공부 이유

자바스크립트의 Primitive Type(원시타입)과 Reference Type(참조타입)의 차이점을 몰라서 공부하게 되었다.


자바스크립트의 데이터 타입!

자바스크립트의 데이터 타입으로는 원시 타입과 객체 / 배열로 나뉜다

  • 원시타입
    • null
    • undefined
    • boolean
    • string
    • number
    • bigint
    • symbol

number와 bigint의 차이점은?

number : 64bit의 2진 형식
     -(2⁵³ -1) ~ 2⁵³ -1 까지 부동 소수점을 나타내며, 위 범위를 넘어가면 안전 범위에서 넘어남
bigint : number형의 안전 범위를 넘어서는 큰 정수를 안전하게 저장 ・ 연산할 수 있는 형
    정수 끝에 n을 추가하거나 생성자를 호출해 생성함


Primitive Type(원시 타입)?

정의

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라는 원시 값은 변경되지 않음 --!>

Reference Type(참조 타입)?

정의 : Unlike Primitive, 즉 원시가 아닌 것 (객체 / 배열 / 함수 / etc...)

예시

{

	 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(값)


결론

원시 타입은 불변성을 띄고있는 값 자체를 보관하고
참조 타입은 값이 아닌 가리키는 값의 메모리 주소를 보관한다.

profile
내가 이해한데로 끄적이는 블로그

0개의 댓글