인강/자바(중급1편)
불변 객체
꾸준2
2024. 5. 6. 15:17
기본형과 참조형
기본형 : 하나의 값을 여러 변수에서 절대로 공유하지 않는다.
참조형 : 하나의 객체를 참조값을 통해 여러 변수에서 공유할 수 있다.
int a = 10;
int b = a;
System.out.println("a : " + a); // 10
System.out.println("b : " + b); // 10
b = 20;
System.out.println("a : " + a); // 10
System.out.println("b : " + b); // 20
Address addressA = new Address("seoul");
Address addressB = addressA;
System.out.println("addressA : " + addressA.getAddress()); // seoul
System.out.println("addressB : " + addressB.getAddress()); // seoul
addressB.setAddress("busan");
System.out.println("addressA : " + addressA.getAddress()); // busan
System.out.println("addressB : " + addressB.getAddress()); // busan
사이드 이펙트(Side Effect)
특정 부분에서 발생한 변경이 예상치 못한 다른 부분에 영향을 미치는 경우
// addressB의 값만 바꾸기를 원했지만 addressA값도 변하는 경우
Address addressA = new Address("seoul");
Address addressB = addressA;
System.out.println("addressA : " + addressA.getAddress()); // seoul
System.out.println("addressB : " + addressB.getAddress()); // seoul
addressB.setAddress("busan");
System.out.println("addressA : " + addressA.getAddress()); // busan
System.out.println("addressB : " + addressB.getAddress()); // busan
불변객체(Immutable Object)
- 객체 생성 이후 내부의 상태가 변하지 않는 객체
- 필드의 값을 final로 선언
- setter를 구현하지 않음
public class ImmutableAddress {
private final String value; // final 사용
public ImmutableAddress(String value) {
this.value = value;
}
public String getValue() {
return value;
}
// setter 구현 X
}