Java Immutable Object

유경우·2024년 2월 20일
0

CS

목록 보기
10/21
post-custom-banner

들어가기 전

String 클래스를 공부하면서 불변객체를 알아보았습니다.
불변객체란 정확히 무었이며 무슨 의도로 쓰이는 걸까요?

불변 객체에 대한 설명을 좀 더 명확하게 정리해 보겠습니다.

불변 객체란?

불변 객체(Immutable Object)는 객체 지향 프로그래밍에서, 한 번 생성된 후 그 상태가 변경될 수 없는 객체를 의미합니다. 이러한 객체는 내부의 데이터를 수정할 수 없습니다. 즉, 객체가 가지고 있는 값이 초기에 할당된 이후에는 변경되지 않습니다. 재할당을 통해 새로운 객체를 참조하는 것은 가능하지만, 기존 객체의 내부 상태를 변화시킬 수는 없습니다. String, Integer, Boolean 등의 클래스가 자바에서 대표적인 불변 객체의 예입니다.

예시: String 클래스의 불변성

Java의 String 클래스를 예로 들어 불변 객체의 동작 방식을 살펴보겠습니다.

String str = "a"; // (1)
str = "b"; // (2)
str = "Immutable"; // (3)

이 코드에서 일어나는 메모리 상의 변화를 단계별로 설명하면 다음과 같습니다:

  1. (1) 실행 시: str이라는 참조 변수에 "a"라는 문자열 객체가 힙(heap) 영역에 생성되어 할당됩니다.
  2. (2) 실행 시: "a" 객체를 변경하는 대신, "b"라는 새로운 문자열 객체가 힙 영역에 생성됩니다. 그리고 str 참조 변수는 이제 "b" 객체를 가리킵니다. 이전에 생성된 "a" 객체는 더 이상 참조되지 않습니다.
  3. (3) 실행 시: 마찬가지로 "Immutable"이라는 또 다른 새로운 문자열 객체가 힙 영역에 생성되고, str 참조 변수는 "Immutable" 객체를 가리키게 됩니다. 이 과정에서 "b" 객체 역시 더 이상 참조되지 않게 됩니다.

결과적으로, (3)까지의 코드 실행 후에는 "a""b" 문자열 객체가 가비지 컬렉션(Garbage Collection, GC)의 대상이 됩니다. 이는 String 객체의 불변성 때문에 발생하는 현상입니다. String 객체의 값이 필요할 때마다 새로운 객체가 생성되고, 기존 객체는 변경되지 않으며, 더 이상 사용되지 않는 객체는 메모리에서 제거됩니다.

불변 객체의 의도

불변 객체를 사용하는 주된 의도는 다음과 같습니다:

  • 안전성: 불변 객체는 다중 스레드 환경에서 안전하게 사용될 수 있습니다. 객체의 상태가 변경될 우려가 없기 때문에 동기화 처리 없이 여러 스레드에 의해 공유될 수 있습니다.
  • 간결성: 객체의 상태가 변경되지 않기 때문에, 객체의 생애주기를 이해하고 관리하기가 더 쉽습니다. 객체가 언제 어떻게 변경될지 걱정할 필요가 없습니다.
  • 메모리 효율성: 불변 객체는 내부 상태가 같다면 재사용될 수 있습니다. 예를 들어, String 리터럴은 자바 내부에서 재사용되어 메모리 사용을 최적화할 수 있습니다.

불변 객체의 사용은 프로그램의 안정성과 예측 가능성을 높이며, 복잡한 상태 관리를 줄여주는 등 여러 이점을 제공합니다.

출처 : https://velog.io/@conatuseus/Java-Immutable-Object%EB%B6%88%EB%B3%80%EA%B0%9D%EC%B2%B4
https://mangkyu.tistory.com/131
https://devoong2.tistory.com/entry/Java-%EB%B6%88%EB%B3%80-%EA%B0%9D%EC%B2%B4Immutable-Object-%EC%97%90-%EB%8C%80%ED%95%B4-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90
https://yeoonjae.tistory.com/entry/Java-%EB%B6%88%EB%B3%80%EA%B0%9D%EC%B2%B4Immutable-Object%EC%97%90-%EB%8C%80%ED%95%B4-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90

profile
개발자
post-custom-banner

0개의 댓글