기본자료형 VS 참조자료형

개발(공부) 자국·2021년 4월 23일
1

원시자료형에 대해서 알아보자

기본자료형 (Primitive)

오브젝트를 제외한 모든 값은 변경 불가능한 값 (immutable value) 이다. 예를 들자면, 특히 C 언어와는 다르게도, 문자열은 불변값 (immutable) 이다. 이런 값을 "primitive values" 라고 일컫는다.


기본자료형(원시자료형)은 총 6개의 타입이 있다.

Boolean타입, Null타입, Undefined타입,
Number타입, String타입, Symbol타입

Boolean 타입은 true / false 두가지 값을 가질 수 있다.

Null 타입은 Null만을 가질 수 있다.

Undefined 타입은 값을 할당하지 않은 변수는 undefined 값을 가진다.

Number 타입은 자바스크립트가 표현할 수있는 숫자 범위 안에서 의 숫자를 가진다.

String 타입은 문자열 값으로 변경 불가능한 타입이다. 문자열을 수정할 수 없다.

Symbol 타입은 유일하고 벼경 불가능한 기본값이다. 객체 속성의 key로도 사용할 수 있다.


참조자료형 (Reference)

컴퓨터 과학에서, 객체는 식별자 (Identifier) 로 참조할 수 있는, 메모리에 있는 값이다.

참조 자료형은 3가지 타입이 있다.

배열, 객체, 함수 이 3가지가 참조 타입이다.


이 둘을 구분하는 것은 이 자료형이 변수에 담겼을 때 다른 방식으로 작동하기 때문이다.

let a = 1;
let b = a;

console.log(a); // 1
console.log(b); // 1
console.log(a === b); //true

기본자료형은 변수에 let a = 1; 할당될 때 그 값 1이 그 변수 a에 그대로 담기기 때문에

다른 변수 b에 그 변수 a를 할당해서 let b = a; 변수 a === 1와 변수 b === 1가 되면

b에 1의 값이 할당되면서 a와 b는 같은 값을 가지고 있어도 연결고리가 있는 것은 아니다.

이미 변수 b에도 1의 값이 할당 되었기 때문이다.

그래서 b에 다른 값을 재할당해도 원래 할당한 a === 1 의 값은 영향이 없다.


let arr = [1, 2, 3];
let arr1 = arr;

console.log(arr); // [1, 2, 3]
console.log(arr1); // [1, 2, 3]
console.log(arr === arr1); // false

그런데 참조자료형은 이렇게 동작하지 않는다.

참조자료형들은 대부분 그 여러 데이터를 다루는 자료들이다.

값이 여러개이다보니 효율적으로 값들을 관리하기 위해서

일반 변수가 사용하는 공간이 아닌 다른 공간에 그 데이터들을 모아서 연결지어 관리한다.

그리고 변수에는 그 다른공간의 주소를 저장해서

변수를 부를때마다 주소값을 찾아서 그 데이터들을 참조한다.

그래서 배열과 객체, 함수는 let arr = [1,2,3]; 할당을 하면

주소 값이 할당 되기 때문에 다른 변수에 재할당을 해도

let arr1 = arr; 주소 값을 할당하게 된다.

그래서 arr1 안에 배열이나 객체를 수정하게 되면 arr도

같은 주소 값에 있는 자료이기 때문에 바뀌게 된다.

마치 참조 자료형은 큰 회사 안에서 몇층 몇호실에 많은 서류들을 모아 놓고 관리하는 자료실이 있다고 할때

그 자료실의 위치를 적어둔 메모가 변수값이다.

그리고 저렇게 할당하는 것은 몇층 몇호실에 자료실이 있다고 메모한 메모를 복사해서 가지고 있는 것과 비슷하다.

어차피 자료실은 같은 자료실을 사용하기 때문에 서로 이용하면 수정한 것이 반영된다.

기본 자료형은 메모가 아닌 서류자체를 복사해 준 것과 비슷하다.

그래서 복사해간 자료를 변형해도 원본은 멀쩡한 것과 비슷하다고 생각하면 좀더 쉽게 이해할 수 있다.

이렇게 자료형에 따라 다르게 동작하다보니 차이와 특성을 알고 있어야 한다.

profile
기록을 중요하게 생각하는 사람입니다. 학습한 내용을 정리한 것이라 잘못된 정보가 있을 수 있습니다. 잘못된 정보는 언제든 말씀해 주시기 바랍니다.

0개의 댓글