VisualWorksIntroduction:Page02

From 흡혈양파의 번역工房
Jump to navigation Jump to search

cincom_tutorial_vwlogo
cincom_tutorial_cincomlogo


입문서 : 스몰토크 구문(파트1)

cincom_tutorial_stlogo

cincom_tutorial_openbook Smalltalk에서는 세 가지 메시지 형태가 있습니다. 이것들을 형태로 분류하는 것은 매우 중요합니다. 왜냐면 복합문을 "객체 - 메서드"의 형태인 기본형으로 분해하는데 규칙이 있기 때문입니다.
cincom_tutorial_certificate 이 입문서에서는 스몰토크의 세 가지 메시지를 설명합니다. 또한 스몰토크에는 넓게 사용되는 네이밍 규약이 있습니다.(엄밀히 규제되는 기준은 없습니다. 하지만 기본적으로는 지키고 있습니다.)
cincom_tutorial_lightbulb
입문서에 기술되어있는 간단한 코드는 Workspace에서 "실행"이 가능합니다. Workspace를 열고, VisualWorks 메인 런쳐 화면에서 툴바 맨 끝 버튼을 클릭하거나, Tool>>Workspace 메뉴를 선택해 주십시오. 그리고 이 화면에서 코드를 Workspace에 복사해 주십시오.
cincom_tutorial_merge 스몰토크의 세 가지 메시지 형태
  • 단항
  • 이항
  • 키워드


단항 메시지

4 squared 
'pots' reverse 
10 factorial 
'chocolate' asUppercase 
6.4 rounded

위 예문은 Smalltalk 언어의 기본형을 나타내고 있습니다. 일본어와 마찬가지고, 매우 간단한 문법인 명사와 동사(그는 날았다. 그녀는 울었다.)라는 두 가지 단어를 포함한 문입니다. Smalltalk 방식에서도 같습니다. 이 방식에는 객체와 메시지가 포함되어 있습니다. 하나의 객체와 하나의 메시지를 동반하고 있어서 단항 메시지라고 부릅니다.


이항 메시지

3 + 4 
6 * 5 
'Visual','Works'

위에 쓰여진 문은 이항 메시지의 예입니다. 이항에는 두 가지 의미가 있습니다. 이것들의 식은 공통의 메시지와 두 개의 객체를 포함하고 있습니다. 수 많은 이항 메시지는 자연과학의 계산에서 사용됩니다. 하지만 그렇지 않은 것도 있습니다. 세 번째 열의('Visual', 'Works')는 메시지로써 콤마와 두 개의 String 클래스의 인스턴스를 포함하고 있습니다. "콤마" 메서드는 결합을 위해 사용됩니다. 이 경우, 받는 객체인 'Visual'에 'Works' 문자열을 덧붙이기 위해 사용됩니다. 결과로써 'VisualWorks'라는 String 객체를 생성합니다.


키워드 메시지

Dialog warn: 'Hello World' 
Transcript show: 'Hello World' 
'Got Milk?' replaceFrom: 5 to: 8 with: 'I am lost' startingAt: 6

위에 쓰여진 문은 키워드 메시지열입니다. 이 문들의 형태에는 콜론(:)이 있습니다. 첫 열에서는 Dialog 클래스를 사용하여 warn 메시지를 보냅니다. warn 메시지 뒤에 붙는 콜론은 무언가(파라메터)가 warn 메시지 뒤에 붙는 것을 의미합니다. 위 예시에서는 single quotes으로 둘러싸인 문자열이 그렇습니다.


마지막 열에는 세 가지 메시지(세 개의 단어에 콜론이 있습니다)가 있습니다. 하지만 실은 한 가지 메서드입니다. 메서드의 이름은 replaceFrom:to:with:startingAt:입니다. 좀 이상하게 느끼실지도 모르겠습니다만, 식을 분해함으로 이해하기 쉬워집니다. 세 가지 파라메터를 하나의 메서드가 가지고 있습니다. 메시지에는 메서드가 기대하는 파라메터를 기술합니다.

cincom_tutorial_dominoes.gif 스몰토크 식의 평가

평가에는 법칙이 있습니다. 식이 아무리 복잡하다 해도 반드시 분해됩니다.


오브젝트 메시지

  1. 좌에서 우로
  2. 괄호 안의 식
  3. 단항 메시지
  4. 이항 메시지
  5. 키워드 메시지

또한, 메시지는 항상 돌아와 값으로써 객체를 생성합니다. 이 객체는 식에서 다음 메시지에 대응하는 파라메터, 혹은 리시버로써 사용됩니다.

그림 S-1. 전형적인 "복합"식


괄호가 없으므로, 처음엔 단항 메시지, 다음은 이항 메시지, 마지막으로 키워드 메시지를 왼쪽에서부터 오른쪽으로 평가합니다. 따라서 처음엔 아래와 같이 평가합니다.

Date today weekday

그리고 아래와 같이 평가됩니다.

December 25, 2000 weekday


물론 "December 25, 2000"이라는 날짜는 이 연습을 동일한 날짜에 실행했을 경우 나타납니다. 그렇지 않은 경우엔 이 연습을 실행한 당일 날짜가 돌아옵니다. 즉, "Date today"는 Date 객체를 돌려줍니다. 그리고, 이 Date 객체는 날짜의 요일을 되돌리는 weekday 메시지에 전송됩니다.

그림 S-2. 스몰토크의 "복합"식 평가방법
cincom_tutorial_takenote 네이밍 규약

Skublics, Klimas, Thomas에 의해 쓰여진 Smalltalk with Style(ISBN : 0-13-165549-3)이란 서적에는, 스몰토크 프로그래밍에 의한, 사실상 표준이 되는 네이밍 규약에 대해 기술하고 있습니다. 여기서는, 적어도 지금 당장 필요한 기초지식만 중점적으로 설명하겠습니다.

  • 클래스명은 항상 첫 문자를 대문자로 시작한다
  • 메서드명은 항상 첫문자를 소문자로 시작한다
  • 메서드명은 단어를 생략하지 않고 기술한다
  • 메서드명은 그 메서드명 안에 있는 두 번째 이후 단어의 첫 문자를 대문자로 만든다
  • 메서드명 규약은 템포러리 변수명에도 적용된다

이것들을 확인했다면, 메서드의 형태를 이해하기 위해 간단한 "복합"식을 보도록 합시다.

cincom_tutorial_dominoes.gif 메서드의 형태

메서드에는 기본적으로 두 가지 형태가 있습니다.

  • 클래스측 메서드
  • 인스턴스측 메서드

각 형태를 봅시다.

Dialog warn: 'Hello World'

Dialog는 대문자로 시작했으니 클래스입니다. Dialog클래스이기 때문에 warn:은 클래스 메서드입니다. 그리고 Dialog 클래스의 인스턴스를 돌려보냅니다.(다이얼로그 박스는 'Hello World' 라는 문자열과 OK버튼이 표시됩니다.)


4 factorial

숫자 4는 SmallInteger 클래스의 인스턴스입니다. 4는 인스턴스이기 때문에 factorial은 인스턴스 메서드입니다. 그리고, SmallInteger 클래스의 인스턴스(24)를 돌려줍니다.


Date today weekday

Date는 대문자로 시작했기 때문에 클래스입니다. Date는 클래스이기 때문에 today는 클래스 메서드입니다. 그리고 Date클래스의 인스턴스(오늘 날짜)를 돌려보냅니다. 왼쪽에서 오른쪽으로 처리하다보면 다음은 weekday가 나옵니다. weekday는 Date 클래스의 인스턴스 뒤에 이어져 있기 때문에 인스턴스 메서드입니다. 그리고 심볼을 돌려줍니다.(스몰토크에서 심볼은 정수와 같은 역할을 하는 특별한 객체 형태입니다만, 여기서는 별로 중요치 않습니다.) 여기서 중요한 것은 "Date today"에서 돌아온 객체가 다음 "weekday" 메시지의 리시버로써 사용된다는 점입니다.


Transcript show: Date today weekday

왼쪽에서 오른쪽으로 옮겨가며 처리하다 보면 키워드 메시지(show:이기 때문에)가 있는 것을 알 수 있습니다. 하지만 키워드 메시지는 평가 순서에서는 맨 마지막에 해당됩니다. 처음에 단항 메시지나 이항 메시지를 찾을 필요가 있습니다. 즉, "Date today weekday"가 처음 평가됩니다. 거기서 돌아오는 값인 ""onday" 는 Transcript 객체의 키워드 메시지 show:로의 파라메터로써 사용됩니다. 즉 아래와 같이 실행됩니다.

Transcript show: Date today weekday
Transcript show: (December 25, 2000) weekday
Transcript show: Monday
cincom_tutorial_certificate 정리

스몰토크의 구문 전체중 일부를 설명했습니다만, 스몰토크 코드를 읽기 위해서는 충분한 지식입니다.


| 이전으로 돌아가기 |