불변 객체 - 값 변경
불변 객체를 사용하지만 그래도 값을 변경해야 하는 메서드가 필요하면 어떻게 해야할까?
예제
먼저 mutable 객체를 만들어 보고 immutable 객체로 수정해보자.
package lang.immutable.change;
public class MutableObj {
private int value;
public MutableObj(int value) {
this.value = value;
}
public void add(int addValue) {
value = value + addValue;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}
MutableMain
package lang.immutable.change;
public class MutableMain {
public static void main(String[] args) {
MutableObj obj = new MutableObj(10);
obj.add(20);
System.out.println("obj =" + obj.getValue());
}
}
예제2
package lang.immutable.change;
public class ImmutableObj {
private final int value;
public ImmutableObj(int value) {
this.value = value;
}
public ImmutableObj add(int addValue) {
int result = value + addValue;
return new ImmutableObj(result);
}
public int getValue() {
return value;
}
}
=> add 메서드를 보자. value는 바꿀 수 없기 때문에 새로운 객체를 생성해서 return 한다. 불변도 유지하면서 새로운 결과도 만들 수 있다.
public class ImmutableMain1 {
public static void main(String[] args) {
ImmutableObj obj1 = new ImmutableObj(10);
ImmutableObj obj2 = obj1.add(20);
System.out.println("obj1 = " + obj1.getValue());
System.out.println("obj2 = " + obj2.getValue());
}
}
불변 객체를 설계할 때 기존 값을 변경해야 하는 메서드가 필요할 수 있다. 이 때는 기존 객체의 값을 그대로 두고 대신에 변경된 결과를 새로운 객체에 담아서 반환하면 된다. 결과를 보면 기존 값이 그대로 유지되는 것을 확인할 수 있다.
* 인프런 '김영한의 실전 자바 - 중급 1편'을 참고하여 작성하였습니다.
'프로그래밍언어 > Java' 카테고리의 다른 글
[Java 중급] String 클래스 - 비교 (0) | 2024.08.13 |
---|---|
[Java 중급] String 클래스 (0) | 2024.08.12 |
[Java 중급] 불변 객체 (0) | 2024.08.12 |
[Java 중급] 공유 참조와 사이드 이펙트 (0) | 2024.08.08 |
[Java 중급] 기본형과 참조형의 공유 (0) | 2024.08.08 |