원시타입과 참조타입

조원태·2022년 7월 11일
0

원시타입과 참조타입

자바스크립트는 원시타입( Primitive type)과 참조타입(Reference Type)이 존재합니다
원시타입으로는 string, number, boolean, null, undefind 가 존재하고
이 타입들은 변수에 할당될때 메모리에 고정 크기로 원시 데이터에 저장되며 해당 데이터가
변수에 직접적으로 가르키고 있습니다 또한 원시타입 데이터는 값이 변하지 않는 불변성을
가지고 있기 때문에 재할당시 값이 변하는 것 처럼 보일수 있지만 사실 새로운 메모리에
재할당한 값이 저장되고 변수가 가리키는 메모리가 달라졌을 뿐입니다.

let a = 1;    //a에 1을 할당
let b = a;	  //b에 a를 할당

a += 10;      //a 에 10을 더함
console.log(a) // 11 
console.log(b) // 1

a에 원시타입 number(1)을 할당하고 b에 a를 할당 했습니다
a에 10을 더하고 출력을 해보면 이상하게 분명 b에 a를 할당했는데 값이 1이나옵니다
b는 a를 할당 했으니 b도 똑같이 11이 되어야 하는데 말이죠

그러면 이번엔 참조 타입을 할당 해보겠습니다

let a = { x: 1 }  //a에 객체를 할당
let b = a         //b에 a를 할당

a.x += 10;        //객체 키값으로 10을 더함
console.log(a.x)  // 11
console.log(b.x)  // 11

이번엔 동일하게 11이 나왔습니다 분명 원시타입과 다르게 할당한 것이 아님에도
결과가 다르게 나오는 이유가 무엇일까요?

원시타입과 참조타입의 차이

원시타입과 참조타입의 다른점은 메모리에 어떠한 것을 가져가느냐의 차이 입니다

let a = 1  

let b = a 	copy value of a 


let a = { x: 1 }
 -> a has "address"  of { x:1 }
 let b = a 	// copy value of a

원시타입이든 참조타입이든 b = a 에 실행은 다른게 없습니다 a 의값을 b에 집어넣는다
하지만 어떤 값을 할당 하는것에 다른점이 있습니다
원시타입 같은경우 a에 할당 되어있는 1자체를 b에 저장하지만
참조타입 같은경우 a에 할당되어 있는 주소를 b에 저장합니다

참조타입에는 object, array, function 이 있으며 이를 변수로 할당하면
메모리의 주소를 가르키는 값이 복사가되어 변수에 할당됩니다
참조타입을 부르는 방법이 여러가지 있으며
어떤 값을 참조한다 (reference)
어떤 값의 주소를 가르킨다 (address)
어떤 값을 가르켜 포인팅한다 (pointer)

자바스크립트는 변수가 다른곳에 들어가거나 이동을 할때 항상 값을 복사합니다
그대상이 실제값 전체인지 아니면 값을 가르키고있는 주소값인지가 다를 뿐입니다

0개의 댓글