SqueakByExample:2.4

From 흡혈양파의 번역工房
Revision as of 03:26, 20 August 2012 by Onionmixer (talk | contribs) (스타일 수정)
Jump to navigation Jump to search

클래스에 메소드를 추가하기

자 이제, 우리의 클래스에 몇 가지 메소드를 추가합니다.


Squeak comment.png프로토콜 패널에서 프로토콜 --all-- 을 선택합니다.


여러분은 편집 패널에서 메소드를 만들기 위한 템플릿을 보게 될 것입니다. 그 탬플릿을 선택하고 메소드 2.2의 텍스트로 교체합니다.


그림 2.5: 새롭게 만든 클래스 SBECell


메소드 2.2: SBECell의 인스턴스를 초기화 하기

initialize                                                                                                  
 super initialize                                                                                             .
 self label: ''.                                                                                               
 self borderWidth: 2.                                                                                        
 bounds := 0@0 corner: 16@16.                                                                               
 offColor := Color paleYellow.                                                                               
 onColor := Color paleBlue darker.                                                                             
 self useSquareCorners                                                                                      .
 self turnoff


3번째 라인에 있는 문자들은 그것들 사이에 아무것도 없는 두 개의 독립된 작은 따옴표 이며, 한 개의 큰 따옴표가 아닙니다! ‘’는 빈 문자열을 나타냅니다.


Squeak comment.png이 메소드 정의를 Accept 합니다.


위의 코드가 하는 역할이 무엇일까요? 우리는 여기서 모든 세부내용을 다루지는 않을 것이지만, (이 책의 나머지 부분에서 다룰 내용입니다!)여러분에게 간략한 미리보기를 제공해 드리려 합니다. 하나하나 살펴보겠습니다.

이 메소드를 “initialize”(초기화)라 부르게 됨을 주목해 주십시오. 이 이름은 매우 중요합니다. 관례적으로, 만약 클래스가, “initialize”(초기화)로 이름을 정의하면, 오브젝트가 만들어진 직후 그 이름으로 불리게 됩니다. 그러므로, 우리가 “SBECell new”를 평가할 때, 메시지 “initialize”가 새롭게 만든 오브젝트에 자동으로 발송됩니다. 오브젝트의 상태를 설정하는 작업에 사용되는 초기화 메소드(initialize method)는, 일반적으로 그 메소드의 인스턴스 변수를 설정하기 위한 용도로 쓰입니다. 이 인스턴스 변수 설정작업은 정확히 여기서 우리가 하려는 작업입니다.

이 메소드가 수행하는 첫 번째 작업은 그 메소드의 수퍼클래스(superclass)인 “SimpleSwitchMorph” 초기화를 실행하는 것입니다. 그 초기화를 실행하는 이유는, 모든 상속된 상태는 아마도 수퍼클래스의 초기화 메소드(initialize method)에 의해 적합하게 초기화 될 것이기 때문입니다.어떤 작업을 수행하기 전에, 수퍼 초기화(super initialize)를 보냄으로써 상속된 상태를 초기화하는 것은 항상 좋은 선택이며, 우리는 SimpleSwitchMorph의 초기화 메소드가 수행할 작업을 정확히 모르고 상관하지도 않지만, 그 메소드가 합당한 디폴트 값을 유지하는 몇 가지 인스턴스 변수를 설정할 것이라는 추측이 타당하므로, 우리는 상속된 상태를 초기화 작업을 수행하는 것이 낫고 그렇지 않으면 깨끗하지 않은 상태에서 시작할 위험을 감수하는 선택을 해야 합니다.

이 메소드의 나머지는 이 오브젝트의 상태를 설정합니다. 자체 라벨(self label) ‘’을 보내면, 이 오브젝트의 라벨은 빈 문자열로 설정됩니다.

표현식 0@0 coner:16@16은 아마도, 약간의 설명이 필요할 것 같습니다. 0@0은 x와 y 좌표를 가진 점 오브젝트(Point object)가 둘 모두 0으로 설정됨을 나타냅니다. 사실 0@0은 메시지 @를 인수 0과함께 숫자 0에 보냅니다. 그 효과는 숫자 0이 점 클래스(the point class)에게 좌표(0,0)을 가진 새로운 인스턴스를 만들 것을 요청하게 됩니다. 이제 우리는, 모서리 0@0과 16@16으로 직사각형을 만들도록 하는 새롭게 만든 점 메시지 coner:16@16을 보냅니다. 이 새롭게 만든 직사각형은 수퍼클래스에서 상속된 경계 변수(the bound variable)에게 할당될 것입니다.

스퀵 화면의 원점은 상단 왼쪽(the top left)이며, y좌표는 아래쪽(downward)으로 증가되는 것에 유의합니다.

메소드의 나머지는 다른 반드시 부가설명이 필요 없어야 합니다.(self-explanatory) 좋은 스몰토크 코드를 작성기술의 일부는 좋은 메소드 이름을 골라, 스몰토크 코드가 피진영어(영어를 잘못하는 사람이 말하거나 잘못하는 사람에게 말을 할 때 사용하는 단순화된 형태의 영어:역주)와 같이 읽힐 수 있어야 합니다. 여러분은 오브젝트가 그 자신에게 말하는 것 그리고 "Self use square corners!", "Self turn off"라고 말하는 것을 상상할 수 있어야 합니다.


Notes