SqueakByExample:4.1: Difference between revisions

From 흡혈양파의 번역工房
Jump to navigation Jump to search
(SBE 메시지식별 페이지 추가)
(스타일 수정)
Line 1: Line 1:
==메시지 식별(identifying messages)==
==메시지 식별(identifying messages)==


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


스몰토크에서 보낸 메시지들의 순서는 메시지의 종류에 의해 결정됩니다. 단지 3가지 종류의 메시지가 있습니다: 단항메시지(unary messages), 바이너리메시지(binary messages) 그리고 키워드(keyword messages) 메시지 입니다. 단항메시지는 항상 먼저 발송되며, 그 다음 바이너리 메시지 그리고 마지막으로 키워드 메시지들의 순서로 발송됩니다.
스몰토크에서 보낸 메시지들의 순서는 메시지의 종류에 의해 결정됩니다. 단지 3가지 종류의 메시지가 있습니다: 단항메시지(unary messages), 바이너리메시지(binary messages) 그리고 키워드(keyword messages) 메시지 입니다. 단항메시지는 항상 먼저 전송되며, 그 다음 이진 메시지 그리고 마지막으로 키워드 메시지들의 순서로 전송됩니다.


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


* 메시지는 메시지 선택자(the message selector)와 옵션 메시지 인수(the optional message arguments)로 구성됩니다.
* 메시지는 메시지 선택자(the message selector)와 옵션 메시지 인수(the optional message arguments)로 구성됩니다.
* 메시지는 수신자(receiver)에 발송되었습니다.
* 메시지는 수신자(receiver)에 전송되었습니다.
* 메시지의 조합과 그 메시지의 수신자는 그림 4.1에서 보이는 것 처럼 메시지 발송(a message send)불립니다.
* 메시지의 조합과 그 메시지의 수신자는 그림 4.1에서 보이는 것 처럼 메시지 전송(a message send)으로 불립니다.


{| style="border: 1px solid white;"
{| style="border: 1px solid white;"
Line 15: Line 15:
|[[image:message.png]]||[[image:uKeyBin.png]]
|[[image:message.png]]||[[image:uKeyBin.png]]
|- style="text-align: center;"
|- style="text-align: center;"
|그림 4.1: 수신자(receiver)와 메소드 선택자(method selector)로 구성된 두 개의 메시지와 인수들의(arguments) 세트||그림 4.2: 모프 색상(Morph color): 노랑 색상(Color yellow)은 두 개의 메시지 발송(message sends)로 구성되어 있습니다: 노랑색(Color yellow)과 모프색상(Morph color): 노랑색(Color yellow)
|그림 4.1: 수신자(receiver)와 메소드 선택자(method selector)로 구성된 두 개의 메시지와 인수들의(arguments) 세트||그림 4.2: 모프 색상(Morph color): 노랑 색상(Color yellow)은 두 개의 메시지 전송(message sends)로 구성되어 있습니다: 노랑색(Color yellow)과 모프색상(Morph color): 노랑색(Color yellow)
|}
|}


메시지는 항상 단일 리터럴(literal)이 될 수 있는 수신자(receiver), 블록 도는 변수 또는 다른 메시지를 평가한 결과에 보내어 집니다.


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


그림 4.2는 두 개의 메시지 발송(message sends), Color yellow와 a Morph color: Color yellow를 나타냅니다. 그러므로 두 개의 타원이 있습니다. 메시지 발송 “Color yellow”는 첫 번째로 실행되므로, 그것의 타원에 번호 1을 붙였습니다. 두 개의 수신자(receivers)가 있는데, 첫 번째는 메시지 color:를 수신하는 Morph(모프)이며, 다른 하나는 메시지 yellow를 수신하는 Color입니다. 두 개의 수신자(receivers)에 밑줄을 그었습니다.


수신자는 메시지에서 100과 같이, 메시지 발송(the message send) “Color yellow”의 100과 같이, 메시지의 첫 번째 구성 요소가 될 수 있습니다. 그럼에도 불구하고, 수신자(receiver)는 다른 메시지의 결과가 될 수 있습니다. 예를 들면, 메시지 '''Pen new go:100'''에서 메시지 '''go: 100'''의 수신자는 메시지 발송 '''Pen new'''에 의해 리턴된 오브젝트입니다. 다른 경우에, 메시지는, 다른 메시지 발송(message send)의 결과가 될 수 있는 receiver(수신자)라 불리는 오브젝트에 발송됩니다.
여러분의 메시지의 수신자 식별을 돕기 위해, 우리는 수신자에 밑줄을 그을 것입니다. 우리는 또한 타원과 번호로 각 메시지를 둘러 쌓을 것이며, 첫 번째에서 시작하는 메시지 보내기는 전송된 메시지의 순서를 여러분이 보시는 것을 돕기 위해 전송되게 될 것입니다.
 
그림 4.2는 두 개의 메시지 전송(message sends), Color yellow와 a Morph color: Color yellow를 나타냅니다. 그러므로 두 개의 타원이 있습니다. 메시지 발송 “Color yellow”는 첫 번째로 실행되므로, 그것의 타원에 번호 1을 붙였습니다. 두 개의 수신자(receivers)가 있는데, 첫 번째는 메시지 color:를 수신하는 Morph(모프)이며, 다른 하나는 메시지 yellow를 수신하는 Color입니다. 두 개의 수신자(receivers)에 밑줄을 그었습니다.
 
수신자는 메시지에서 100과 같이, 메시지 전송(the message send) “Color yellow”의 100과 같이, 메시지의 첫 번째 구성 요소가 될 수 있습니다. 그럼에도 불구하고, 수신자(receiver)는 다른 메시지의 결과가 될 수 있습니다. 예를 들면, 메시지 '''Pen new go:100'''에서 메시지 '''go: 100'''의 수신자는 메시지 전송 '''Pen new'''에 의해 리턴된 오브젝트입니다. 다른 경우에, 메시지는, 다른 메시지 전송(message send)의 결과가 될 수 있는 receiver(수신자)라 불리는 오브젝트에 발송됩니다.


{| style="border: 1px solid black;"
{| style="border: 1px solid black;"
|- style="color: white; background-color: black;"
|- style="color: white; background-color: black;"
|메시지 발송(message send)||메시지 형식(Message type)||결과
|메시지 전송(message send)||메시지 형식(Message type)||결과
|-
|-
|Color yellow||단항(Unary)||색상 만들기(Creates a color)
|Color yellow||단항(Unary)||색상 만들기(Creates a color)
Line 42: Line 44:
|aPen go: 100 + 20||키워드와 단항( keyword and binary)||수신펜(receiving pen) 앞으로 120 픽셀 이동
|aPen go: 100 + 20||키워드와 단항( keyword and binary)||수신펜(receiving pen) 앞으로 120 픽셀 이동
|- style="text-align: center;"
|- style="text-align: center;"
! colspan="3" | 표 4.1: 메시지 발송과 그 메시지 형식들의 예
! colspan="3" | 표 4.1: 메시지 전송과 그 메시지 형식들의 예
|}
|}


표 4.1은 메시지 보내기(message sends)의 여러 개의 예를 보여줍니다.  
표 4.1은 메시지 보내기(message sends)의 여러 개의 예를 보여줍니다. 여러분은 모든 메시지 전송들이 인수(arguments)를 갖고 있지 않다는 것을  아셔야 합니다. 열기(open)과 같은 단항 메시지(unary messages)는 인수를 갖고 있지 않습니다. '''go: 100''' 과 '''+20''' 과 같은 단일 키워드(single keyword)와 바이너리 메시지(binary messages)는 각각 한 개의 인수를 갖습니다. 단순한 메시지들과 구성된(composed) 메시지가 존재합니다. Color yellow(노랑색으로 칠하기)와 '''100 + 20'''은 단순한 메시지 입니다: 객체로 보낸 '''aPen go: 100+20;''' 메시지는 두부분으로 나뉘어 있습니다: '+ 20' 을 '100' 그리고 'go:'에게 보낸다는것은 첫번째 메시지의 결과로 만들기 위해 인자의 형태로 취해서 'aPen'으로 보낸다는 의미입니다. 객체를 반환하는 receiver(수신자)는 하나의 식(예를 들어 메시지 보내거는 할당의 의미와 literal(문자))이 될 수도 있습니다. 'Pen new go: 100' 에서보면 'go: 100' 메시지를 'Pen new' 객체로 보내는 메세지의 실행결과를 받아오기 위해서 객체로 보냅니다.
 
여러분은 모든 메시지 보내기(message sends)가 인수(arguments)를 갖고 있지 않다는 것을  아셔야 합니다.  
 
열기(open)과 같은 단항 메시지(unary messages)는 인수를 갖고 있지 않습니다.  
 
'''go: 100''' 과 '''+20''' 과 같은 단일 키워드(single keyword)와 바이너리 메시지(binary messages)는 각각 한 개의 인수를 갖습니다.
 
단순한 메시지들과 구성된(composed) 메시지가 존재합니다.
 
Color yellow(노랑색으로 칠하기)와 '''100 + 20'''은 단순한 메시지 입니다: 객체로 보낸 '''aPen go: 100+20;''' 메시지는 두부분으로 나뉘어 있습니다: '+ 20' 을 '100' 그리고 'go:'에게 보낸다는것은 첫번째 메시지의 결과로 만들기 위해 인자의 형태로 취해서 'aPen'으로 보낸다는 의미입니다. 객체를 반환하는 receiver(수신자)는 하나의 식(예를 들어 메시지 보내거는 할당의 의미와 literal(문자))이 될 수도 있습니다. 'Pen new go: 100' 에서보면 'go: 100' 메시지를 'Pen new' 객체로 보내는 메세지의 실행결과를 받아오기 위해서 객체로 보냅니다.





Revision as of 12:29, 22 August 2012

메시지 식별(identifying messages)

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

스몰토크에서 보낸 메시지들의 순서는 메시지의 종류에 의해 결정됩니다. 단지 3가지 종류의 메시지가 있습니다: 단항메시지(unary messages), 바이너리메시지(binary messages) 그리고 키워드(keyword messages) 메시지 입니다. 단항메시지는 항상 먼저 전송되며, 그 다음 이진 메시지 그리고 마지막으로 키워드 메시지들의 순서로 전송됩니다.

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

  • 메시지는 메시지 선택자(the message selector)와 옵션 메시지 인수(the optional message arguments)로 구성됩니다.
  • 메시지는 수신자(receiver)에 전송되었습니다.
  • 메시지의 조합과 그 메시지의 수신자는 그림 4.1에서 보이는 것 처럼 메시지 전송(a message send)으로 불립니다.
Message.png UKeyBin.png
그림 4.1: 수신자(receiver)와 메소드 선택자(method selector)로 구성된 두 개의 메시지와 인수들의(arguments) 세트 그림 4.2: 모프 색상(Morph color): 노랑 색상(Color yellow)은 두 개의 메시지 전송(message sends)로 구성되어 있습니다: 노랑색(Color yellow)과 모프색상(Morph color): 노랑색(Color yellow)


메시지는 항상 단일 리터럴(literal)이 될 수 있는 수신자(receiver), 블록 도는 변수 또는 다른 메시지를 평가한 결과에 보내어 집니다.


여러분의 메시지의 수신자 식별을 돕기 위해, 우리는 수신자에 밑줄을 그을 것입니다. 우리는 또한 타원과 번호로 각 메시지를 둘러 쌓을 것이며, 첫 번째에서 시작하는 메시지 보내기는 전송된 메시지의 순서를 여러분이 보시는 것을 돕기 위해 전송되게 될 것입니다.

그림 4.2는 두 개의 메시지 전송(message sends), Color yellow와 a Morph color: Color yellow를 나타냅니다. 그러므로 두 개의 타원이 있습니다. 메시지 발송 “Color yellow”는 첫 번째로 실행되므로, 그것의 타원에 번호 1을 붙였습니다. 두 개의 수신자(receivers)가 있는데, 첫 번째는 메시지 color:를 수신하는 Morph(모프)이며, 다른 하나는 메시지 yellow를 수신하는 Color입니다. 두 개의 수신자(receivers)에 밑줄을 그었습니다.

수신자는 메시지에서 100과 같이, 메시지 전송(the message send) “Color yellow”의 100과 같이, 메시지의 첫 번째 구성 요소가 될 수 있습니다. 그럼에도 불구하고, 수신자(receiver)는 다른 메시지의 결과가 될 수 있습니다. 예를 들면, 메시지 Pen new go:100에서 메시지 go: 100의 수신자는 메시지 전송 Pen new에 의해 리턴된 오브젝트입니다. 다른 경우에, 메시지는, 다른 메시지 전송(message send)의 결과가 될 수 있는 receiver(수신자)라 불리는 오브젝트에 발송됩니다.

메시지 전송(message send) 메시지 형식(Message type) 결과
Color yellow 단항(Unary) 색상 만들기(Creates a color)
aPen go: 100. 키워드(keyword ) 수신펜(receiving pen) 앞으로 100 픽셀 이동
100 + 20 바이너리 (binary) 숫자 100이 메세제를 수신 + 숫자 20과함께
Browser open 단항(unary) 새로운 브라우저 열기
Pen new go: 100 단항과 키워드(unary and keyword) 펜이 만들어지고 100픽셀 이동
aPen go: 100 + 20 키워드와 단항( keyword and binary) 수신펜(receiving pen) 앞으로 120 픽셀 이동
표 4.1: 메시지 전송과 그 메시지 형식들의 예

표 4.1은 메시지 보내기(message sends)의 여러 개의 예를 보여줍니다. 여러분은 모든 메시지 전송들이 인수(arguments)를 갖고 있지 않다는 것을 아셔야 합니다. 열기(open)과 같은 단항 메시지(unary messages)는 인수를 갖고 있지 않습니다. go: 100+20 과 같은 단일 키워드(single keyword)와 바이너리 메시지(binary messages)는 각각 한 개의 인수를 갖습니다. 단순한 메시지들과 구성된(composed) 메시지가 존재합니다. Color yellow(노랑색으로 칠하기)와 100 + 20은 단순한 메시지 입니다: 객체로 보낸 aPen go: 100+20; 메시지는 두부분으로 나뉘어 있습니다: '+ 20' 을 '100' 그리고 'go:'에게 보낸다는것은 첫번째 메시지의 결과로 만들기 위해 인자의 형태로 취해서 'aPen'으로 보낸다는 의미입니다. 객체를 반환하는 receiver(수신자)는 하나의 식(예를 들어 메시지 보내거는 할당의 의미와 literal(문자))이 될 수도 있습니다. 'Pen new go: 100' 에서보면 'go: 100' 메시지를 'Pen new' 객체로 보내는 메세지의 실행결과를 받아오기 위해서 객체로 보냅니다.


Notes