반응형
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 객체의 내용은 변하지 않음
불변 객체의 경우, 객체가 생성된 후에는 내부 상태를 변경할 수 없으므로, 새로운 객체를 생성하거나 복사해야 하는 경우가 많습니다. 이러한 특성으로 인해, 불변 객체는 보안성이나 안정성이 중요한 경우, 혹은 함수형 프로그래밍에서 많이 사용됩니다.
반면, 가변 객체는 내부 상태를 변경할 수 있으므로, 유연한 코드 작성이 가능하며, 일부 자료 구조나 알고리즘에서는 가변 객체를 사용해야만 효율적인 작업이 가능한 경우가 있습니다.
반응형
'프로그래밍언어 > JAVA' 카테고리의 다른 글
[Java8] Optional 사용 방법과 예시 (0) | 2024.06.12 |
---|---|
[Java8] Optional을 사용할 때 주의해야 할 사항과 관련된 예제 소스 (0) | 2024.06.12 |
[Java] String, StringBuilder, StringBuffer 차이점 (0) | 2023.03.30 |
[JAVA] StringBuilder 메서드 별 간단한 사용 예제 (0) | 2023.03.29 |
[JAVA] 다형성 간단한 예제 및 설명 (0) | 2023.03.03 |