Immutable과 mutable은 무엇일까?
사전적 의미는 다음과 같다.
Immutable : 변경이 불가능함(불변)
mutable : 변경이 가능함(가변)
예를들어
var A = 'seung'; // 첫번째
print(A); // 출력 : 'seung'
A = 'min'; // 두번째
print(A); // 출력 : 'min'
위 A(String 타입)는 Immutable 한 속성을 가질까? mutable 속성을 가질까?
??? : A에 들어가 있는 값이 변경이 가능하니 mutable이죠!
위 대답이 맞을까?
코드를 통해 확인해보자!
var A = 'seung'; // 첫번째
print(A); // 출력 : 'seung'
print(A.hashCode); // 출력 : 315261148
A = 'min'; // 두번째
print(A); // 출력 : 'min'
print(A.hashCode); // 출력 : 87525107
// A.hashCode 를 출력하면 A가 저장된 메모리 주소를 암호화한 값을 확인할 수 있다.
메모리를 찍어보니 첫번째 A와 두번째 A는 완전 다른 메모리 주소를 가지고 있다.
이 말은 첫번째 A에 값을 넣어 줬을때 원래 A가 가지고 있는 데이터가 변경된 것이 아닌 새로운 메모리에 데이터를 할달해서 A에 할당한 것이다.
그렇기에 A(String 타입)는 초기화 후 데이터가 변경된 것이 아닌 아예 새로운 데이터를 생성해서 넣어준 것이기 때문에 A(String 타입)는 Immutable한 속성을 가지고 있다고 할 수 있다.
다음은 mutable한 예이다
var B = [1, 2, 3]; // 첫번째 B
print(B); // 출력 : [1,2,3]
print(B.hashCode); // 출력 : 133525564
B.add(4); // 두번째 B
print(B); // 출력 : [1,2,3,4]
print(B.hashCode); // 출력 : 133525564
B(List 타입)값을 변경하였지만 메모리 변경이 없다. 즉 데이터 자체가 새로 생성된 것이 아닌 추가된 상태이다. 그렇기에 B는 mutable하다고 할 수 있다.