자바에서 최대한 객체를 불변으로 하면 좋다고 들어서 다 불변으로 바꾸려고 하는데
객체 상태를 무조건 바꿔야 하는 경우 어디를 불변으로 설정해야 할지 애매한 부분이 있음
예를 들어서 Car랑 Car의 위치를 표현하는 Position이라는 클래스가 있을 때
Car가 이동해서 Position의 값이 변경되어야 한다면
저렇게 Position이 불변이라면 이 Position의 value를 변경해야 하면 Car의 position 필드에 다시 넣어야 하니까 결국 Car는 가변이 되고
public class Position { private int value; } public class Car { private final Position position; }Car의 position 필드에 final을 붙이는 경우 Position의 값을 변경하기 위해서는 Position이 가변이 되는데
아무튼 이런 경우는 둘 중 어느 방식이 더 나음?
Position을 외부에 노출시킬거면 Position의 value를 불변으로 해서 변경 시마다 새로 생성하고 외부에 노출시키지 않려면 Car의 position을 불변으로 해서 변경 시마다 value를 변경해도 되지 불변 관점에서 보자면 그렇다는거야
ㄱㅅㄱㅅ 외부 노출에 따라서 생각할 수도 있겠구나
ㅇㅇ 그렇지만 불변은 절대의 가치가 아니니까 여러 관점에서 고민해봐야지