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

2024년 5월 16일 by구지원
thumbnail_1-4.png

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

1. 불변값

변수와 상수를 구분하는 성질은 변경 가능성 입니다.
바꿀 수 있으면 변수, 바꿀 수 없으면 상수입니다.

🤔

그럼 불변값과 상수는 같은 개념일까요?

아니요. 불변값과 상수를 명확하게! 구분할 필요가 있습니다.
변수와 상수를 구분 짓는 변경 가능성의 대상은 변수 영역 메모리 입니다.
한 번 데이터 할당이 이뤄진 변수 공간에 다른 데이터를 재할당 할 수 있는지의 여부가 관건입니다.

아래 예제를 통해 불변성의 개념에 대해 알아봅시다.

불변성
    var a = 'abc';
    a = a + 'def';
 
    var b = 5;
    var c = 5;
    b = 7;

@Line 1~2

변수 a에 문자열 abc를 할당했다가 뒤에 def를 추가하면 기존에 abcabcdef로 변하는 것이 아니라
새로운 문자열 abcdef를 만들어 그 주소를 변수 a에 저장합니다.
abcabcdef는 완전히 별개의 데이터입니다.

@Line 4

변수 b에 숫자 5를 할당합니다. 그러면 컴퓨터는 데이터 영역에서 5를 찾고,
없으면 그제서야 데이터 공간을 하나 만들어 저장합니다. 그 주소를 b에 저장합니다.

@Line 5

변수 c에 다시 같은 수인 5를 할당하려고 합니다.
컴퓨터는 데이터 영역에서 5를 찾은 후 이미 만들어놓은 값이 있으니 그 주소를 재활용합니다.

@Line 6

변수 b의 값을 7로 바꾸고자 합니다. 기존에 저장된 5자체를 바꾸는 것이 아니라 데이터 영역에서 7을 찾고
있으면 재활용, 없으면 새로 만들어 b에 저장합니다. 결국 5와 7 모두 다른 값으로 변경할 수 없습니다.

문자열 값도 한 번 만든 값을 바꿀 수 없고, 숫자 값도 다른 값으로 변경할 수 없습니다.
변경은 새로 만드는 동작을 통해서만 이뤄집니다. 이것이 바로 불변값의 성질입니다.
한 번 만들어진 값은 가비지 컬렉팅을 당하지 않는 한 영원히 변하지 않습니다.

2. 가변값

기본형 데이터는 모두 불변값이라고 했는데, 참조형 데이터는 모두 가변값일까요? 기본적인 성질은 가변값인 경우가 많고, 설정에 따라 변경 불가능한 경우도 있으며, 아예 불변값으로 활용하는 방안도 있습니다. 참조형 데이터를 변수에 할당하는 과정부터 확인해 봅시다.abcdef

참조형 데이터의 할당
    var obj = {
       a: 1,
       b: 'bbb',
    }