[JavaSciprt] 원시타입/참조타입

0

기초 개념 정리

목록 보기
4/13

원시 자료형 VS 참조 자료형

원시 자료형 데이터는 고정된 저장 공간을 차지하는 데이터 입니다.
number, string, boolean 과 같이 딱 저장되어 있는 값을 말하죠
즉 원시 타입의 데이터는 딱 하나의 데이터만 저장되어 있습니다.

타입이 원시 자료형에 대표적인 예시 입니다.

데이터 값이 고정되어 있기만 하면 어떤 일에 대한 이슈가 있을 수도 있습니다. 예를 들어 데이터를 묶음으로 한 곳에 넣고 싶을 때 말이죠!

배열/객체는 데이터가 유동적으로 넣거나 빼내 조금더 특별한 데이터 저장공간을 사용합니다.

또한 함수도 마찬가지로 원시 자료형이라고 보기에는 어려운 자료형을 가지고 있죠

배열 | 객체 | 함수 등을 주소 타입 데이터라고 말합니다. 이를 다른 말로 참조 자료형이라고 합니다.

우리는 원시 자료형과 참조형 자료형이 어떻게 다른지 알아볼 필요가 있습니다. 그래야 코딩을 할때 알맞은 부분에 정확하게 사용하겠죠?

또한 원시 자료형은 변수 자체에 값이 어떻게 담기는지, 참조 자료형은 보관함의 주소가 담긴다는 느낌을 공부해야 어떤 부분이 다른지 구분할 수있습니다.

마지막 특징은 참조 자료형은 동적으로 크기가 변하는 저장공간을 가졌다는 것을 이해해야 합니다.


원시 자료형 / 원시타입

원시 타입은 데이터가 한 저장공간을 고정적으로 사용하는 것을 말합니다. 고정이다 보니 정적으로 데이터가 저장공간을 차지 하고 있겠죠

let num = 1; // num >>> 1
let str = 'abcdefg'; // str >>> abcdefg
let bool = true; // bool >>> true;
let nothing = undefined; // nothing >>> undefined
let nothing2 = null; // nothing2 >>> null 

위와 같이 number, string, boolean, undefined, null은 원시 타입 데이터라고 말합니다.

typeof null은 object이지만
null은 원시적인 null 값
이 부분은 좀더 자세히 공부 할 필요가 있습니다...

참조 자료형 / 참조타입

참조 타입은 딱 하나의 공간을 차지하는게 아닌, 원시타입과 다른 저장공간을 가집니다. 이를 통해 참조 타입은 동적으로 데이터를 저장하거나, 추출해내 저장공간이 다양한 모습으로 변하죠!

let list = [1,2,3,4,5]; // 배열
let dict = {f : 'apple', b : [true, false], n : 123} //객체
function (...) {...} // 함수

위와 같이 하나의 저장공간이 아닌 동적으로 변화하는 저장공간을 가지게 됩니다.

그럼 왜 특별한 공간을 가질까요?
배열에 저장된 값이 10000000라면? 어떤 경우가 생길까요?
자료 하나하나 뒤적거려 찾는게 효율 적일까요?

그래서 참조 타입은 저장공간하나에 주소를 작성합니다.

단독주택이 많은 한 주택단지가 있다는 가정하에 각 한집마다 주소가 있는거 처럼 말이죠

그리고 단독주택 주소록이 있듯이, 데이터 저장공간 아래에는 heap(힙)이라는 공간을 만들어 주어 주소에 기제된 데이터를 나열로 저장해 줍니다.

이를 통해 데이터를 넣거나 뺄 때 조금 더 수월하게 할 수 있는 것이죠


하지만 주의 해야 할게 있습니다.

원시 타입의 데이터의 경우 데이터값이 복사 되기 때문에 데이터 값에 영향이 가지 않습니다.

let num1 = 1;
let num2 = 0;

num2 = num1 ; 
num2 /// 1
num2 = 3;
num2 // 3 || num1 = 1;

하지만 참조 타입의 데이터의 경우 주소를 복사해 옵니다.

let list1 = [1,2,3]
let list2 = [];

list2 = list1;
list2; // [1,2,3]

list2.pop() // 3

list2 // [1, 2]
list1 // [1, 2]

그렇다고 원시 타입과 참조 타입이 전혀 다른것은 아닙니다.
원시 타입과 참조 타입의 공통된 점은 저장공간 하나에 변수를 단 한개만 저장합니다.
참조 타입 저장공간에 많은 데이터가 들어 갈수 있다는데 어떻게 변수를 하나만? 이라고 생각할 수도 있는데, 참조 타입에는 저장공간에 주소를 변수로 할 뿐 입니다.

참고 공부 : bigintsymbol

profile
즐겁게 코딩하는 하루 🌇🌆

0개의 댓글