SqueakByExample:2.4

From 흡혈양파의 번역工房
Revision as of 08:11, 18 July 2018 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 메서드는 오브젝트의 상태를 설정하는데 사용하며, 보통 인스턴스 변수를 설정합니다. 이것이 정확히 여기서 할 일입니다.

이 메서드가 수행하는 첫 번째 동작(두번째 줄)은 "SimpleSwitchMorph" super클래스의 initialize 메서드를 실행하는 것입니다. 이 개념은 어떤 상속받은 상태든지 상위 메서드의 initialize 메서드를 통해 올바르게 초기화 된다는 것입니다. 어떤 다른 동작을 수행하기 전에, super initialize를 보내어 상속받은 상태를 초기화하는 것은 언제나 바람직한 생각입니다. SimpleSwitchMorph의 initialize 메서드가 무얼 할지에 대해서는 정확히 모르며 상관하지도 않지만, 타당한 기본 값을 유지하는 일부 인스턴스 변수를 설정하는데 있어서는 최선의 방법이므로, 이를 호출하는 것이 더 나으며, 그렇지 않으면 깔끔하지 않은 상태로 시작할 위험에 빠져들게 됩니다.

이 메서드의 나머지 부분에서는 이 객체의 상태를 설정합니다. self label:' ' 을 보내면, 이 객체의 레이블을 빈 문자열로 설정gkq니다.

표현식 0@0 corner:16@16 은 아마도, 약간의 설명이 필요할거같네요. 0@0 은 x와 y 좌표 각각을 0으로 설정하는 Point 객체입니다. 0@0은 메시지 @를 인자 0과 함께 숫자 0으로 보냅니다. 이에 대한 결과로, 숫자 0이 Point 클래스에 좌표 (0,0)에 대한 새 인스턴스를 만들어 달라고 요청할 것입니다. 이제 모서리 0@0과 16@16으로 Rectangle을 만들도록 하는 새롭게 만든 점 메시지 corner:16@16을 보냅니다. 새롭게 만든 직사각형은 super클래스에서 상속된 bounds에게 할당할 것입니다.

스퀵 화면의 기준점은 상단 왼쪽이며, y 좌표는 아래 방향으로 된다는것에 유의하십시오.

메서드의 나머지 부분은 자체적으로 설명할 수 있어야 합니다. 좋은 스몰토크 코드를 작성하는 예술적인 측면은 좋은 메서드 이름을 골라서 스몰토크 코드가 쉬운 영어(pidgin English)처럼 보일 수 있게 하는 것입니다. 오브젝트가 자신과 대화하면서 "Self use square corners!", "Self turn off"라고 말하는 것을 상상할 수 있어야 합니다.


Notes