본문 바로가기
개발/Javascript

원시자료형(primitive type)과 참조자료형(reference type)

by 안뇽! 2021. 7. 20.
반응형

Javascript의 Type 에는 원시자료형(primitive type)과 참조자료형(reference type)이 있다.

 

쉽게 말하면 원시 자료형은 고정된 저장공간, 참조자료형은 동적인 저장공간이다.

 

원시자료형(primitive type)

변수에 하나의 데이터만 담을 수 있다. 데이터의 값을 저장한다.

 

Boolean : true, false

Null : 의도적으로 비워놓은 값

Undefined : 값을 할당하지 않은 변수

Number : 수

String : 문자열

 

let x=1;
let y = x;//y에 x를 복사하고
y = 3;//y의 값을 바꿔도
x; // 1,
y; // 3,
//기존의 x값은 영향을 받지 않는다.

변수 y에 복사된 x값은 x의 값일 뿐이다.

y에 할당된 값을 아무리 바꾼다 해도 원본 x의 값에는 영향을 주지 않는다.

let a = 'hello'
a[2]//'l'

a[2] = 'z'//a[2]에 'z'를 할당하면 a[2]가 바뀔까??

a[2] //'l'

console.log(a) // 'hello' 
//a[2] = 'z'를 입력하였지만 여전히 a = 'hello' 이다. 문자열은 원시타입이기 때문에 원본이 변하지 않는다.

마찬가지로 a의 값은 'hello'로 고정되어 있다. 

 

참조자료형(reference type)

 

원시자료형을 제외한 모든 자료형, 배열[], 객체{}, 함수function(){}가 대표적이다.

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

 

 

let arr1=[0,1,2,3,4];

let arr2 = arr1;// arr2에 arr1의 주소를 복사한다.

arr2[3] = 999;// arr2에는 arr1의 주소가 복사되어 있기 때문에 arr1[3]에도 999가 할당된다.

arr1;//(5) [0, 1, 2, 999, 4]

arr2;//(5) [0, 1, 2, 999, 4]

//arr1의 값도 바뀐다.
let a = ['h','e','l','l','o']

a[2] // 'l'

a[2] = 'z' // a[2] 에 'z'를 할당한다.

console.log(a) // ["h", "e", "z", "l", "o"]  
//배열은 참조타입이라 원본이 바뀌었다. a[2] = 'l' 에서 a[2] = 'z' 로 바뀌었다.

 

참조자료형 : 생긴건 같지만 본질은 다른 친구들

let a = [1,2,3]  
let b = [1,2,3]

a===b // false
//a의 주소와 b의 주소가 다르기 때문에 false이다.
//참조자료형은 값이 아니라 주소를 할당받는다.

참조자료형은 값이 아니라 주소를 할당받는다.

a의 주소랑 b의 주소는 다르다.

반응형