SqueakByExample:2.4
클래스에 메서드 추가하기
이제 클래스에 몇 가지 메서드를 추가해보도록 하겠습니다.
프로토콜 패널에서 --all-- 프로토콜을 선택하십시오.
편집 창에서 메서드를 생성 템플릿을 보게 될 것입니다. 이를 선택하고 메서드 2.2의 내용으로 바꾸십시오.
메서드 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번째 줄에 있는 ' ' 문자는 큰 따옴표가 아니라 사이에 아무것도 없는 두 개의 분리된 작은 따옴표입니다! ‘ ’ 는 빈 문자열을 나타냅니다.
이 코드가 하는 역할이 무엇일까요? 여기서는 모든 자세한 내용을 다루지는 않겠지만(이 책의 나머지 부분에서 다룰 내용입니다!), 간단한 미리 보기를 보여드리겠습니다. 하나하나 살펴보겠습니다.
"initialize"라고 하는 메서드를 보겠습니다. 이름은 굉장히 중요합니다! 관례에 따라, 클래스에서 "initialize"라는 메서드를 정의하면, 오브젝트를 만들고 나서 바로 호출됩니다. 따라서, "SBECell new"를 실행하면, “initialize”메시지를 새로 만든 오브젝트에 자동으로 보냅니다. initialize 메서드는 오브젝트의 상태를 설정하는데 사용하며, 보통 인스턴스 변수를 설정합니다. 이것이 정확히 여기서 할 일입니다.
이 메서드가 수행하는 첫 번째 동작(두번째 줄)은 "SimpleSwitchMorph" 상위 클래스의 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을 보냅니다. 새롭게 만든 직사각형은 상위 클래스에서 상속된 bounds에게 할당할 것입니다.
스퀵 화면의 원점은 상단 왼쪽이며, y좌표는 아래 방향으로 진행함에 유의하십시오.
메서드의 나머지 부분은 자체적으로 설명할 수 있어야 합니다. 좋은 스몰토크 코드를 작성하는 예술적인 측면은 좋은 메서드 이름을 골라서 스몰토크 코드가 쉬운 영어(pidgin English)처럼 보일 수 있게 하는 것입니다. 오브젝트가 자신과 대화하면서 "Self use square corners!", "Self turn off"라고 말하는 것을 상상할 수 있어야 합니다.