JUST WRITE

Immutable Objects 본문

Programing/Java

Immutable Objects

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

 

Immutable Objects

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
반응형

'Programing > Java' 카테고리의 다른 글

Java SE vs Java EE  (0) 2021.10.03
StringBuilder vs StringBuffer  (0) 2021.09.30
Wrapper Class  (0) 2021.09.24
Static  (0) 2021.09.24
접근 제어자  (0) 2021.08.26
Comments