<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://trans.onionmixer.net/wiki/index.php?action=history&amp;feed=atom&amp;title=SmalltalkBestPracticePatterns%3A7.9</id>
	<title>SmalltalkBestPracticePatterns:7.9 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://trans.onionmixer.net/wiki/index.php?action=history&amp;feed=atom&amp;title=SmalltalkBestPracticePatterns%3A7.9"/>
	<link rel="alternate" type="text/html" href="https://trans.onionmixer.net/wiki/index.php?title=SmalltalkBestPracticePatterns:7.9&amp;action=history"/>
	<updated>2026-05-01T23:01:27Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.3</generator>
	<entry>
		<id>https://trans.onionmixer.net/wiki/index.php?title=SmalltalkBestPracticePatterns:7.9&amp;diff=3558&amp;oldid=prev</id>
		<title>Onionmixer: SBPP 7.9 Cascade 페이지 추가</title>
		<link rel="alternate" type="text/html" href="https://trans.onionmixer.net/wiki/index.php?title=SmalltalkBestPracticePatterns:7.9&amp;diff=3558&amp;oldid=prev"/>
		<updated>2013-07-29T10:00:34Z</updated>

		<summary type="html">&lt;p&gt;SBPP 7.9 Cascade 페이지 추가&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;;7.9 Cascade&lt;br /&gt;
&lt;br /&gt;
==Cascade==&lt;br /&gt;
&lt;br /&gt;
다수의 메시지를 어떻게 동일한 수신자로 포맷팅하는가?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
가장 간단한 해결책은 수신자를 생성한 표현식을 반복하는 방법으로, 그 코드는 아래와 같은 모습을 한다:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;br /&gt;
self listPane parent color: Color black.&lt;br /&gt;
self listPane parent height: 17.&lt;br /&gt;
self listPane parent width: 11.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
복합 표현식의 경우 첫 번째 간소화는 Explaining Temporary Variable(설명하는 임시 변수)을 이용해 표현식의 값을 보유한다:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;br /&gt;
| parent |&lt;br /&gt;
parent := self listPane parent.&lt;br /&gt;
parent color: Color black.&lt;br /&gt;
parent height: 17.&lt;br /&gt;
parent width: 11.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
스몰토크의 몇 안 되는 구문적 특징 중 하나는 이 문제에 대한 해결책이다. 스몰토크는 표현식을 보유하도록 임시 변수를 생성하거나 표현식을 반복해야 하는 대신 하나의 메시지 끝에 &amp;quot;여기 동일한 메시지로 가는 또 다른 메시지가 있다,&amp;quot;고 말할 수 있도록 해준다. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* 동일한 수신자로 여러 개의 메시지를 전송하기 위해서는 Cascade를 사용하라. 메시지들은 세미콜론으로 구분하라. 각 메시지는 고유의 행에 놓고 한 행만큼 들여 써라. zero 또는 one argument로 된 메시지에는 Cascades만 사용하라. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
위의 코드는 아래와 같아진다:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;br /&gt;
self listPane parent&lt;br /&gt;
    color: Color black;&lt;br /&gt;
    height: 17;&lt;br /&gt;
    width: 11&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cascade의 사용 여부는 사실상 의도의 문제이다. &amp;quot;여기 동일한 메시지로 향하는 메시지 무리가 있다,&amp;quot;고 전달하고 싶다면 Cascade를 사용하기 좋은 시점이다. 어쩌다가 보니 동일한 객체로 메시지를 전송하게 되었지만 두 메시지가 동일한 객체로 전송되는 것이 코드의 본질이 아니라면 Cascade를 사용하지 말라. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cascade와 관련해 자주 발생하는 한 가지 혼동은, 초기 표현식이 복잡할 경우 cascaded 메시지들은 어디로 전송되느냐와 관련된다. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
예를 들어:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;br /&gt;
OrderedCollection new&lt;br /&gt;
    add: 5;&lt;br /&gt;
    add: 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
위에서 들여쓰기는 두 가지 덧셈(add) 모두 클래스 자체가 아니라 새로운 OrderedCollection으로 전송됨을 암시한다. 여기서 규칙은 다음과 같다: Cascade에서 모든 연속된 메시지들은 cascade에서 첫 번째 메시지와 동일한 수신자로 (이번 경우 #add:) 향한다. 당신을 수신자에게 데려오게 된 이전의 표현식 부분은 모두 무관하다. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cascades는 오직 zero 또는 one argument 메시지와 함께 사용해야 하는 제약은 다양한 argument수로 된 Cascades를 시각적으로 파싱하는 데에 발생하는 어려움에서 비롯된다. 위의 예제에서 만일 height:width:를 단일 메시지로서 전송하면 어떻게 될까? Cascade를 이용하면 코드는 아래와 같아진다:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;br /&gt;
self listPane parent&lt;br /&gt;
    color: Color black;&lt;br /&gt;
    height: 17&lt;br /&gt;
    width: 11&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
언뜻 보면 높이와 너비가 따로 설정되었는지 아니면 함께 설정되었는지 알 수 없다. 전송된 메시지가 무엇인지 알아내느라 시간을 소요해야 한다면 Cascade을 이용해 증가한 가독성은 금새 무용지물이 된다. 다행히 대부분의 경우 메시지는 동일한 수신자로 향하며 (특히 2개 이상) 메시지는 간단하다. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Cascade의 값을 사용 중이라면 Yourself(p.186)를 사용해야 하는 수도 있다.&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:SmalltalkBestPracticePatterns]]&lt;/div&gt;</summary>
		<author><name>Onionmixer</name></author>
	</entry>
</feed>