SqueakByExample:2.8: Difference between revisions

From 흡혈양파의 번역工房
Jump to navigation Jump to search
(페이지내용 재입력)
 
mNo edit summary
Line 3: Line 3:
여기까지입니다: Quinto game이 마무리 되었습니다.
여기까지입니다: Quinto game이 마무리 되었습니다.


만약 여러분이 단지 2개의 클래스와 7개의 메소드로 구성되어 있는 모든 단계를 따라 하셨다면, 게임 플레이가 가능해야만 합니다.
만약 여러분이 단지 2개의 클래스와 7개의 메서드로 구성되어 있는 모든 단계를 따라 하셨다면, 게임 플레이가 가능해야만 합니다.




Line 27: Line 27:




디버거가  나타날 것입니다. 디버거 창의 윗 부분에서, 모든 활성화된 메소드를 보여주는 실행스택(the execution stack)을 볼 수 있을 것이며, 중앙 페널에서, 스몰토크 코드는, 강조된 에러를 트리거한 부분과 함께 선택한 메소드에서 실행되고 있는 중입니다.
디버거가  나타날 것입니다. 디버거 창의 윗 부분에서, 모든 활성화된 메서드를 보여주는 실행스택(the execution stack)을 볼 수 있을 것이며, 중앙 페널에서, 스몰토크 코드는, 강조된 에러를 트리거한 부분과 함께 선택한 메서드에서 실행되고 있는 중입니다.


    
    
Line 33: Line 33:




디버거는 에러가 발생한 (그림 2.13) 위치의 이 메소드 내부에 실행 컨택스트(the execution context)를 보여드릴 것입니다.
디버거는 에러가 발생한 (그림 2.13) 위치의 이 메서드 내부에 실행 컨택스트(the execution context)를 보여드릴 것입니다.


디버거의 하단에는, 두 개의 작은 인스펙터 창이 있습니다. 여러분은 왼쪽에서, 실행할 선택된 메소드를 발생시킨 메시지의 리시버(receiver)인 오브젝트를 정밀검사(inspect)하여, 인스턴스 값의 값을 보실 수 있습니다. 여러분은 오른쪽에서, 현재 실행중인 메소드 자체를 나타내는 오브젝트를 정밀검사하여, 메소드의 파라티머와 임시 변수의 값을 여기서 볼 수 있을 것입니다.
디버거의 하단에는, 두 개의 작은 인스펙터 창이 있습니다. 여러분은 왼쪽에서, 실행할 선택된 메서드를 발생시킨 메시지의 리시버(receiver)인 오브젝트를 정밀검사(inspect)하여, 인스턴스 값의 값을 보실 수 있습니다. 여러분은 오른쪽에서, 현재 실행중인 메서드 자체를 나타내는 오브젝트를 정밀검사하여, 메서드의 파라티머와 임시 변수의 값을 여기서 볼 수 있을 것입니다.




[[image:Debugger.png|none|601px|thumb|그림 2.13: 선택된 메소드 toggleNeighboursOfCell:at: 와 함께 있는 모습의 디버거]]
[[image:Debugger.png|none|601px|thumb|그림 2.13: 선택된 메서드 toggleNeighboursOfCell:at: 와 함께 있는 모습의 디버거]]


여러분은 디버거를 사용하여, 단계적으로 코드를 실행하고 파라미터와 로컬 변수에서 오브젝트를 정밀검사하고 워크스페이스에 여러분이 할 수 있는 작업과 똑 같이 코드를 평가할 수 있고, 그리고 가장 놀라운 것은, 다른 디버거들에 사용된 코드들도 평가할 수 있고, 디버그가 되고 있는 동안에 코드를 변경할 수도 있습니다. 몇몇 스몰토크 사용자들은 브라우저에서 보다는 거의 항상 디버거에서 프로그램을 작성합니다. 디버거에서 프로그램을 작성하는 장점은, 실제 실행 상황에서 실제 파라미터와 함께, 실행하게 될 여러분이 작성하고 있는 메소드를 볼 수 있다는 것입니다.
여러분은 디버거를 사용하여, 단계적으로 코드를 실행하고 파라미터와 로컬 변수에서 오브젝트를 정밀검사하고 워크스페이스에 여러분이 할 수 있는 작업과 똑 같이 코드를 평가할 수 있고, 그리고 가장 놀라운 것은, 다른 디버거들에 사용된 코드들도 평가할 수 있고, 디버그가 되고 있는 동안에 코드를 변경할 수도 있습니다. 몇몇 스몰토크 사용자들은 브라우저에서 보다는 거의 항상 디버거에서 프로그램을 작성합니다. 디버거에서 프로그램을 작성하는 장점은, 실제 실행 상황에서 실제 파라미터와 함께, 실행하게 될 여러분이 작성하고 있는 메서드를 볼 수 있다는 것입니다.


이번 경우에, 우리는 SBEGame의 인스턴스에 보낸 toggleState(토글상태) 메시지를 상단 패널의 첫 번째 라인에서 볼 수 있으며, 이 메시지는 명확히 SBECell의 인스턴스로 존재해왔어야만 합니다. 문제는 셀 매트릭스의 초기화와 관련이 있습니다. SBEGame»initialize의 코드를 검색하는 작업은 newCellAt:at:의 리턴 값으로 채워진 셀들을 보여주지만, 우리가 그 메소드를 살펴볼 때, 어떤 리턴 표현식도 그 메소드에 없다는 것을 보게 되며, 디폴트로, 메소드 그 자체를 리턴하고, newCellAt:at:의 경우에는 실제로 SBEGame의 인스턴스가 됩니다.
이번 경우에, 우리는 SBEGame의 인스턴스에 보낸 toggleState(토글상태) 메시지를 상단 패널의 첫 번째 라인에서 볼 수 있으며, 이 메시지는 명확히 SBECell의 인스턴스로 존재해왔어야만 합니다. 문제는 셀 매트릭스의 초기화와 관련이 있습니다. SBEGame»initialize의 코드를 검색하는 작업은 newCellAt:at:의 리턴 값으로 채워진 셀들을 보여주지만, 우리가 그 메서드를 살펴볼 때, 어떤 리턴 표현식도 그 메서드에 없다는 것을 보게 되며, 디폴트로, 메서드 그 자체를 리턴하고, newCellAt:at:의 경우에는 실제로 SBEGame의 인스턴스가 됩니다.




{{CommentSqueak|디버거 창을 닫고, 표현식 "{{HighlightBold|↑c}}"를 메소드 {{HighlightBold|SBEGame»newCellAt:at:}}의 끝 부분에 추가하여, {{HighlightBold|c}}를 리턴하게 합니다. (메소드 2.10을 보십시오)}}
{{CommentSqueak|디버거 창을 닫고, 표현식 "{{HighlightBold|↑c}}"를 메서드 {{HighlightBold|SBEGame»newCellAt:at:}}의 끝 부분에 추가하여, {{HighlightBold|c}}를 리턴하게 합니다. (메서드 2.10을 보십시오)}}




메소드 2.10: 버그 수정하기
메서드 2.10: 버그 수정하기
<syntaxhighlight lang="smalltalk">
<syntaxhighlight lang="smalltalk">
SBEGame»newCellAt: i at: j                                       
SBEGame»newCellAt: i at: j                                       
Line 63: Line 63:




1장에서 보았듯이, 스몰토크에서 메소드로부터 값을 리턴하기 위해 사용하는 기호는 ^를 타이핑함으로써 얻는 ↑ 입니다.
1장에서 보았듯이, 스몰토크에서 메서드로부터 값을 리턴하기 위해 사용하는 기호는 ^를 타이핑함으로써 얻는 ↑ 입니다.


종종 여러분은 디버거 창에서 코드를 직접 수정할 수 있으며, 실행중인 응용프로그램을 지속시키기 위해 {{HighlightGray|Proceed}}를 클릭합니다. 우리의 사례의 경우, 버그가 오류가 생긴 메소드가 아닌, 오브젝트의 초기화 과정에서 생겼으므로, 가장 쉽게 코드를 수정하는 방법은 디버거 창을 닫고, 실행중인 게임의 인스턴스(halo와 함께)을 폐기한 후, 새로운 인스턴스를 만드는 것입니다.  
종종 여러분은 디버거 창에서 코드를 직접 수정할 수 있으며, 실행중인 응용프로그램을 지속시키기 위해 {{HighlightGray|Proceed}}를 클릭합니다. 우리의 사례의 경우, 버그가 오류가 생긴 메서드가 아닌, 오브젝트의 초기화 과정에서 생겼으므로, 가장 쉽게 코드를 수정하는 방법은 디버거 창을 닫고, 실행중인 게임의 인스턴스(halo와 함께)을 폐기한 후, 새로운 인스턴스를 만드는 것입니다.  





Revision as of 05:07, 30 August 2012

우리의 코드를 실행해 봅시다.

여기까지입니다: Quinto game이 마무리 되었습니다.

만약 여러분이 단지 2개의 클래스와 7개의 메서드로 구성되어 있는 모든 단계를 따라 하셨다면, 게임 플레이가 가능해야만 합니다.


Squeak comment.png워크스페이스에서 SBEGame new openInWorld를 타이핑하고 do it을 클릭합니다.


게임이 열리게 될 것이며, 여러분은 셀 클릭이 가능해야만 하며, 어떻게 그것이 작동하는지 볼 수 있어야 합니다.

글쎄요, 너무 많은 이론이었습니다...여러분이 셀을 클릭하면, PreDebugWindow라 불렸던 알림 창(notifier window)이 나타납니다.

그림 2.12에서 묘사된 것처럼, 이 창은 MessageNotUnderstood: SBEGame»toggleState 를 말합니다.


그림 2.12: 셀을 클릭했는더니 우리의 게임에 버그가 나왔네요!


어떤 일이 발생하였습니까? 그것을 알아내기 위해, 좀더 강력한 스몰토크의 도구 디버거(the debugger)를 사용해 봅시다.


Squeak comment.png알림창(notifier window)에 있는 debug를 클릭합니다.


디버거가 나타날 것입니다. 디버거 창의 윗 부분에서, 모든 활성화된 메서드를 보여주는 실행스택(the execution stack)을 볼 수 있을 것이며, 중앙 페널에서, 스몰토크 코드는, 강조된 에러를 트리거한 부분과 함께 선택한 메서드에서 실행되고 있는 중입니다.


Squeak comment.pngSBEGame»toggleNeighboursOfCellAt:at:이라고 라벨을 붙인 (상단 주변)라인을 클릭합니다.


디버거는 에러가 발생한 (그림 2.13) 위치의 이 메서드 내부에 실행 컨택스트(the execution context)를 보여드릴 것입니다.

디버거의 하단에는, 두 개의 작은 인스펙터 창이 있습니다. 여러분은 왼쪽에서, 실행할 선택된 메서드를 발생시킨 메시지의 리시버(receiver)인 오브젝트를 정밀검사(inspect)하여, 인스턴스 값의 값을 보실 수 있습니다. 여러분은 오른쪽에서, 현재 실행중인 메서드 자체를 나타내는 오브젝트를 정밀검사하여, 메서드의 파라티머와 임시 변수의 값을 여기서 볼 수 있을 것입니다.


그림 2.13: 선택된 메서드 toggleNeighboursOfCell:at: 와 함께 있는 모습의 디버거

여러분은 디버거를 사용하여, 단계적으로 코드를 실행하고 파라미터와 로컬 변수에서 오브젝트를 정밀검사하고 워크스페이스에 여러분이 할 수 있는 작업과 똑 같이 코드를 평가할 수 있고, 그리고 가장 놀라운 것은, 다른 디버거들에 사용된 코드들도 평가할 수 있고, 디버그가 되고 있는 동안에 코드를 변경할 수도 있습니다. 몇몇 스몰토크 사용자들은 브라우저에서 보다는 거의 항상 디버거에서 프로그램을 작성합니다. 디버거에서 프로그램을 작성하는 장점은, 실제 실행 상황에서 실제 파라미터와 함께, 실행하게 될 여러분이 작성하고 있는 메서드를 볼 수 있다는 것입니다.

이번 경우에, 우리는 SBEGame의 인스턴스에 보낸 toggleState(토글상태) 메시지를 상단 패널의 첫 번째 라인에서 볼 수 있으며, 이 메시지는 명확히 SBECell의 인스턴스로 존재해왔어야만 합니다. 문제는 셀 매트릭스의 초기화와 관련이 있습니다. SBEGame»initialize의 코드를 검색하는 작업은 newCellAt:at:의 리턴 값으로 채워진 셀들을 보여주지만, 우리가 그 메서드를 살펴볼 때, 어떤 리턴 표현식도 그 메서드에 없다는 것을 보게 되며, 디폴트로, 메서드 그 자체를 리턴하고, newCellAt:at:의 경우에는 실제로 SBEGame의 인스턴스가 됩니다.


Squeak comment.png디버거 창을 닫고, 표현식 "↑c"를 메서드 SBEGame»newCellAt:at:의 끝 부분에 추가하여, c를 리턴하게 합니다. (메서드 2.10을 보십시오)


메서드 2.10: 버그 수정하기

SBEGame»newCellAt: i at: j                                       
 "Create a cell for position (i,j) and add it to my on—screen               
 representation at the appropriate screen position. Answer the new cell"      
 | c origin |                                                       
 c := SBECell new.
 origin := self innerBounds origin.
 self addMorph: c.
 c position: ((i -- 1) * c width) @ ((j -- 1) * c height) + origin.
 c mouseAction: [self toggleNeighboursOfCellAt: i at: j].
 c


1장에서 보았듯이, 스몰토크에서 메서드로부터 값을 리턴하기 위해 사용하는 기호는 ^를 타이핑함으로써 얻는 ↑ 입니다.

종종 여러분은 디버거 창에서 코드를 직접 수정할 수 있으며, 실행중인 응용프로그램을 지속시키기 위해 Proceed를 클릭합니다. 우리의 사례의 경우, 버그가 오류가 생긴 메서드가 아닌, 오브젝트의 초기화 과정에서 생겼으므로, 가장 쉽게 코드를 수정하는 방법은 디버거 창을 닫고, 실행중인 게임의 인스턴스(halo와 함께)을 폐기한 후, 새로운 인스턴스를 만드는 것입니다.


Squeak comment.pngSBEGame new openInWorld 를 다시 Do: 합니다.


이제 게임이 정상적으로 작동해야만 합니다.


Notes