VisualWorksIntroduction:Page08

From 흡혈양파의 번역工房
Jump to navigation Jump to search

cincom_tutorial_vwlogo
cincom_tutorial_cincomlogo


입문서 : self(파트 1)

cincom_tutorial_stlogo

cincom_tutorial_openbook 스몰토크 언어에는 다섯가지 예약어가 있습니다. self는 그 중 하나입니다. 객체는 자신에게 참조를 가능케 하는 "shortcut" 입니다. Workspace에 코드를 쓸 때, self는 전혀 필요 없습니다. 하지만 나만의 클래스 메서드를 쓰기 시작하면 self없이는 살아갈 수 없을겁니다.
cincom_tutorial_certificate self라는 용어는 단순하지만, 스몰토크에 있어서는 매우 중요합니다. 이 입문서는 self의 동작과 필요성을 설명하겠습니다.
cincom_tutorial_question "self"의 의미는 무엇인가요?

self는 "현재의 객체"에 대한 생략이며, "현재 다루고 있는 모든 클래스"의 콘텍스트입니다. Inspector 화면을 이미 보셨다면, 이 용어를 보셨을겁니다. self는 항상 Inspector 화면 좌측 창에 있는 최초 항목입니다.

4 squared

스몰토크는 식을 평가하고, 16을 돌려줍니다. Inspect는 "16"이 SmallInteger 클래스의 인스턴스라는 것을 나타냅니다. 아래와 그림과 같은지 확인해 주십시오.

그림 S-1. "16" 이 인스팩터에 표시되었습니다. Self에 주목해 주십시오.(-그림 2-3입니다)


여기서 self는 16의 인스턴스(객체)를 참조하고 있습니다. 믿을수 없다면 다음 작업을 해주십시오. 오른쪽 창에 self -3을 입력하고, 그것을 반전시키고 <오퍼레이트 클릭>Print를 선택해 주십시오. 13이 표시될겁니다.


그림 S-2. 인스팩터 화면이 워크스페이스 처럼 동작합니다.


그림 S-3. Self가 "16" 을 참조하고 있는 것을 확인


메서드를 쓰기 시작했을 때 self가 중요해집니다. 복권(lottery) 시뮬레이션 프로그램을 적읍시다. Lottery 클래스를 작성하고, 48개의 숫자에서 6개의 숫자를 뽑는 시뮬레이션의 메서드를 적습니다. 아래의 메서드는 이 시뮬레이션을 실행합니다. 여섯개의 요소배열에 무작위로 추출한 6개의 숫자(1에서 48까지)를 반환합니다.

generateDrawing
	"Simulate a random drawing"
	| aSetOfNumbers aSetOf6 random pick computerNumber total |
	aSetOfNumbers := Set new.
	aSetOf6 := Set new.
	1 to: 48 do: [ :each | aSetOfNumbers add: each].
	total := aSetOfNumbers size.
        [ (aSetOf6 size) = 6] 
	  whileFalse:
  	  [ 
	   random := Random new next.
	   pick := (random * 100) truncated \\ total.
	   computerNumber := pick + 1.
	   aSetOf6 add: computerNumber.
	  ]. 
	^aSetOf6 asArray.

다음은 게임을 개시하는 메서드를 적습니다. 작업의 하나로서, 이 start 메서드에 시뮬레이션 실행에 필요한 generateDrawing 메서드를 "호출합니다". 양쪽 메서드는 Lottery 클래스의 인스턴스 메서드입니다. start 메서드 안에서 generateDrawing을 call/부르고/참조할 필요가 있습니다. 어떻게 하면 실현할 수 있을까요? 아래의 코드는 동작하지 않습니다.

| theWinningNumbers | 
theWinningNumbers := generateDrawing.

코드를 실행할 수 없습니다! 유효한 스몰토크 문법은 객체-메서드 형식이어야 합니다.

따라서, Lottery 객체를 참조하는 무언가, 즉 Lottery 클래스의 인스턴스를 참조하는 것이 필요하게 됩니다. 여기서 self가 등장합니다.

| theWinningNumbers | 
theWinningNumbers := self generateDrawing.
cincom_tutorial_certificate 정리

스몰토크 구문에서 self를 사용한 경우, 클래스의 인스턴스 메서드에 속합니다. self는 클래스의 인스턴스를 참조하고, 같은 클래스에 있는 메서드를 반드시 100% 포함합니다.


| 이전으로 돌아가기 |