본문 바로가기
Web dev/Javascript

자바스크립트 07 원시 자료형(primitive data type)과 참조 자료형(reference data type)

by growingTangerine 2022. 11. 7.

1. 현재의 무드: 재밌음

2. 오늘 학습한 내용 중 키워드: 원시 자료헝 vs 참조 자료형

3. 오늘 학습한 내용 요약

 

둘의 차이는 "컴퓨터가 데이터를 어떻게 저장하는가"에 있다. 

 

자바스크립트에는 두 가지 카테고리로 데이터 타입을 나누고, 그 두가지를 다르게 대한다. 

 

원시 자료형 (primitive data types)

: 객체가 아니며, 메서드를 가지지 않는 간단한 데이터 타입을 의미한다. 

Numbers, String, Bollean, Null, Undefied, Symbols 

 

* 근데, string 메서드 있지 않나? 

-> 사실은 자바스크립트는 원시 자료형인 string을 string objects 로 변환한 후 string object method를 사용하는 것이다. (대충격)

 

저장 방식: 변수를 선언하면, stack에 변수명으로 저장.  

 

let numOne = 50;
let numTwo = 50;

 

 

위 코드를 작성했을 때, 데이터 값이 같은지와 상관 없이 변수명에 따라 각각의 방을 내어준다. 

 

let numOne = 50;
let numTwo = numOne // numTwo = numOne = 50
numOne = 100;
console.log(numOne) // 100
console.log(numTwo) // 50

 

따라서 하나의 값을 바꾸더라도 그에 해당하는 방에 있는 값만 변할 뿐, 다른 방에 있던 numTwo의 값은 유지된다. 

 

참조 자료형 (reference data types) 

: dynamic in nature. 고정된 크기를 가지지 않는다. 대부분이 객체로 취급되며, 따라서 메서드를 갖는다. 

objectives, functions, collections, arrays, dates, other types of objects... 

 

저장 방식: 변수를 선언하고 참조 자료형의 데이터를 할당할 경우, 컴퓨터는 그 데이터를 변수명에 넣어주는 것이 아니라, pointer, 해당 값이 메모리에 저장되어있는 주소만 변수명에 넣어준다. 그리고 데이터는 heap 이라는 dynamic한 곳에 따로 저장해준다. 

 

 

let objecti1 = {
name: 'Bingeh',
age: 18
};

let object2 = object1 // stack에는 두개가 생기지만, 둘 다 같은 pointer를 갖게 됨

//updating object1
object1.age = 20;

console.log(object2.age) // 20

 

 

 

원시 자료형에서 변수명 = 해당 데이터가 저장된 곳

참조 자료형에서 변수명 = 해당 데이터가 저장된 곳의 주소 

 

라는 것이 포인트! 

 

 

Reference) https://www.freecodecamp.org/news/primitive-vs-reference-data-types-in-javascript/