Programing/Java
Immutable Objects
천재보단범재
2021. 9. 25. 23:59
이 글은 baeldung 사이트 'Immutable Objects in Java'를 해석, 정리한 글입니다.

Immutable Objects
Immutable 객체란 생성 후 내부 상태에 변함이 없는 객체를 말한다.
다르게 해석하면 Immutable 객체를 이용하는 API에서는 같은 동작을 한다는 것이 보장된다는 점이다.
반대로 Mutable 객체는 내부 상태에 변경이 가능한 객체를 말한다.
String Class는 mutable 한 것처럼 보이지만 immutable 성질을 가진 Class이다.
값을 변경하는 것이 아닌 새로운 객체를 재할당하는 것이다.
String name = "baeldung";
String newName = name.replace("dung", "----");
assertEquals("baeldung", name); // true
assertEquals("bael----", newName); // false
final 키워드 활용
final 키워드를 활용해서 immutable한 성질을 정의할 수 있다.final 키워드를 변수에 사용하면 Java Complier에서 해당 변수 값 변경을 허용하지 않는다.해당 변수를 변경하려 할 시 Error가 발생된다.
final String name = "baeldung";
name = "bael..."; // Error 발생!!!
그렇지만 Public API를 통한 객체 내부 상태 변경은 막을 수 없다.
final List<String> strings = new ArrayList<>();
strings.add("baeldung"); // possible (strings.size() : 1->2)
Make Immutable Class
- 모든 변수에 final 키워드를 사용 -> (생성자를 이용해) 변수 초기화
- read-only Methods만 생성
class Money {
// 모든 변수 final 키워드 사용
private final double amount;
private final Currency currency;
// 생성자를 통해 변수 초기화
public Money(double amount, Currency currency) {
this.amount = amount;
this.currency = currency;
}
// read-only methods
public Currency getCurrency() {
return currency;
}
public double getAmount() {
return amount;
}
}
Immutable Objects 장점
- Immutable Object를 사용하면 Multi-Thread에서 안전하게 사용 가능
- 불변의 속성때문에 side-effects에 자유롭다
728x90
반응형