dart / Immutable vs Mutable

restl2seung·2022년 6월 6일
0

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하다고 할 수 있다.

0개의 댓글