이번 포스팅에서는 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가 이를 참조하게 한다.
때문에, 값이 바뀌지 않는 것이라고 말한다.
'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 |