T.I.L [JS] 원시타입 vs 참조타입 [21.04.01]

박준석·2021년 4월 1일
0

T.I.L

목록 보기
8/11

원시? 참조?

모든 프로그래밍 언어는 내장 자료형이 있지만, 종종 이러한 내장 자료형은 언어마다 다르다. 자바스크립트의 내장 자료형과, 내장 자료형에서 사용할 수 있는 속성이 있다.

원시자료형 참조자료형 JS를 공부하다보면 굉장히 많이 들어보는 용어이다.
근데 어떻게 보면 쉽지만, 이게 파고들면 굉장히 헷갈리고 어려운 개념이다.

그러면서 동시에 자바스크립트에서 정말정말 중요한 개념이라고 생각하는 부분이다.


원시 자료형(Primitive type)

원시타입에서 데이터는 변수에 할당할 때 원시 데이터 값이 그대로 담긴다.
변수를 복사하게 될 경우 그 변수에 담고 있는 원시 데이터 값이 복사된다. 그래서 원시타입은 메모리에 값을 그대로 저장한다.

그래서 원시 자료형은 6개만 기억하면 된다. String, Number, Boolean, Null, Undefined와 같은 타입이며 ES6(ECMAScript 2015)에서Symbol타입이 추가되어
총 6개의 로 이루어진 타입이다.

참조 자료형(Reference Type)

참조 타입 데이터는 크기가 정해져 있지 않고 변수에 할당될 때 값이 직접 해당 변수에 저장될 수 없으며, 변수에는 데이터에 대한 참조만 저장된다. 변수의 값이 저장된 힙(Heap) 메모리의 주소값을 저장한다. 참조 타입은 변수의 값이 저장된 메모리 블럭의 주소를 가지고 있고, 자바스크립트 엔진이 변수가 가지고 있는 메모리 주소를 이용해서 변수의 값에 접근한다.

그래서 참조 자료형은 크게 3개만 기억하자. 객체,배열,함수인 Object값만 참조 자료형에 해당한다.

원시/참조 특징

원시 타입 - 값을 그대로 저장
참조 타입 - 값을 주소로 저장하고, 출력시 주소와 일치하는 값을 출력


변수를 복사하고 변경하면??

  • 원시타입(Primitive type)


다른 변수에 복사 후 변경해도 기존 변수의 값엔 영향이 없다.
이유는 number2에 number을 복사할 때, 값 그 자체를 복사한 것이기 때문에 number, number2 각각 본인들만의 데이터를 새롭게 가졌다고 생각하면 될 것 같다.

  • 참조타입(Referebce type)


다른 변수에 복사 후 변경했을 때, 기존 변수의 값엔 영향이 생겼다.
이유는 참조 타입은 값의 주소를 복사하기 때문이다.
즉 arr2에 arr을 복사 할 때, arr이 가지고 있는 데이터의 주소를 복사했고,
arr2를 변경 시 이 주소를 따라가서 그 안의 데이터들을 변경하기 때문이다.

간단하게 정리

원시 타입의 복사
나랑 친구랑 똑같은 오천원을 가지고 있는 상태에서 친구가 오천원을 어떻게 쓰든 내가 사용하지 않으면 내가 가진 오천원은 불변(immutable) 즉 변하지 않는 것이다.

참조 타입의 복사
우리 집 열쇠를 복사해서 친구에게 줬다고 생각해보자. 같은 집을 공유하니까 친구가 집을 어지르면 나도 영향을 받는다!(결국 청소는 내가....)

profile
꾸준히 성장하는 개발자가 되는 것이 목표입니다!

0개의 댓글