SmalltalkBestPracticePatterns:3.1
- 3.1 행위(Behavior)
객체는 행위와 상태를 통해 세상을 모델링한다. 행위(behavior)는 모델의 역동적이고, 활동적이며, 계산적 부분인 반면, 상태(state)는 행위가 실행하고 남은 것으로, 계산 전, 후, 중간에 모델이 표현되는 방식을 나타낸다.
행위와 상태 중, 행위를 올바르게 만드는 것이 더 중요하다. 행위에서 가장 중요한 것은 객체에 관한 이상한 사실 중 하나이다; 너무나 많이 축적된 경험에 위배되므로 이상하다는 표현을 쓴다. 매우 오래 전에는 표현부(representation)를 변경시키면 여러 계산이 바뀌었기 때문에 가능한 한 즉시 표현부를 얻으려 했다.
그러다 (올바르게 만들어진) 객체가 이 모든 것을 바꾸어 놓는다. 더 이상 시스템은 표현부의 노예가 될 필요가 없어진 것이다. 객체는 메시지로 이루어진 벽 뒤에 표현부를 숨길 수 있게 되면서 표현식을 자유롭게 변경하고도 하나의 객체에만 영향을 미칠 수 있게 되었다.
객체의 시스템 내 행위는 두 가지 방법으로 명시된다; 메시지와 메소드. OOPSLA에서 (객체 지향 프로그래밍 언어, 시스템, 그리고 애플리케이션 회의) 멋진 설명을 발견했는데, 다음과 같이 적혀 있었다. "화려한 절차 호출에 비해 지저분해 보인다." 계산을 메시지와 메소드로 분리하여 런타임 시 수신자의 클래스를 기반으로 메시지를 메소드에 바인딩(binding)하는 것은 일반적인 절차 호출과는 약간의 차이가 있는 것으로 보이지만 결국 큰 변화는 작은 차이에서 비롯된다.
이 문단에서는 독자에게 명확하게 의도가 전달되도록 행위를 명시하는 방법을 알려준다. 행위를 명시할 때에는 많은 제약이 당신의 선택에 영향을 미친다. 제어 흐름이 집중될수록 따르기가 쉽고, 그에 따라 어떻게 작업을 성취하게 되었는지 이해하기 위해 궁리하지 않아도 된다. 하지만 제어의 집중화는 유연성을 없앤다. 관련된 객체가 많아서 시스템 변경을 위한 객체를 대체할 기회가 많아지고, 그에 따라 코드를 완전히 팩토링할 수 있길 바랄 것이다.