프로그래밍언어/JAVA

[Java] 가변객체, 불변객체

shoney9254 2023. 3. 30. 14:10
반응형

Java에서 가변(mutable) 객체와 불변(immutable) 객체의 차이점은 객체의 내용을 변경할 수 있는지 여부!

사실 자바를 사용했다면, 해당 어휘에 대해서만 모를 뿐이지 모두가 사용해본 내용일 것이다.

아래 내용들을 보면서 어떤 의미인지 알아보자.

 

1. 가변 객체 (Mutable Object)

  • 객체의 내용을 변경할 수 있는 객체입니다.
  • 객체가 생성된 후, 내부의 상태를 변경할 수 있습니다.
  • 가변 객체를 사용하면 메모리 사용량이 크게 증가할 수 있습니다.
List<String> mutableList = new ArrayList<>();
mutableList.add("A");
mutableList.add("B");
mutableList.add("C");
mutableList.remove(1); // "B" 제거
 
 
 

2. 불변 객체 (Immutable Object)

  • 객체가 생성된 후, 내부의 상태를 변경할 수 없는 객체입니다.
  • 불변 객체를 사용하면 안정성과 보안성이 향상됩니다.
  • 불변 객체는 스레드 안전성을 보장합니다.
String immutableString = "Hello, world!";
immutableString.toUpperCase(); // 새로운 문자열을 반환하지만 immutableString 객체의 내용은 변하지 않음
 

불변 객체의 경우, 객체가 생성된 후에는 내부 상태를 변경할 수 없으므로, 새로운 객체를 생성하거나 복사해야 하는 경우가 많습니다. 이러한 특성으로 인해, 불변 객체는 보안성이나 안정성이 중요한 경우, 혹은 함수형 프로그래밍에서 많이 사용됩니다.

반면, 가변 객체는 내부 상태를 변경할 수 있으므로, 유연한 코드 작성이 가능하며, 일부 자료 구조나 알고리즘에서는 가변 객체를 사용해야만 효율적인 작업이 가능한 경우가 있습니다.

반응형