SqueakByExample:2.4: Difference between revisions

From 흡혈양파의 번역工房
Jump to navigation Jump to search
mNo edit summary
(검수 20180718)
 
(6 intermediate revisions by the same user not shown)
Line 1: Line 1:
==클래스에 메서드를 추가하기==
==클래스에 메서드 추가하기==


이제, 우리의 클래스에 몇 가지 메서드를 추가합니다.
이제 클래스에 몇 가지 메서드를 추가해보도록 하겠습니다.




{{CommentSqueak|프로토콜 패널에서 프로토콜 {{HighlightBold|--all--}} 을 선택합니다.}}
{{CommentSqueak|프로토콜 패널에서  {{HighlightBold|--all--}} 프로토콜을 선택하십시오.}}




여러분은 편집 패널에서 메서드를 만들기 위한 템플릿을 보게 될 것입니다. 그 탬플릿을 선택하고 메서드 2.2의 텍스트로 교체합니다.
편집 창에서 메서드를 생성 템플릿을 보게 될 것입니다. 이를 선택해서 메서드 2.2의 내용으로 바꾸십시오.




Line 23: Line 23:
  onColor := Color paleBlue darker.                                                                             
  onColor := Color paleBlue darker.                                                                             
  self useSquareCorners.
  self useSquareCorners.
  self turnoff                                                                                              
  self turnOff                                                                                              
</syntaxhighlight>  
</syntaxhighlight>  




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




{{CommentSqueak|이 메서드 정의를 {{HighlightGray|Accept}} 합니다.}}
{{CommentSqueak|이 메서드 정의를 {{HighlightGray|Accept}} 하십시오.}}




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


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


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


이 메서드의 나머지는 오브젝트의 상태를 설정합니다. 자체 라벨(self label) ' ' 보내면, 이 오브젝트의 라벨은 빈 문자열로 설정됩니다.
이 메서드의 나머지 부분에서는 객체의 상태를 설정합니다. ''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)에게 할당될 것입니다.
표현식 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 에게 할당할 것입니다.


스퀵 화면의 원점은 상단 왼쪽(the top left)이며, y좌표는 아래쪽(downward)으로 증가되는 것에 유의합니다.
스퀵 화면의 기준점은 ''상단 왼쪽''이며, y 좌표는 ''아래 방향'' 을 의미한다는 것에 유의하십시오.
 
메서드의 나머지 부분은 명확합니다. Smalltalk 코드를 작성하는 가장 아름다운 방법은 좋은 메서드 이름을 골라서 Smalltalk 코드가 쉬운 영어(pidgin English)처럼 보일 수 있게 하는 것입니다. 객체가 자신과 대화하면서 "Self use square corners!", "Self turn off"라고 말하는 것을 상상할 수 있어야 합니다.


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





Latest revision as of 13:28, 18 July 2018

클래스에 메서드 추가하기

이제 클래스에 몇 가지 메서드를 추가해보도록 하겠습니다.


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