SqueakByExample:4.1: Difference between revisions

From 흡혈양파의 번역工房
Jump to navigation Jump to search
(이진 > 이항 으로 수정)
(번역수정)
(6 intermediate revisions by the same user not shown)
Line 1: Line 1:
==메시지 식별(identifying messages)==
==메시지 식별하기==


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


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


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




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


{| style="border: 1px solid white;"
{| style="border: 1px solid white;"
Line 16: Line 16:
|[[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: 수신자와 메서드 선택자로 구성된 두 개의 메시지와 인자들의 집합||그림 4.2: Morph color: Color yellow는 두 개의 메시지 전송으로 구성되어 있습니다: Color yellow와 Morph color: Color yellow
|}
|}




<center>{{HighlightDoubleBox|메시지는 항상 단일 리터럴(literal)이 될 수 있는 수신자(receiver), 블록 도는 변수 또는 다른 메시지를 평가한 결과에 보내어 집니다.}}</center>
<center>{{HighlightDoubleBox|메시지는 항상 단일 리터럴이 될 수 있는 수신자, 블록, 변수 또는 다른 메시지를 계산한 결과로 보냅니다.}}</center>




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


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


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


{| 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)||결과
|메시지 전송||메시지 형식||결과
|-
|-
|Color yellow||단항(Unary)||색상 만들기(Creates a color)
|Color yellow||단항||색상 만들기
|-
|-
|aPen go: 100.||키워드(keyword )||수신펜(receiving pen) 앞으로 100 픽셀 이동
|aPen go: 100.||키워드||수신펜(receiving pen) 앞으로 100 픽셀 이동
|-
|-
|100 + 20||바이너리 (binary)||숫자 100이 메세제를 수신 + 숫자 20과함께
|100 + 20||이항||숫자 100이 메세제를 수신 + 숫자 20과함께
|-
|-
|Browser open||단항(unary)||새로운 브라우저 열기
|Browser open||단항||새로운 브라우저 열기
|-
|-
|Pen new go: 100||단항과 키워드(unary and keyword)||펜이 만들어지고 100픽셀 이동
|Pen new go: 100||단항 및 키워드||펜을 만들고 100픽셀 이동
|-
|-
|aPen go: 100 + 20||키워드와 단항( keyword and binary)||수신펜(receiving pen) 앞으로 120 픽셀 이동
|aPen go: 100 + 20||키워드와 이항||수신 펜(receiving pen) 앞으로 120 픽셀 이동
|- style="text-align: center;"
|- style="text-align: center;"
! colspan="3" | 표 4.1: 메시지 전송과 그 메시지 형식들의 예
! colspan="3" | 표 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' 객체로 보내는 메세지의 실행결과를 받아오기 위해서 객체로 보냅니다.
표 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==

Revision as of 13:07, 1 March 2013

메시지 식별하기

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

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

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


  • 메시지는 메시지 선택자와 추가 메시지 인자로 구성됩니다.
  • 메시지는 수신자에 전송됩니다.
  • 메시지와 메시지 수신자의 조합을 그림 4.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입니다. 두 개의 수신자에 밑줄을 그었습니다.

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

메시지 전송 메시지 형식 결과
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: 메시지 전송과 그 메시지 형식들의 예

표 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