불변 객체

사이드 이펙트의 근본적인 원인 ⇒ 공유된 객체의 값을 변경한 것

불변 객체 도입

불변 객체(Immutable Object): 객체의 상태(객체 내부의 값, 필드, 멤버 변수)가 변하지 않는 객체

public class ImmutableAddress {

		private final String value;
		
		public ImmutableAddress(String value) {
				this.value = value;
		}

		public String getValue() {
				return value;
		}
 
		@Override
		public String toString() {
				return "Address{" +
				"value='" + value + '\\'' +
				'}';
		}
}

불변 객체 - 값 변경

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;
		}
}
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());
				}
}