자바에서 최대한 객체를 불변으로 하면 좋다고 들어서 다 불변으로 바꾸려고 하는데

객체 상태를 무조건 바꿔야 하는 경우 어디를 불변으로 설정해야 할지 애매한 부분이 있음


예를 들어서 Car랑 Car의 위치를 표현하는 Position이라는 클래스가 있을 때

Car가 이동해서 Position의 값이 변경되어야 한다면 


public class Position { private final int value; } public class Car { private Position 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이 가변이 되는데

 

아무튼 이런 경우는 둘 중 어느 방식이 더 나음?