SqueakByExample:2.4

From 흡혈양파의 번역工房
Revision as of 13:28, 18 July 2018 by Onionmixer (talk | contribs) (검수 20180718)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
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 메서드는 객체의 상태를 지정하는데에 사용되며, 일반적인 경우라면 initialize 메서드를 통해서 인스턴스 변수를 설정합니다. 이것이 정확히 이 메서드에서 하는일 입니다.

이 메서드가 수행하는 첫 번째 동작(두번째 줄)은 상위클래스인 "SimpleSwitchMorph" 의 initialize 메서드를 실행하는 것입니다. 이 개념은 모든 상속된 상태(state)가 상위클래스의 초기화 메서드에 의해 적절히 초기화 된다는 것을 의미합니다. 어떤 다른 동작을 수행하기 전에, super initialize 를 보내서 상속받은 상태를 초기화하는 것이 좋습니다. SimpleSwitchMorph 의 initialize 메서드가 무엇을 할지에 대해서는 정확히 모르며 상관할 필요도 없지만, 적절한 기본 값을 유지해야 하는 일부 인스턴스 변수를 설정하는데 있어서 최선의 방법기 때문에, 이 메서드를 호출하는 것이 더 좋으며, 그렇지 않으면 깔끔하지 않은 상태로 클래스가 시작될 수도 있습니다.

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

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

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

메서드의 나머지 부분은 명확합니다. Smalltalk 코드를 작성하는 가장 아름다운 방법은 좋은 메서드 이름을 골라서 Smalltalk 코드가 쉬운 영어(pidgin English)처럼 보일 수 있게 하는 것입니다. 객체가 자신과 대화하면서 "Self use square corners!", "Self turn off"라고 말하는 것을 상상할 수 있어야 합니다.


Notes