기본형 데이터와 참조형 데이터

정다롱·2024년 11월 28일

JavaScript

목록 보기
1/2

📝 데이터 타입의 종류

기본형(원시형) 데이터

  • 숫자, 문자열, 불리언, null, undefind 등
  • 불변성을 갖는 데이터

참조형 데이터

  • 객체, 배열, 함수, 날짜, 정규식 등
  • 가변성을 갖는 데이터

❓ 기본형과 참조형의 구분 기준

가변성과 불변성이란 무엇일까?
var a = 2
a = 4
이러면 값이 2에서 4로 변경될텐데, 그럼 이것도 변하는 데이터 아닌가?

데이터의 불변성 여부는 데이터 영역 메모리의 변경 가능성으로 판단한다.


📝 메모리와 데이터

컴퓨터의 모든 데이터는 바이트 단위의 식별자, 메모리 주소값을 통해 서로를 구분하고 연결할 수 있다

식별자 = 변수명
어떠한 데이터를 식별하는 데 사용하는 이름
변수
변할 수 있는 값(데이터)

변수를 선언하고 할당하는 과정에서 메모리 영역은 어떤 작업을 수행하는지 간단하게 정리해봤다.

var a = 2 선언과 할당

a = 4 재할당

분명 a의 값은 2에서 4로 바뀌었지만 참조하는 값이 변경되었을 뿐, 기존 데이터를 수정하지 않고 새 값을 생성했기 때문에 불변성을 가져 기본형 데이터라고 한다. (숫자, 문자열, null 등등)

그럼 참조형 데이터는 어떨까?

객체의 선언과 할당

var obj = {
	a : 1,
	b : "b"
};

obj.a = 2 재할당

재할당 후에도 obj가 참조하는 값은 데이터3 그대로이다. 결과적으론 데이터3의 값이 변경되었다는 것과 같은 뜻이라 가변성을 가져 참조형 데이터라고 한다.


📝 변수의 복사

기본형 데이터 복사
var a= 10
var b = a

기본형 데이터의 경우 참조하는 값을 복사한다.

a = 20 재할당을 하면 어떻게 될까?

a = 20, b = 10, a !== b
기본형 데이터의 복사는 이렇게 이루어진다.

참조형 데이터 복사
var obj1 = { a: 1, b: "b" }
var obj2 = obj1

참조형 데이터도 기본형과 같이 참조하는 값을 복사한다.

obj1.a = 2 재할당을 하면 어떻게 될까?

기본형 데이터와 다르게 참조하는 값은 동일하나 참조하고 있는 값의 내부에서 값이 변경된다.
obj1 = {a: 2, b: "b"}, obj2 = {a: 2, b: "b"}
obj1 === obj2
참조형 데이터의 복사는 이렇게 이루어진다.

다만 위 예시의 obj1.a = 2 처럼 내부 프로퍼티를 변경하는 게 아닌, obj1 = {a: 2, b: "b"} 과 같이 변수(obj1)의 값을 직접 변경하는 경우 참조형 데이터임에도 참조하는 값이 변경된다.

이를 통해 참조형 데이터의 가변성은 변수의 값 자체를 변경하는 게 아닌, 내부 프로퍼티를 변경할 때에만 적용된다는 것을 알 수 있다.

0개의 댓글