SmalltalkBestPracticePatterns:7.11
- 7.11 Interesting Return Value (흥미로운 리턴 값)
Interesting Return Value (흥미로운 리턴 값)
- 언제 메서드 끝에서 값을 명시적으로 리턴하는가?
모든 메시지는 값을 리턴한다. 메서드가 값을 명시적으로 리턴하지 않는다면 메시지의 수신자가 기본값으로 리턴된다. 이런 경우 프로시저와 함수를 구별하는 Pascal이나, 명시적 리턴값 없는 프로시저의 리턴 값에 대한 정의를 하지 않는 C에 익숙한 초보 프로그래머들에게 혼동을 야기한다. 이를 보상하기 위해 일부 프로그래머들은 모든 메서드로부터 항상 값을 명시적으로 리턴한다.
부가적 효과로 인해 작업을 하는 메서드와 자신이 리턴하는 결과 값이 중요한 메서드를 구별하는 것은 중요하다. 메서드의 예상된 사용을 재빨리 이해하고픈 익숙하지 않은 독자는 마지막 행을 훑어보고 유용한 리턴 값이 생성되었는지 여부를 즉시 이해할 수 있어야 한다. 따라서:
- 수신자가 값을 사용하도록 의도한 경우에만 값을 리턴하라.
예를 들어, VisualWorks에서 topComponent의 구현부를 생각해보자. 시각적 컴포넌트들은 트리를 구성하고, 그 루트(root)에는 ScheduledWindow가 위치한다. 트리 내 어떤 컴포넌트든 스스로 "topComponent" 메시지를 전송함으로써 루트를 불러올 수 있다. VisualPart(내부 노드와 잎의 슈퍼클래스)는 자신의 topComponent를 위한 상자를 요청함으로써 이 메시지를 구현한다:
VisualPart>>topComponent
^container topComponent
ScheduledWindow는 스스로 리턴함으로써 재귀의 base case를 구현한다. 가장 간단한 구현은 statement가 없는 메서드를 가지는 방법일 것이다. 이는 수신자를 리턴할 것이다. 하지만 결과를 수신자가 사용하도록 의도되어서 Interesting Return Value(흥미로운 리턴 값)을 사용할 경우 명시적으로 "self"를 리턴한다.
ScheduledWindow>>topComponent
^self