SqueakByExample:4.1: Difference between revisions

From 흡혈양파의 번역工房
Jump to navigation Jump to search
(번역수정)
 
(용어수정)
 
(16 intermediate revisions by the same user not shown)
Line 1: Line 1:
==메시지 식별하기==
==메시지 식별하기==


스몰토크에서, 3장에 나열된  (:= ↑. ; # (){} [ : | ]) 문법의 구성요소를 제외한 모든 것이 메시지 전송입니다. 여러분은 C++에서 그랬던 것처럼, 여러분 자신의 클래스를 위해 +와 같은 연산자들을 정의할 수 있지만, 모든 연산자들이 동일한 우선권을 가지고 있는 것은 아닙니다. 무엇보다, 여러분은 메서드의 인자를 변경할 수 없습니다. "_"는 항상 이항 메시지 이며, 다른 오버로딩을 통해 단항 "_"을 가질 수 있는 방법은 없습니다.
스몰토크에서, 3장에 나열된  (:= ↑. ; # (){} [ : | ]) 문법의 구성요소를 제외한 모든 것이 메시지 전송입니다. C++에서 그랬던 것처럼, 사용자 자신의 클래스를 위해 +와 같은 연산자들을 정의할 수 있지만, 모든 연산자들이 동일한 우선권을 가지고 있는 것은 아닙니다. 무엇보다, 사용자는 메서드의 인자를 변경할 수 없습니다. "_"는 항상 이항 메시지 이며, 다른 오버로딩을 통해 단항 "_"을 가질 수 있는 방법은 없습니다.


스몰토크에서 보낸 메시지들의 순서는 메시지의 종류에 의해 결정됩니다. 단지 3가지 종류의 메시지, 단항 메시지, 이항 메시지 그리고 키워드 메시지 가 있습니다. 단항 메시지는 항상 먼저 전송되며, 그 다음 이항 메시지 그리고 마지막으로 키워드 메시지들의 순서로 전송됩니다.
스몰토크에서 보낸 메시지들의 순서는 메시지의 종류에 의해 결정됩니다. 스몰토크에는 오직 3가지 종류의 메시지, 단항 메시지, 이항 메시지 그리고 키워드 메시지 가 있습니다. 단항 메시지는 항상 먼저 전송되며, 그 다음 이항 메시지 그리고 마지막으로 키워드 메시지들의 순서로 전송됩니다. 대부분의 언어에서, 괄호는 계산 순서를 바꾸기 위해 사용합니다. 이러한 규칙들은 스몰토크 코드의 독해를 보다 쉽게 만들기도 합니다. 일반적인 경우 사용자가 규칙들에 관해 생각할 필요는 없습니다.  


대부분의 언어에서, 괄호는 계산 순서를 바꾸기 위해 사용합니다. 이 규칙들은 스몰토크 코드를 가능한 쉽게 읽을 수 있도록 만듭니다. 대부분의 시간 동안 여러분은 규칙들에 관해 생각할 필요가 없습니다. 스톨토크에서 대부분의 연산이 메시지 전달로 이루어지기 때문에 메시지를 정확하게 식별하는 작업은 매우 중요합니다. 다음 용어는 우리를 돕게 될 것입니다:
스톨토크에서 대부분의 연산은 메시지 전달로 이루어지기 때문에 메시지를 정확하게 식별하는 작업은 매우 중요합니다. 다음의 용어들을 보면 메시지를 정확하게 식별하는데 도움을 얻을 수 있습니다.


* 메시지는 메시지 ''셀렉터<sup>Selector</sup>''와 추가 메시지 인자로 구성됩니다.
* 메시지는 ''수신자<sup>Receiver</sup>''에게 전송됩니다.
* 메시지와 메시지 수신자의 조합을 그림 4.1에서 보이는 것과 같이 ''메시지 전송부(또는 부분)<ref name="역자주1">원문은 message send 라고 되어있습니다만... 한국어로 하면 "메시지 전송" 에서 끝나버리기 때문에 특정 부분을 지칭하는 메시지 전송부 정도로 번역하도록 하겠습니다.</ref>''이라고 합니다.


* 메시지는 메시지 ''선택자''와 추가 메시지 인자로 구성됩니다.
* 메시지는 ''수신자''에 전송됩니다.
* 메시지와 메시지 수신자의 조합을 그림 4.1에서 보이는 것과 같이 ''메시지 전송''이라고 합니다.


{| style="border: 1px solid white;"
{| style="border: 1px solid white;"
|- style="color: white;"
|- style="text-align: center; vertical-align:top;"
|[[image:message.png]]||[[image:uKeyBin.png]]
|[[image:message.png]]||[[image:uKeyBin.png]]
|- style="text-align: center;"
|- style="text-align: center; vertical-align:top;"
|그림 4.1: 수신자와 메서드 선택자로 구성된 두 개의 메시지와 인자들의 집합||그림 4.2: Morph color: Color yellow는 두 개의 메시지 전송으로 구성되어 있습니다: Color yellow와 Morph color: Color yellow
|그림 4.1: 수신자와 메서드 셀렉터로 구성된<BR>두 개의 메시지와 인자들의 집합||그림 4.2: Morph color: Color yellow는<BR>두 개의 메시지 전송부분으로 구성되어 있습니다:<BR>Color yellow와 Morph color: Color yellow
|}
|}




<center>{{HighlightDoubleBox|메시지는 항상 단일 리터럴이 될 수 있는 수신자, 블록, 변수 또는 다른 메시지를 계산한 결과로 보냅니다.}}</center>
<center>{{HighlightDoubleBox|메시지는 항상 단일문자(문자열)이 될 수 있는 블록, 변수 또는 다른 메시지의 계산결과를 수신자로 보냅니다.}}</center>
 
 
여러분의 메시지의 수신자 식별을 돕기 위해, 우리는 수신자에 밑줄을 그을 것입니다. 우리는 또한 타원과 번호로 각 메시지를 둘러 쌓을 것이며, 첫 번째에서 시작하는 메시지 보내기는 전송된 메시지의 순서를 여러분이 보시는 것을 돕기 위해 전송되게 될 것입니다.


그림 4.2는 두 개의 메시지 전송, Color yellow와 a Morph color: Color yellow를 나타냅니다. 그러므로 두 개의 타원이 있습니다. 메시지 발송 "Color yellow"는 첫 번째로 실행되므로, 그것의 타원에 번호 1을 붙였습니다. 두 개의 수신자가 있는데, 첫 번째는 메시지 color:를 수신하는 Morph이며, 다른 하나는 메시지 yellow를 수신하는 Color입니다. 두 개의 수신자에 밑줄을 그었습니다.
메시지의 수신자를 식별하는걸 돕기 위해, 수신자는 밑줄로 표시되어있습니다. 그리고 타원과 번호로 각 메시지를 영역으로 분리했습니다. 이렇게 하면 진행순서를 파악하는데 도움이 됩니다.


수신자는 메시지에서 100과 같이, 메시지 전송 "Color yellow"의 100과 같이, 메시지의 번째 구성 요소가 될 수 있습니다. 그럼에도 불구하고, 수신자는 다른 메시지의 결과가 될 수 있습니다. 예를 들면, 메시지 '''Pen new go:100'''에서 메시지 '''go: 100'''의 수신자는 메시지 전송 '''Pen new'''에 의해 리턴된 오브젝트입니다. 다른 경우에, 메시지는, 다른 메시지 전송의 결과가 될 수 있는 수신자 오브젝트에 발송됩니다.
그림 4.2는 두 개의 메시지 전송, Color yellow 와 a Morph color: Color yellow 를 나타냅니다. 그렇기때문에 두 개의 타원이 있습니다. 전송되는 메시지인 "Color yellow" 번째로 실행되므로, 이 타원에 번호 1을 붙였습니다. 두 개의 수신자가 있는데, 첫 번째는 메시지 color: 를 수신하는 Morph 이며, 다른 하나는 메시지 yellow 를 수신하는 Color입니다. 두 개의 수신자에 밑줄을 그었습니다.


{| style="border: 1px solid black;"
{| style="border: 1px solid black;"
Line 48: Line 45:
|}
|}


표 4.1은 메시지 보내기의 여러 가지 예를 보여줍니다. 여러분은 모든 메시지 전송들이 인자를 갖고 있지 않다는 것을  아셔야 합니다. open과 같은 단항 메시지는 인수를 갖고 있지 않습니다. '''go: 100''' '''+20''' 과 같은 단일 키워드와 이항 메시지는 각각 한 개의 인수를 갖습니다. 단순한 메시지들과 구성된 메시지가 존재합니다. Color yellow와 '''100 + 20'''은 단순한 메시지 입니다: 객체로 보낸 '''aPen go: 100+20;''' 메시지는 두 부분으로 나누어져 있습니다: '+ 20' 을 '100' 그리고 'go:'에게 보낸다는 것은 첫번째 메시지의 결과로 만들기 위해 인자의 형태로 취해서 'aPen'으로 보낸다는 의미입니다. 객체를 반환하는 수신자는 하나의 식(예를 들어 메시지 보내기는 할당의 의미와 리터럴이 될 수도 있습니다. 'Pen new go: 100' 에서보면 'go: 100' 메시지를 'Pen new' 객체로 보내는 메세지의 실행결과를 받아오기 위해서 객체로 보냅니다.
100 + 200 이라는 메시지 전송부의 100 또는 Color Yellow 라는 메시지 전송부의 Color처럼 메시지의 첫째 요소는 수신자가 될 수도 있습니다. 하지만 수신자는 다른 메시지의 결과도 될 수 있습니다. 예를 들면, 표 4.1에서 메시지 Pen new go:100 에서 메시지 go: 100은 Pen new의 결과로 인해 반환된 객체를 수신자로 인식하고 메시지를 보냅니다. 어떤 상황이라도 메시지는 다른 메시지의 결과를 받은 수신자를 메시지로 인식하고 그것을 호출한 객체로 보냅니다.
 
표 4.1에서 몇가지 예를 볼 수 있습니다. 모든 메시지 전송부들이 인자를 가져야 하는건 아니라는 것은 아닙니다. open과 같은 단항 메시지는 인자가 없습니다. '''go: 100''' 그리고 '''+ 20''' 과 같은 단일 키워드와 이항 메시지는 각각 한 개씩의 인자를 가집니다. 메시지에는 간단한 메시지들과 구성된 메시지등이 있습니다. Color yellow와 '''100 + 20'''는 간단합니다: 객체로 보낸 '''aPen go: 100+20;''' 메시지는 두 부분으로 나누어져 있습니다: + 20을 100에게 보낸다음 이 메시지의 결과를 go: 의 인자로 만들어서 aPen에게 보내게 되어있죠. 수신자는 그 자체로 오브젝트가 반환되는 표현(예를 들어 메시지 또는 문자를 할당하는경우)이 되는 경우도 있습니다. Pen new go: 100 에서 보면 go: 100이라는 메시지는 Pen new라는 메시지가 실행된 결과인 오브젝트로 전송됩니다.
 
 


==Notes==
==Notes==

Latest revision as of 02:26, 17 September 2013

메시지 식별하기

스몰토크에서, 3장에 나열된 (:= ↑. ; # (){} [ : | ]) 문법의 구성요소를 제외한 모든 것이 메시지 전송입니다. C++에서 그랬던 것처럼, 사용자 자신의 클래스를 위해 +와 같은 연산자들을 정의할 수 있지만, 모든 연산자들이 동일한 우선권을 가지고 있는 것은 아닙니다. 무엇보다, 사용자는 메서드의 인자를 변경할 수 없습니다. "_"는 항상 이항 메시지 이며, 다른 오버로딩을 통해 단항 "_"을 가질 수 있는 방법은 없습니다.

스몰토크에서 보낸 메시지들의 순서는 메시지의 종류에 의해 결정됩니다. 스몰토크에는 오직 3가지 종류의 메시지, 즉 단항 메시지, 이항 메시지 그리고 키워드 메시지 가 있습니다. 단항 메시지는 항상 먼저 전송되며, 그 다음 이항 메시지 그리고 마지막으로 키워드 메시지들의 순서로 전송됩니다. 대부분의 언어에서, 괄호는 계산 순서를 바꾸기 위해 사용합니다. 이러한 규칙들은 스몰토크 코드의 독해를 보다 쉽게 만들기도 합니다. 일반적인 경우 사용자가 규칙들에 관해 생각할 필요는 없습니다.

스톨토크에서 대부분의 연산은 메시지 전달로 이루어지기 때문에 메시지를 정확하게 식별하는 작업은 매우 중요합니다. 다음의 용어들을 보면 메시지를 정확하게 식별하는데 도움을 얻을 수 있습니다.

  • 메시지는 메시지 셀렉터Selector와 추가 메시지 인자로 구성됩니다.
  • 메시지는 수신자Receiver에게 전송됩니다.
  • 메시지와 메시지 수신자의 조합을 그림 4.1에서 보이는 것과 같이 메시지 전송부(또는 부분)[1]이라고 합니다.


Message.png UKeyBin.png
그림 4.1: 수신자와 메서드 셀렉터로 구성된
두 개의 메시지와 인자들의 집합
그림 4.2: Morph color: Color yellow는
두 개의 메시지 전송부분으로 구성되어 있습니다:
Color yellow와 Morph color: Color yellow


메시지는 항상 단일문자(문자열)이 될 수 있는 블록, 변수 또는 다른 메시지의 계산결과를 수신자로 보냅니다.

메시지의 수신자를 식별하는걸 돕기 위해, 수신자는 밑줄로 표시되어있습니다. 그리고 타원과 번호로 각 메시지를 영역으로 분리했습니다. 이렇게 하면 진행순서를 파악하는데 도움이 됩니다.

그림 4.2는 두 개의 메시지 전송, Color yellow 와 a Morph color: Color yellow 를 나타냅니다. 그렇기때문에 두 개의 타원이 있습니다. 전송되는 메시지인 "Color yellow" 는 첫 번째로 실행되므로, 이 타원에 번호 1을 붙였습니다. 두 개의 수신자가 있는데, 첫 번째는 메시지 color: 를 수신하는 Morph 이며, 다른 하나는 메시지 yellow 를 수신하는 Color입니다. 두 개의 수신자에 밑줄을 그었습니다.

메시지 전송 메시지 형식 결과
Color yellow 단항 색상 만들기
aPen go: 100. 키워드 수신펜(receiving pen) 앞으로 100 픽셀 이동
100 + 20 이항 숫자 100이 메세제를 수신 + 숫자 20과함께
Browser open 단항 새로운 브라우저 열기
Pen new go: 100 단항 및 키워드 펜을 만들고 100픽셀 이동
aPen go: 100 + 20 키워드와 이항 수신 펜(receiving pen) 앞으로 120 픽셀 이동
표 4.1: 메시지 전송과 그 메시지 형식들의 예

100 + 200 이라는 메시지 전송부의 100 또는 Color Yellow 라는 메시지 전송부의 Color처럼 메시지의 첫째 요소는 수신자가 될 수도 있습니다. 하지만 수신자는 다른 메시지의 결과도 될 수 있습니다. 예를 들면, 표 4.1에서 메시지 Pen new go:100 에서 메시지 go: 100은 Pen new의 결과로 인해 반환된 객체를 수신자로 인식하고 메시지를 보냅니다. 어떤 상황이라도 메시지는 다른 메시지의 결과를 받은 수신자를 메시지로 인식하고 그것을 호출한 객체로 보냅니다.

표 4.1에서 몇가지 예를 볼 수 있습니다. 모든 메시지 전송부들이 인자를 가져야 하는건 아니라는 것은 아닙니다. open과 같은 단항 메시지는 인자가 없습니다. go: 100 그리고 + 20 과 같은 단일 키워드와 이항 메시지는 각각 한 개씩의 인자를 가집니다. 메시지에는 간단한 메시지들과 구성된 메시지등이 있습니다. Color yellow와 100 + 20는 간단합니다: 객체로 보낸 aPen go: 100+20; 메시지는 두 부분으로 나누어져 있습니다: + 20을 100에게 보낸다음 이 메시지의 결과를 go: 의 인자로 만들어서 aPen에게 보내게 되어있죠. 수신자는 그 자체로 오브젝트가 반환되는 표현(예를 들어 메시지 또는 문자를 할당하는경우)이 되는 경우도 있습니다. Pen new go: 100 에서 보면 go: 100이라는 메시지는 Pen new라는 메시지가 실행된 결과인 오브젝트로 전송됩니다.


Notes

  1. 원문은 message send 라고 되어있습니다만... 한국어로 하면 "메시지 전송" 에서 끝나버리기 때문에 특정 부분을 지칭하는 메시지 전송부 정도로 번역하도록 하겠습니다.