김지팡의 저장소
728x90

이번 포스팅에서는 Mutable객체와 Immutable객체에 대해 이야기해보고자 한다.

 

 

📌 Mutable & Immutable

 

Mutable 객체는 상태를 변화시킬 수 있는 객체를 말한다.

 

과일 타입만을 담을 수 있는 바구니가 있다고 하겠다. 바구니에는 사과가 담겨 있는데, 사과를 바나나로 바꿨다. 바구니는 그대로지만 과일이 바뀌었다. 이를 상태를 변화시킬 수 있는 객체라고 이야기할 수 있다.

 

반대로 Immutable 객체는 상태를 변화시킬 수 없는 객체를 말한다. 위와 같은 예시로, 바구니에 담겨 있는 사과를 바나나로 바꾸려고 했다고 가정하자. Mutable 객체는 바나나로 바뀌었지만, Immutable 객체의 바구니는 바나나가 들어가지 않는 바구니였다.

 

이를 상태를 변화시킬 수 없는 객체 - Immutable 객체라고 말한다.

 

코드로 살펴보면 아래와 같다.

 

// 가변 객체 - Mutable
int[] arr = new int[5];
arr[0] = 5; 
arr[0] = 1;

// 불변 객체 - Immutable
String st = "hello";
st = "world";

 

5의 크기를 가지는 int 타입 배열 arr이 있다. arr의 0번째 요소를 5로 초기화 후, 1로 초기화하여 값을 바꾸었다. 이는 상태를 변화시킨 것이기에 Mutable 하다고 말할 수 있다.

 

불변 객체로 예시를 든 String의 경우에도 값이 변한 것 아니냐고 생각이 든다. 왜냐하면, st = “world”; 이후에 st를 출력하면 “world”가 출력되기 때문이다.

 

하지만, 이는 String이 값을 가지는 방식을 알면 불변 객체라는 것을 이해할 수 있다.

 

String st = “hello”;를 하면 hello라는 객체를 메모리에 저장한다. 그리고, st라는 변수가 hello의 위치를 참조하게 된다. 이후, st = “world”;를 하면 st가 참조하고 있는 객체인 hello를 world로 바꾸는 것이 아니라 새로운 객체 world를 생성하고, st가 이를 참조하게 한다.

 

때문에, 값이 바뀌지 않는 것이라고 말한다.

728x90

'TIL' 카테고리의 다른 글

VPC 이해하기  (1) 2024.12.14
Stream API 이해하기  (0) 2024.11.24
ORM과 JPA 이해하기  (6) 2024.11.14
Set 이해하기  (0) 2024.11.08
LinkedList 이해하고 ArrayList와 비교하기  (3) 2024.11.05
profile

김지팡의 저장소

@김지팡

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!