[Java] 자바로 프로그래밍 입문하기: 3.3. 자료형 설계하기 (2)
불변성(Immutability) 자바의 String과 같은 불변 자료형은 한 번 생성되면 그 값이 절대 변하지 않는다는 특성을 가지고 있습니다. 반면, 자바의 배열과 같은 가변 자료형은 변할 가능성이 있는 객체의 값들을 다루죠. 이 장에서 다루었던 자료형들 중, <Charge>, <Color>, <Stopwatch>, <Complex>는 불변 객체이며, <Picture>, <Histogram>, <Turtle>, <StcokAccount>, <Counter>는 가변 객체입니다. 자료형을 불변으로 만들 것인지에 대한 것은 중요한 설계 결정 중 하나이며, 응용프로그램의 목적에 따라 달라집니다. 불변형(Immutable types) 많은 자료형의 목적은 변하지 않는 값을 캡슐화하고 기본 자료형과 같은 방식으로 동작하게 만드는 것입니다. 예를 들어, 한 프로그래머가 <Complex> 클라이언트를 구현한다면 아마도 코드에서 두 복소수 변수와 관해 z = z 0 와 같이 작성했을 것입니다. 이는 double형이나 int형 변수와 같은 방식이죠. 하지만 <Complex>가 가변형일 때를 생각해보죠. z의 값이 z = z 0 이라는 대입문 이후에 바뀌었다면, z 0 값 역시 바뀌게 됩니다. 왜냐하면, z와 z 0 은 같은 객체를 참조하고 있기 때문이죠! 이러한 예상치 못한 결과로 인해 흔히 앨리어싱(aliasing) 버그라고 하는 것이 발생하며, 객체지향 프로그래밍의 입문자들을 깜짝 놀라게 만드는 원인 중 하나입니다. 우리가 불변 객체를 구현하는 아주 중요한 이유 중 하나는 대입문과 함수의 인자, 반환값으로부터 그것들이 변할 가능성에 대한 걱정을 덜어낼 수 있다는 사실입니다. 가변형(Mutable types) 많은 자료형 추상화의 주된 목적은 변하는 값을 캡슐화하기 위함입니다. <Turtl...