SqueakByExample:6.4: Difference between revisions

From 흡혈양파의 번역工房
Jump to navigation Jump to search
mNo edit summary
(용어수정)
 
(11 intermediate revisions by the same user not shown)
Line 1: Line 1:
==인스펙터와 익스플로러(Inspector and the Explorer)==
==Inspector 와 탐색기==


스몰토크를 많은 다른 프로그래밍 환경과 다르게 만드는 것들 중 하나는, 스몰토크는 여러분을 정적 코드의 세계가 아니라, 창을 제공한 라이브 오브젝트의 세계로 초대한다는 것입니다. 이 오브젝트들 중 어떤 것들도, 프로그래머에 의해 검사되지 않으며, 변경되지도 않습니다-비록 시스템을 지원하는 기본 오브젝트(basic objects)를 변경할 때, 몇 가지 손볼 것이 필요함에도 불구하고-
다른프로그래밍 환경과 스몰토크의 차이점중 하나는, 스몰토크는 당신을 정적 코드의 세계가 아니라, window를 제공하는 객체의 세계로 초대합니다. 이렇게 제공되는 객체들은 전부 다 프로그래머가 검사하고 바꿀 수 있습니다-비록 시스템에 대한 기본 객체를 변경할 때는 주의점이 있지만요. 어떤 실험을 해도 상관없습니다만, 실험전에는 현재 이미지를 먼저 저장하는걸 잊지마세요!
모든 실험이 가능하지만, 여러분의 이미지를 먼저 저장하십시오!




===인스펙터 (The Inspector)===


===Inspector===


{{CommentSqueak|인스펙터로 여러분이 하실 있는 것을 설명 드리겠습니다. 워크스페이스에 {{Template:HighlightBold|TimeStamp now}} 를 타이핑하고, 노랑 버튼 메뉴를 사용하여 {{Template:HighlightGray|inspect it}} 을 클릭합니다.}}
{{CommentSqueak|Inspector 로 할 있는걸 보겠습니다. Workspace 에 {{Template:HighlightBold|TimeStamp now}} 를 입력하고, 노랑 버튼 메뉴를 사용해서 {{Template:HighlightGray|inspect it}} 을 클릭하세요.}}




(메뉴를 사용하기 전에 text를 선택할 필요는 없습니다. 만약 어떤 text도 선택되지 않았다면, 메뉴 작동이 현재 라인의 전체에서 이루어질 것입니다. 여러분은 또한 {{Template:HighlightGray|inspect it}} 을 하기 위해 CMD-i를 타이핑 할 수 있습니다.)
(메뉴를 사용하기 전에 일일히 텍스트를 선택할 필요는 없습니다. 만약 어떤 텍스트도 선택하지 않았다면, 메뉴는 현재 라인의 전체를 대상으로 동작합니다. 또한 {{Template:HighlightGray|inspect it}} 을 하기 위해 단축키로 CMD-i를 사용할 수 있습니다.)


그림 6.20과 같이 나타나는 창이 다시 나타날 것입니다. 이것이 인스펙터(inspector)가 될 것이며, 특정 오브젝트의 인터벌 상으로 옮겨가는 창(window)으로서 간주될 수 있습니다. 그러한 경우, 지금, 여러분이 TimeStamp를 평가하면, TimeStamp의 특정 인스턴스가 만들어 집니다.
[[image:inspectTimeNow1.png|none|250px|thumb|그림 6.20: TimeStamp now 를 정밀 검사하기(inspecting)]]




[[image:inspectTimeNow1.png|none|250px|thumb|그림 6.20: TimeStamp now 를 정밀검사하기(inspecting)]]
그림 6.20 처럼 생긴 창이 나타납니다. 이것을 Inspector 라고 하며, 특정 객체의 내부에 존재하는 windows로 생각해도 됩니다. Inspector 에서 참조하는 인스턴스는  TimeStamp now 프로그램식을 실행하는 시점에서 만들어지는 바로 그 instance 가 됩니다.




창(window)의 타이틀 바는 정밀검사될 오브젝트의 클래스를 보여드립니다. 여러분이 만약 왼쪽 상단의 패널에 {{Template:HighlightGray|self}}를 선택하셨다면, 우측 패널은 오브젝트의 printstring을 보여드릴 것입니다. 왼쪽 패널에 {{Template:HighlightGray|all inst vars}}를 선택하셨다면, 우측 패널은 오브젝트에 있는 인스턴스 변수(the instance variables)의 목록을 보여드리고, 각각을 위해 printstring을 보여드릴 것입니다. 왼쪽 패널에 남아있는 아이템들은 인스턴스 변수들을 나타냅니다. 이것은 한번에 변수들을 한번에 하나씩 수행하는 검사와 변경을 용이하게 해드립니다.
창의 제목 표시줄은 정밀 검사할 객체의 클래스를 표시합니다. 만약 왼쪽 상단패널의 위에 있는 {{Template:HighlightGray|self}}를 선택하면, 우측 패널은 객체의 printstring이 표시됩니다. 왼쪽 패널에서 {{Template:HighlightGray|all inst vars}}를 선택한다면, 우측 패널은 객체에 있는 인스턴스 변수의 목록을 출력하고 각 값을 string으로 출력합니다. 그외 왼쪽패널의 아이템들은 인스턴스 변수들을 나타냅니다. 이것은 한번에 변수들을 한번에 하나씩 검사와 변경을 진행하는 경우 유용하게 쓰입니다.


인스펙터 아래에 있는 수평 패널은 작은 워크스페이스 창입니다. 이것은 이 창안에 있기 때문에 합니다, 가짜 변수 자체(the pseudo-varible)가 여러분이 {{Template:HighlightGray|inpect it}} 하고있는 그 객체에 묶입니다. 그러므로, 여러분이 워크스페이스 패널에 있는<br><syntaxhighlight lang="smalltalk">
Inspector 아래에 있는 수평 패널은 작은 Workspace 창입니다. 처리한 객체에 묶입니다. 이 창에서 의사변수 self 는 객체에대한 값을 정확하게 똑같이 가지고있기때문에 유용하게 쓰일 수 있습니다. 아래의 문장인<br><syntaxhighlight lang="smalltalk">
self - TimeStamp today
self - TimeStamp today
</syntaxhighlight><br>에서 정밀 검사를 원하신다면, 결과는 오늘 자정과 '''TimeStamp now'''를 평가했던 시간 그리고 여러분이 정밀검사하고 있는 TimeStamp 오브젝트 사이의 시간을 표시하는 Duration 오브젝트가 될 것입니다. 여러분은 또한 TimeStamp now—self를 평가를 시도할 수 있으며, 이 작업은 이 책의 이번 섹션을 얼마나 오랫동안 읽었는지에 대해 알려드리게 될 것입니다.
</syntaxhighlight><br>를 작은 Workspace 에서 {{Template:HighlightGray|inspect it}} 하는경우, TimeStamp now의 실행으로 인해 TimeStampe 인스턴트 객체가 생성된 시점의 시간과 자정의 시간차를 Duraion 객체(window) 로 볼 수 있습니다. 또한 '''TimeStamp now - self''' 를 실행해 볼 수 있으며, 이 작업은 이 책의 이번 장을 얼마나 오래 읽었는지에 대한 결과<ref name="역자주1">TimeStamp now - self 의 inspect 결과는 원래 TimeStamp now의 inspect창이 생성된 시점부터 TimeStamp now - self 명령어를 다시 실행한 순간까지의 시간을 의미합니다</ref>를 알려줍니다.


Self 뿐만 아니라 오브젝트의 모든 인스턴스 변수들은 워크스페이스 패널의 범위(scope)에 있으므로, 표현식으로 그 변수들을 사용할 수 있고, 그 변수에 할당을 할 수도 있습니다. 예를 들면, 만약 여러분이 워크스페이스 패널에서 jdn := jdn -- 1 를 평가하기 원한다면, jdn 인스턴스 변수의 값이 실제로 변경되는 것과, TimeStamp now-self의 값이 어느 날 증가되는 것을 보게 되실 것입니다.
Self 뿐만 아니라 객체의 모든 인스턴스 변수들은 작은 Workspace 패널의 영역에 있으므로, 프로그램식으로 왼쪽패널의 변수들을 사용할 수 있고, 그 변수에 값을 할당할 수도 있습니다. 예를 들어, 만약 작은 Workspace 패널에서 jdn := jdn - 1 를 실행한다면, jdn 인스턴스 변수의 값이 실제로 변경되는걸 확인할 수 있고, TimeStamp now - self 의 값이 실행할때마다 커지는걸 확인할 수도 있습니다.


여러분은 인스턴스 변수들을 선택하고, 스퀵 표현식과 수락으로, 오른쪽 패널에 있는 옛 값을 교체하여 인스턴스 변수들을 직접 변경할 수 있습니다. 스퀵은 표현식을 평가하고 결과를 그 인스턴스에 할당합니다.
여러분은 인스턴스 변수들을 선택하고, 스퀵 표현식과 Accept를 사용해서, 오른쪽 패널에 있는 이전값을 교체하여 인스턴스 변수들을 직접 변경할 수 있습니다. 스퀵은 프로그램식을 실행하고 결과를 그 인스턴스에 다시 할당합니다.
 


 
이런 특별한 객체의 컨텐츠들을 쉽게 점검할 수 있도록 해주는 Dictionary 와 OrderedCollections, CompiledMethods와 몇몇 다른 클래스들이 있습니다.
{| style="border: 1px solid white;"
|- style="color: white;"
||[[image:exploreTimeStampNow.png]]||[[image:exploreTimeStampNow2.png]]
|- style="text-align: center;"
|그림 6.21: Exploring TimeStampNow  탐색하기||그림 6.22: 인스턴스 변수 탐색하기
|}




이 특별한 오브젝트의 컨텐츠들을 쉽게 점검하게 해드리는 딕셔너리와 OrderedCollections, CompiledMethods와 몇몇 다른 클래스들이 있습니다.


===오브젝트 탐색기-The Object Explorer===


===오브젝트 탐색기(The Object Explorer)===
오브젝트 탐색기는 개념적으로 Inspector 와 비슷하지만, 가지고있는 정보를 알려주는 방식이 틀립니다. 차이점들을 보기 위해, 우리가 지금 정밀검사중인 동일한 객체를 탐색할 것입니다.




오브젝트 탐색기는 개념적으로 인스펙터(the inspector)와 비슷하지만, 자체의 정보를 다른 방식으로 제시합니다. 차이점들을 보기 위해, 우리가 지금 정밀검사중인 동일한 오브젝트를 탐색할 것입니다.  
{{CommentSqueak|왼쪽 패널에서 {{Template:HighlightGray|self}}를 선택하고, 노랑색 버튼 메뉴에서 {{Template:HighlightGray|explore (I)}}를 고르십시오.}}




{{CommentSqueak|왼쪽 패널에서 {{Template:HighlightGray|self}}를 선택하고, 노랑색 버튼 메뉴에서 {{Template:HighlightGray|explore (I)}}를 고릅니다.}}
오브젝트 탐색기는 그림 6.21에 나온 모습과 같습니다. 만약 root 옆에 있는 삼각형을 클릭한다면, 생김새는 그림 6.22 처럼 바뀔 것이며, 아래쪽에 탐색하고 있는 객체의 인스턴스 변수들을 보여주게 됩니다. 오브젝트 탐색기는, 복잡한 계층적 구조를 찾아볼 필요가 있을 때, 매우 유용합니다-그래서 오브젝트 탐색기 라는이름을 가지게 되었죠.


{| style="border: 1px solid white;"
|- style="color: white;"
||[[image:exploreTimeStampNow.png]]||[[image:exploreTimeStampNow2.png]]
|- style="text-align: center;"
|그림 6.21: Exploring TimeStampNow  탐색하기||그림 6.22: 인스턴스 변수 탐색하기
|}


익스플로러 창은 그림 6.21에 나온 모습과 같습니다. 만약 여러분이 root 옆에 있는 삼각형을 클릭하신다면, 그 뷰는 그림 6.22 처럼 변경될 것이며, 여러분이 탐색하고 있는 오브젝트의 인스턴스 변수들을 보여드릴 것입니다. 이 익스플로러는, 여러분이 복잡한 계층적 구조(complex hierarchic structure)를 탐색(explore)할 필요가 있을 때, 매우 유용합니다-그러므로 이 익스플로러의 이름을 갖게 되었습니다.


오브젝트 익스플로러의 워크스페이스 패널은 인스펙터의 그것과 약간 다르게 작동합니다 self는 root 오브젝트에 묶이지 않으며 오히려 현재 선택된 오브젝트에 묶이며 선택된 오브젝트의 인스턴스 변수들 또한 범위(scope)안에 있습니다 .
오브젝트 익스플로러 하단부의 Workspace 패널은 Inspector 의 그것과는 다르게 동작합니다. self는 root 객체(구문이 실행되며 생성된 인스턴스)에 묶이지 않고 오히려 현재 탐색을 위해 선택된 객체를 가리키며, 선택된 객체의 인스턴스 변수들 또한 Workspace 의 범위가 됩니다.


익스플로러의 가치를 알아보기 위해, 깊게 상주된 오브젝트의 구조를 탐색에 익스플로러를 사용해 봅시다.  
오브젝트 탐색기의 가치를 알아보기 위해, 깊게 상주된 객체의 구조를 탐색하는 작업에 오브젝트 탐색기를 사용해보겠습니다.


메시지들의 목록을 나타내기 위해 사용되는 PluggableListMorph 에 있는 Morphic halo를 불러오기 위해 브라우저를 열고, 메소드 패널에서 파랑색-클릭을 두 번 시행합니다.
메시지들의 목록을 나타내기 위해 사용되는 PluggableListMorph 에 있는 Morphic halo를 불러오기 위해 브라우저를 열고, 메서드 패널에서 파랑색-클릭을 몇번해서 메서드의 목록부분이 선택되는 상태가 되도록 합니다.




Line 62: Line 61:




디버그 핸들[[image:debugHandle.png]]을 클릭하고, 나타나는 메뉴에서 {{Template:HighlightGray|explore Morph}}를 선택합니다. 이 작업은 화면에 있는 메소드 목록(method list)를 나타내는 '''PluggableListMorph''' 에 익스플로러를 열 것입니다. Root 오브젝트를 열고(그것의 삼각형을 클릭하여), 그 오브젝트의 서브모프(submorphs)을 연 다음, 그림 6.23에 나온 것 과 같이 이 모프(Morph) 기저에 있는 오브젝트의 구조들을 탐색합니다.
디버그 핸들[[image:debugHandle.png]]을 클릭하고, 나타나는 메뉴에서 {{Template:HighlightGray|explore Morph}}를 선택합니다. 이 작업은 화면에 있는 메서드 목록을 나타내는 '''PluggableListMorph''' 를 탐색하는 오브젝트 탐색기를 열 것입니다. root 객체를 열고(root옆의 삼각형을 클릭해서), 그 객체의 하위 모프를 연 다음, 그림 6.23에 나온 것과 같이 이 모프를 기반으로 하는 객체의 구조를 탐색합니다.
 
 


==Notes==
==Notes==

Latest revision as of 02:11, 17 September 2013

Inspector 와 탐색기

다른프로그래밍 환경과 스몰토크의 차이점중 하나는, 스몰토크는 당신을 정적 코드의 세계가 아니라, window를 제공하는 객체의 세계로 초대합니다. 이렇게 제공되는 객체들은 전부 다 프로그래머가 검사하고 바꿀 수 있습니다-비록 시스템에 대한 기본 객체를 변경할 때는 주의점이 있지만요. 어떤 실험을 해도 상관없습니다만, 실험전에는 현재 이미지를 먼저 저장하는걸 잊지마세요!


Inspector

Squeak comment.pngInspector 로 할 수 있는걸 보겠습니다. Workspace 에 TimeStamp now 를 입력하고, 노랑 버튼 메뉴를 사용해서 inspect it 을 클릭하세요.


(메뉴를 사용하기 전에 일일히 텍스트를 선택할 필요는 없습니다. 만약 어떤 텍스트도 선택하지 않았다면, 메뉴는 현재 라인의 전체를 대상으로 동작합니다. 또한 inspect it 을 하기 위해 단축키로 CMD-i를 사용할 수 있습니다.)

그림 6.20: TimeStamp now 를 정밀 검사하기(inspecting)


그림 6.20 처럼 생긴 창이 나타납니다. 이것을 Inspector 라고 하며, 특정 객체의 내부에 존재하는 windows로 생각해도 됩니다. Inspector 에서 참조하는 인스턴스는 TimeStamp now 프로그램식을 실행하는 시점에서 만들어지는 바로 그 instance 가 됩니다.


창의 제목 표시줄은 정밀 검사할 객체의 클래스를 표시합니다. 만약 왼쪽 상단패널의 위에 있는 self를 선택하면, 우측 패널은 객체의 printstring이 표시됩니다. 왼쪽 패널에서 all inst vars를 선택한다면, 우측 패널은 객체에 있는 인스턴스 변수의 목록을 출력하고 각 값을 string으로 출력합니다. 그외 왼쪽패널의 아이템들은 인스턴스 변수들을 나타냅니다. 이것은 한번에 변수들을 한번에 하나씩 검사와 변경을 진행하는 경우 유용하게 쓰입니다.

Inspector 아래에 있는 수평 패널은 작은 Workspace 창입니다. 처리한 객체에 묶입니다. 이 창에서 의사변수 self 는 객체에대한 값을 정확하게 똑같이 가지고있기때문에 유용하게 쓰일 수 있습니다. 아래의 문장인

self - TimeStamp today


를 작은 Workspace 에서 inspect it 하는경우, TimeStamp now의 실행으로 인해 TimeStampe 인스턴트 객체가 생성된 시점의 시간과 자정의 시간차를 Duraion 객체(window) 로 볼 수 있습니다. 또한 TimeStamp now - self 를 실행해 볼 수 있으며, 이 작업은 이 책의 이번 장을 얼마나 오래 읽었는지에 대한 결과[1]를 알려줍니다.

Self 뿐만 아니라 객체의 모든 인스턴스 변수들은 작은 Workspace 패널의 영역에 있으므로, 프로그램식으로 왼쪽패널의 변수들을 사용할 수 있고, 그 변수에 값을 할당할 수도 있습니다. 예를 들어, 만약 작은 Workspace 패널에서 jdn := jdn - 1 를 실행한다면, jdn 인스턴스 변수의 값이 실제로 변경되는걸 확인할 수 있고, TimeStamp now - self 의 값이 실행할때마다 커지는걸 확인할 수도 있습니다.

여러분은 인스턴스 변수들을 선택하고, 스퀵 표현식과 Accept를 사용해서, 오른쪽 패널에 있는 이전값을 교체하여 인스턴스 변수들을 직접 변경할 수 있습니다. 스퀵은 프로그램식을 실행하고 결과를 그 인스턴스에 다시 할당합니다.


이런 특별한 객체의 컨텐츠들을 쉽게 점검할 수 있도록 해주는 Dictionary 와 OrderedCollections, CompiledMethods와 몇몇 다른 클래스들이 있습니다.


오브젝트 탐색기-The Object Explorer

오브젝트 탐색기는 개념적으로 Inspector 와 비슷하지만, 가지고있는 정보를 알려주는 방식이 틀립니다. 차이점들을 보기 위해, 우리가 지금 정밀검사중인 동일한 객체를 탐색할 것입니다.


Squeak comment.png왼쪽 패널에서 self를 선택하고, 노랑색 버튼 메뉴에서 explore (I)를 고르십시오.


오브젝트 탐색기는 그림 6.21에 나온 모습과 같습니다. 만약 root 옆에 있는 삼각형을 클릭한다면, 생김새는 그림 6.22 처럼 바뀔 것이며, 아래쪽에 탐색하고 있는 객체의 인스턴스 변수들을 보여주게 됩니다. 오브젝트 탐색기는, 복잡한 계층적 구조를 찾아볼 필요가 있을 때, 매우 유용합니다-그래서 오브젝트 탐색기 라는이름을 가지게 되었죠.

ExploreTimeStampNow.png ExploreTimeStampNow2.png
그림 6.21: Exploring TimeStampNow 탐색하기 그림 6.22: 인스턴스 변수 탐색하기


오브젝트 익스플로러 하단부의 Workspace 패널은 Inspector 의 그것과는 다르게 동작합니다. self는 root 객체(구문이 실행되며 생성된 인스턴스)에 묶이지 않고 오히려 현재 탐색을 위해 선택된 객체를 가리키며, 선택된 객체의 인스턴스 변수들 또한 Workspace 의 범위가 됩니다.

오브젝트 탐색기의 가치를 알아보기 위해, 깊게 상주된 객체의 구조를 탐색하는 작업에 오브젝트 탐색기를 사용해보겠습니다.

메시지들의 목록을 나타내기 위해 사용되는 PluggableListMorph 에 있는 Morphic halo를 불러오기 위해 브라우저를 열고, 메서드 패널에서 파랑색-클릭을 몇번해서 메서드의 목록부분이 선택되는 상태가 되도록 합니다.


그림 6.23: PluggableListMorph를 탐색하기


디버그 핸들DebugHandle.png을 클릭하고, 나타나는 메뉴에서 explore Morph를 선택합니다. 이 작업은 화면에 있는 메서드 목록을 나타내는 PluggableListMorph 를 탐색하는 오브젝트 탐색기를 열 것입니다. root 객체를 열고(root옆의 삼각형을 클릭해서), 그 객체의 하위 모프를 연 다음, 그림 6.23에 나온 것과 같이 이 모프를 기반으로 하는 객체의 구조를 탐색합니다.


Notes

  1. TimeStamp now - self 의 inspect 결과는 원래 TimeStamp now의 inspect창이 생성된 시점부터 TimeStamp now - self 명령어를 다시 실행한 순간까지의 시간을 의미합니다