AndreaSmalltalkLecture:SmalltalkLecture 01: Difference between revisions

From 흡혈양파의 인터넷工房
Jump to navigation Jump to search
(형식수정)
 
(No difference)

Latest revision as of 10:02, 4 December 2013

1. Smalltalk의 소개

Smalltalk의 소개

Smalltalk는 프로그래밍 언어입니다. 프로그래밍은 결국 컴퓨터를 내가 생각하는 대로 움직일 수 있도록 해 주는 하나의 큰 도구입니다. 이제 Smalltalk 를 처음 공부하는 여러분들을 위해, 이 마당에서는 Smalltalk의 한 종류인 Dolphin Smalltalk를 설치하고 실행하고 종료하는 기본적인 방법을 소개할 것입니다. 그리고 이 과정에서 여러분은 간단하지만 재미있는 몇 가지의 Smalltalk 프로그램을 실행시켜보게 될 것이고, Smalltalk에서 어떤 식으로 명령어를 실행하는지에 대해서 공부하게 될 것입니다.


물론 처음부터 '객체지향'은 어떻고 '갈래'(class)가 어떻느니 등과 같이 접근할 수도 있을 것입니다. 그러나 자전거를 배울 때 우선 자전거의 원리부터 배우려고 하는 사람은 없습니다. 자전거를 직접 타 봄으로써 몸으로 익히려고 하겠지요. 이 마당에서도 일단은 객체지향에 대한 이론적인 면보다는 Smalltalk 환경 자체에 대해서 다루고자 합니다.


한 마디로 이 마당은 여러분이 Smalltalk에 익숙해지기 위한 곳입니다. 이 마당을 마칠 즈음에 여러분은 앞으로 Smalltalk를 공부하는데 있어서 가장 기본이 되는 몇 가지 사항들을 알 수 있게 될 것입니다.


프로그램과 프로그래밍 언어

우리는 하루에도 여러 가지 명령을 알게 모르게 주기도 하고 받기도 하며 살아갑니다. 동생에게 "물 좀 갖다 줘"에서부터 어머니에게 "밥 좀 주세요" 에 이르기까지, 우리는 다른 사람에게 명령을 내리고 또한 그에 따른 결과로써 무언가를 이루어갑니다. 어머니에게 명령을 내린다는 것이 좀 우습게 들리겠지만, 따지고 보면 우리가 어머니에게 명령을 내릴 때에는 매우 공손한 태도를 취하는 것입니다. 결국 어머니에게 무언가를 부탁하고 어머니는 그것을 들어주시는 것이므로, 어머니에게 명령을 전달했다고 생각할 수 있습니다. (한낱 컴퓨터를 다루는 사람의 우스운 괴변이 되지나 았았으면 합니다.)


우리는 또한 스스로에게도 자리에서 일어나라거나, 밥을 먹으라거나, 공부를 하라는 등 여러 가지의 명령을 내리며, 그렇게 해서 살아갑니다. 스스로 하는 것이 무슨 명령이냐고 말할지 모르지만, 밥을 먹을 때에도, 눈과 팔과 손에 붙어있는 뼈와 근육 등 여러 곳에 명령을 내려야만 제대로 밥을 먹을 수 있습니다.


그뿐입니까? 집에서 기르는 개나 고양이 같은 애완 동물에게도 우리는 명령을 내립니다. "이리 와!", "손을 다오"처럼 분명히 우리는 애완 동물에게 명령을 합니다. 물론 그 명령을 제대로 알아듣고 실행하는지 안 하는지는 그 동물을 얼마큼 훈련시켰느냐에 달려있지만 말입니다. :)


또한 우리는 주위에 있는 물건에게도 명령을 내립니다. 흔히 "TV를 끈다"고 말하는데, 정확히 말하면, 우리는 "TV의 전원이 꺼지도록 전원 단추를 누른 것"에 불과합니다. 이 단추를 누르는 동작이 결국은 TV 속에서는 복잡한 동작으로 바뀌어서 전원이 꺼지게 되는 것이지요.


명령은 꼭 말로만 하라는 법이 없습니다. 앞서 이야기했듯이 TV를 끄는 것도 말로 하는 명령이 아닙니다. 손짓을 하거나 단추를 누르거나 하는 모든 것들이 명령이 될 수 있습니다. 지금 여러분이 제 글을 보고 있다면, 여러분은 컴퓨터에게 수많은 명령을 내려서 이 글을 볼 수 있게 된 것입니다. 운영 체계를 시작하고, 통신 프로그램을 띄우고, 전화를 걸고, 이 글이 실려 있는 게시판까지 찾아와서 글을 읽는 모든 것이 마우스를 누르거나 글쇠판을 두드려서 내려진 여러분의 명령이 실행된 결과라는 사실을 생각하면, 명령은 꼭 말로만 내리는 것이 아니라는 제 말에 동감하실 것입니다.


제가 글머리부터 왜 이리 "명령" 타령을 하느냐고요? 그것은 바로 우리가 앞으로 다루어야 할 "프로그램"(program)은 결국 이러한 "명령들의 집합"이기 때문입니다. 좀 더 정확히 말한다면, '프로그램'이란 명령이 언제 어떻게 실행될 지를 늘어놓은 것입니다. 일단 이렇게 프로그램이 만들어지면 명령을 다시 내리지 않더라도 "나중에 언제든지" 다시 그 명령들을 실행할 수 있습니다. 시계를 매일 아침 여섯 시에 울리도록 설정한다거나, 비디오 녹화기를 특정 시간에 방송되는 TV 프로그램―이것 역시 TV의 내용을 일정한 시간에 방송될 수 있도록 하는 것이겠지요―을 녹화하도록 설정한다거나 하는 것은, 결국은 우리가 바라는 명령들을 실행 순서에 따라 차례대로 늘어놓은 것입니다. 이러한 프로그램을 짜는 작업을 '프로그래밍'(programing)이라고 부릅니다. 결국 프로그래밍은 명령이 실행되는 순서를 정하는 것을 의미합니다.


프로그래밍과는 조금 다른 의미로 쓰이는 말 중에 "설계"(designing)란 말이 있습니다. 프로그래밍이 명령이 어떤 순서로 실행되는가를 중요하게 생각하는 것과는 달리, 설계는 명령을 어떤 식으로 조직할 것인지를 결정하는 일입니다. 프로그램이 선(線)이나 면(面)과 비유할 수 있다면, 설계는 입체로 비유할 수 있습니다. 설계는 프로그래밍보다는 조금 상위 수준에 속한다고 보면 됩니다.


소설을 쓰는 사람은 우선 자기가 쓸 글의 얼개를 짜고 글의 큰 흐름을 조직합니다(설계). 일단 이렇게 글의 얼개가 짜여지고 목표가 생기면, 이제 그는 자신의 생각을 차례차례 글로 옮겨 적습니다(프로그래밍).


그래서 설계와 프로그래밍은 뗄 수 없는 불가분의 관계라는 말이 있습니다. 어느 한 쪽에만 치우치게 되면 둘 자 제대로 이루어지지 못하고 어그러지고 맙니다.


컴퓨터는 명령을 기억하고 또한 기억된 명령을 실행할 수 있는 장치입니다. 물론 컴퓨터에 기록된 명령은 컴퓨터가 알아들을 수 있는 말로 작성된 것이겠지요. 프로그래머(programer)는 이렇게 컴퓨터가 알아들을 수 있는 말로 프로그램을 만드는 사람을 가리킵니다. 프로그래머가 컴퓨터에게 명령을 전달하기 위해서는 방금 말했듯이, 컴퓨터가 알아들을 수 있는 말을 사용해야 합니다.


아직 컴퓨터는 사람이 사용하는 자연어(自然語)를 이해할 수 있을 만큼 똑똑하지 못합니다. 결국은 사람이 컴퓨터가 알아들을 수 있는 말을 이용하여 프로그램을 작성하는 수밖에는 없습니다. 이렇게 프로그램을 만들기 위하여 컴퓨터가 알아들을 수 있는 말을 '프로그래밍 언어'라고 부릅니다.


사람도 여러 가지의 언어를 사용합니다. 우리말, 영어, 일어, 중국어, 프랑스어 등 세상에는 여러 가지의 말이 있습니다. 마찬가지로 컴퓨터가 알아들을 수 있는 말, 즉 프로그래밍 언어에도 여러 가지가 있습니다. 주로 사용되는 C, C++, Java, Pascal, BASIC 등의 언어가 있는가 하면, 주류 언어는 아니지만 각각의 목적에 따라 사용되고 있는 Forth, Lisp, Prolog, Scheme, 그리고 우리가 공부하려고 하는 Smalltalk와 같이 정말 많은 종류의 프로그래밍 언어가 존재합니다. 이들 언어는 나름대로의 장단점들을 가지고 있어서, 어떤 언어가 좋고 나쁨을 가릴 수는 없습니다. 어쨌건 우리가 다루고자 하는 언어는 Smalltalk이므로 앞으로 이 글에서는 다른 언어에 대해서 크게 다루지는 않을 것입니다. 물론 필요할 때에는 다른 언어에 이미 익숙하신 분들을 위해서 다른 언어에 대해서 필자가 생각하는 것들을 잠깐씩 적을 생각입니다. Smalltalk를 공부하시는데 도움이 되시기를 바랍니다.


Smalltalk의 설치

Smalltalk를 사용하여 프로그램을 짜기 위해서는 우선 여러분의 시스템에 Smalltalk 환경이 설치되어있어야 합니다. 일단 우리들은 Object Arts사의 Dolphin Smalltalk를 사용할 것이므로, 자료실에서 Dolphin Smalltalk를 내리받읍시다.


원래 Dolphin Smalltalk는 상용과 공개용 Smalltalk 환경을 같이 배포하고 있습니다. Dolphin Smalltalk 1.1판은 공개용이며, 2.1판은 상용입니다. 현재 필자가 사용하고 있고 또한 자료실에 올려진 환경은 1.1판입니다. 그러므로 여러분이 마음대로 전송 받아서 사용할 수 있을 것입니다.


원래 Object Arts에서 제공하는 배포판의 파일 이름은 Dolphin981Setup.Exe 이지만, 자료실의 파일명 길이 제한 때문에 위의 실행 파일을 다시 WinZip 으로 압축하여 올린 것입니다. 그러므로 Dolphin Smalltalk를 설치하기 위해서는 다음과 같은 과정을 거치면 됩니다.

  1. 자료실에서 Dolphin Smalltalk와 Dolphin Education Center를 찾아서 내리받으십시오.
  2. 내리받은 파일은 zip 압축파일이므로 WinZip 등과 같이 긴 파일 이름을 지원하는 압축 프로그램을 사용하여 압축을 푸십시오.
  3. 압축이 풀리면 실행 파일 하나가 나오는데, 이것을 실행시키십시오. 자동 풀림 파일이므로 실행파일을 실행하면 바로 설치 화면으로 넘어갑니다.
  4. 다른 응용 프로그램을 설치할 때처럼 그냥 <Next> 단추를 누르면 바로 바로 넘어갑니다. 고칠 사항이 있는 사람이라면 알맞게 고치면 됩니다.
  5. 설치를 마무리하면 Dolphin Smalltalk의 바로 가기를 시작 메뉴에 넣을 것인가를 묻습니다. 여러분이 알아서 하면 될 것입니다.


이렇게 하면 설치의 전 과정이 다 끝나게 됩니다. 특별히 설정해 줄 것이 없기 때문에 매우 쉽게 설치를 할 수 있을 것입니다. 나중에 필요하다면 언제든지 Dolphin Smalltalk를 제어판의 "프로그램 추가/삭제"를 통해서 제거할 수 있습니다.

Dolphin Smalltalk를 시작하기 위해서는 "시작 → 프로그램 → Dolphin Smalltalk 98"을 가리킨 다음 안에 들어있는 "Dolphin Smalltalk 98" 아이콘을 실행하면 됩니다.


  ▶ 잠깐! 처음 Dolphin Smalltalk를 설치하여 실행할 때에 화면에 경고 상자가 나타납니다. 대강의 내용은, 지금 사용하고 있는 Dolphin Smalltalk는 아직 등록 절차를 거치지 않았기 때문에 프로그램의 실행 결과를 저장할 수 없다는 것입니다. 저장 기능을 사용하려면 Object Arts사에서 무료로 배부하는 등록 번호를 발급 받아야 하는데, 이에 관해서는 조금 뒤에 자세히 설명합니다.


Smalltalk 맛보기 프로그램

이제 Smalltalk의 설치를 마쳤으므로 설치된 Smalltalk 환경을 실행시켜 봅시다. 그러면 "Transcript"와 "Workspace"라는 제목을 가진 두 개의 창이 뜰 것입니다. 이 두 개의 창은 모두 Smalltalk의 명령어를 실행시킬 수 있는 기능을 가지고 있습니다. 그러나 지금 우리가 주목해야 할 창은 'Untitled - Workspace'라는 이름을 가진 창입니다. 이 창에는 아마 "Welcome to Dolphin Smalltalk/98"이라는 큰 제목과 함께 제법 긴 문장들이 들어 있을 것입니다. 이 문장들에는 여러분이 Smalltalk 프로그램을 실행하는데 익숙해지도록, 그리고 Smalltalk 프로그래밍에 대한 흥미를 느낄 수 있도록 짤막한 Smalltalk 프로그램들이 실려 있습니다. 이제 여기서는 이 창에 들어 있는 Smalltalk 프로그램을 실행하고 그 결과를 알아보는 방법을 알아봄으로써, Smalltalk 명령의 실행방법과 Smalltalk 프로그래밍의 생김새를 어느 정도 파악할 수 있게 하겠습니다.


여러분이 보고 있는 Workspace를 "일터"라고 부릅니다. 여기는 여러분이 Smalltalk 시스템에 명령을 내리거나, 이미 만들어진 프로그램의 결과를 확인하는 곳입니다. 일터는 '메모장'이나 '워드패드'와 비슷한 동작 방법을 가지고 있습니다. 즉 흔히 사용하는 텍스트 문서 편집기와 비슷한 동작 방식을 가지고 있다는 말입니다.


이 창에 여러분은 마음대로 글을 쓸 수 있으며, 덩이(block)를 씌워서 한 번에 여러 개의 글자들을 복사 또는 이동할 수 있습니다. 단지 일터가 일반 텍스트 편집기와 다른 점은, 이곳에는 Smalltalk의 명령들이 들어가고, 이 명령을 실행할 수 있다는 것입니다.


일단 마우스나 글쇠판으로 밀대(scroll bar)를 사용해서 아래와 같은 문장이 보이도록 화면을 아래로 말아 내리십시오.

"First evaluated  by  Smalltalk in   October 1972, and   by Dolphin  in 
February 1995. With a bit of luck the answer will be 7."
3 + 4.


위에 보이는 문장은 Smalltalk에서 실행할 수 있는 명령입니다. 이 위의 다른 문장들은 Smalltalk의 명령을 어떤 방식으로 실행하는 것인지, 그리고 실행 결과를 어떻게 얻어낼 수 있는지에 대해서 설명하고 있습니다.


자, 이제부터 우리는 Smalltalk 명령을 내려보게 될 것입니다. 방향 글쇠를 이용하여 커서를

3 + 4.


가 있는 줄로 이동하십시오. '.' 바로 뒤에 커서를 위치시키는 것입니다.


이제 글쇠판에서 Ctrl-D 를 누르십시오. 그리고 화면을 살펴봅시다. 커서가 놓였던 자리에 덩이(block)가 씌워진 "7"이라는 글자가 나타났습니다.

3 + 4.   7


여기서 덩이에 둘러싸인 체로 나타난 "7"은 방금 우리가 실행시킨 명령의 결과입니다. "3 + 4"라는 명령을 실행하였더니 "7"이라는 결과가 나왔다는 말입니다.


이처럼 Smalltalk에서는 명령을 실행하면 그 결과가 언제나 덩이가 씌워진 체로 나타납니다. 따라서 이 상태에서 바로 글쇠판의 Delete 글쇠나 Back Space글쇠를 이용하여 덩이를 지우게 되면, 덩이가 씌워진 명령의 실행 결과도 역시 지워지게 되는 것입니다.


방금 우리가 실행한 명령은 1972년 10월에 Smalltalk 시스템에게 처음으로 내려진 명령이라고 합니다. Object Arts사는 1995년 2월에 자사의 Dolphin Smalltalk에서 이 명령을 실행했다는군요.


이제 다음 명령을 실행할 차례입니다.

200 factorial.


위의 문장 끝에 커서를 갖다 놓고, 앞서 사용했던 Ctrl-D 글쇠를 사용해서 명령을 실행시켜봅시다. 어떻게 되었습니까?


200 factorial.
788657867364790503552363213932185062295135977687173263294742533244359
44996340334292030428401198462390417721213891963883025764279024263710506
19266249528299311134628572707633172373969889439224456214516642402540332
91864131227428294853277524242407573903240321257405579568660226031904170
32406235170085879617892222278962370389737472000000000000000000000000000
0000000000000000000000


지금 여러분은 200!, 즉 200의 계승을 구한 것입니다. 정말 어마어마한 자릿수의 결과가 산출되었습니다. 대단하지 않습니까? 아마 C++나 Java 언어에서 기본으로 제공하는 기능만으로 위와 같은 결과를 얻으려면 상당한 노력이 필요했을 것입니다.


  ▶ 잠깐! 계승? 계승(階乘, factorial)이란 n이 하나의 자연수일 때, 1에서 n까지의 모든 자연수의 곱을 n에 대하여 일컫는 말입니다(한글학회, 1994, 우리말큰사전). 이를테면 5!는 5x4x3x2x1, 즉 120이 되는 것입니다.


그럼 Smalltalk에서 200!을 구하는데 과연 얼마나 시간이 걸릴까요? 바로 다음의 명령을 실행하면 결과를 알 수 있습니다. Ctrl-D를 사용하십시오.

Time millisecondsToRun: [200 factorial].   1


와우! 200!을 구하는데 1ms 정도의 시간밖에 걸리지 않는다고 그러는군요. 1ms초는 1000분의 1초이므로, 매우 빠른 속도로 200!을 구할 수 있다는 것을 알 수 있습니다. 좀 더 세밀하게 측정할 수도 있습니다. 다음 명령을 실행해 보십시오. (이제 각 명령을 실행하기 위해서는 해당 명령 끝에 커서를 위치하고 Ctrl-D글쇠를 누른다는 것쯤은 기억하고 계시겠지요?)

Time microsecondsToRun: [200 factorial].   1024


위의 명령은 200!을 구하는데 걸린 시간을 100만 분의 1초 단위로 구하는 명령입니다. 필자의 경우는 약 1024㎲의 시간이 걸렸습니다. 물론 여기서 여러분이 직접 실행했을 때의 결과는 다를 수 있습니다. 이 결과는 시간값이기 때문에 명령을 실행하고 있는 컴퓨터의 속도에 매우 민감하게 반응합니다. 여기서 중요한 것은 이러한 시간값이 아닙니다. 필요하다면 Smalltalk에서는 100만 분의 1초 단위로 명령 실행 시간을 측정할 수 있다는 것이 중요한 것이지요.


이제 Smalltalk의 내부를 한 번 들여다보겠습니다. Smalltalk 환경에는 많은 수의 객체(object)가 있으며, 이들 객체는 저마다의 갈래(class)에 속해 있습니다. 아래의 명령을 실행시키면 현재 Smalltalk 환경에 어떤 갈래들이 있는지를 한 눈에 알 수 있습니다.

Class allClasses asSortedCollection.

 a SortedCollection(_FPIEEE_RECORD AbstractCardContainer 
AbstractToTextConverter ACCEL AcceleratorPresenter AcceleratorTable
        ....(중략)....
DWORDBytes DWORDField EDITSTREAM ... etc ...


이번에도 참 많은 결과가 화면에 표시되었습니다. 그런데 맨 마지막 줄을 보십시오. "... etc ..."로 끝났습니다. 이는 지금 화면에 표시된 것보다 훨씬 더 많은 수의 갈래가 존재한다는 말입니다. 또한 방금 실행한 명령의 결과를 제대로 알아보기가 어려웠습니다. 왜 그랬을까요? 그것은 바로 갈래의 이름들을 그냥 줄줄이 늘어놓았기 때문입니다.


지금까지 살펴본 것처럼 Smalltalk에서 어떤 명령을 실행한 뒤에는 언제나 결과가 남습니다. 그 중에는 "3 + 4."의 경우와 같이 간단한 결과를 남기는 경우도 있지만 지금의 경우처럼 복잡한 결과를 남기는 경우도 많습니다. 이와 같이 복잡한 결과를 좀 더 쉽게 보기 위해서, 지금까지와는 다른 명령의 명령 실행 방법이 준비되어 있습니다.


위에서 내린 명령을 한 번 더 실행해 봅시다. 역시 명령의 끝에 커서를 놓고 글쇠판에서 <Ctrl-I>를 누르십시오. <Ctrl-D>가 아니라 <Ctrl-I>라는 점을 주의해 주십시오.

Class allClasses asSortedCollection.   "Inspector 창 열림"


어떻습니까? "Inspecting a SortedCollection"이라는 제목의 창이 화면에 나타났습니다. 지금 나타난 창을 "객체 탐색기"(object inspector), 혹은 간단히 "탐색기"(inspector)라고 부릅니다.


창의 왼쪽에는 self부터 시작하여 몇 개의 항목들이 있으며, 그 밑에는 1, 2, 3,...처럼 번호가 매겨져 있습니다. 그리고 오른쪽에는 왼쪽에서 돋이된 항목의 결과를 표시하는 부분이 있습니다. 처음에는 "self"라는 항목이 선택되어있을 것이고, 오른쪽에는 방금 우리가 <Ctrl-D>로 명령을 실행했을 때와 똑같은 결과가 나타났을 것입니다.


다른 항목들은 내버려두고, 1, 2, 3,...처럼 번호가 매겨진 항목들을 돋이해 봅시다. 그러면 각 항목에 하나씩의 낱말이 오른쪽 창에 보일 것입니다. 이것이 지금 Smalltalk 환경에서 사용할 수 있는 갈래(class)입니다. 맨 마지막 항목은 몇 번입니까? 필자의 경우는 567입니다. 결국 이 말은, Smalltalk 시스템에는 500개가 넘는 갈래가 존재한다는 말입니다. 갈래들을 한 번 쭉 훑어보았으면 이제는 열려있는 탐색기를 닫으십시오.


계속 명령어를 실행시켜봅시다. 아래의 명령은 Smalltalk 환경에 도대체 몇 개의 객체(object)들이 존재하는지를 보여줍니다. Ctrl-I 를 쓰지 말고 Ctrl-D로 실행하십시오.

Object allSubinstances size.   44121


필자의 경우에는 44121개의 객체가 있다고 보고되었습니다. 여러분의 경우에는 좀 다른 숫자가 나타날지도 모르겠습니다만, 여하튼 현재 돌아가고 있는 Smalltalk 환경에 적어도 4만개가 넘는 객체들이 서로 맡은 바 임무를 수행하면서 돌고 있습니다.


'객체'니 '갈래'니 하는 말이 생소하십니까? 이제부터 점점 명령의 의미를 파악하기가 어려워집니까? 전혀 신경 쓸 필요가 없습니다. Smalltalk를 공부하면서 차차 자세하게 알게 될 것이기 때문입니다. 지금은 단지 Smalltalk의 명령을 실행하고 결과를 알아보는 방법에만 초점을 맞춥시다.


지금까지 우리는 몇 가지의 Smalltalk 명령을 실행해 보았습니다. 여기서 Smalltalk 명령을 실행하는 방법에 대해서 지금까지 알아본 것을 간단하게 정리하고 넘어가도록 하겠습니다.

  1. 실행해야 할 명령 끝에 커서를 놓는다.
  2. Ctrl-D 글쇠를 입력하면 명령이 실행되고 결과가 나타난다.
  3. 나타난 결과가 지나치게 복잡하면 Ctrl-I 를 사용하여 "탐색기" 를 통해서 결과를 살펴볼 수 있다.


정리가 되십니까? 아직까지 이해가 잘 안 가시는 분들은 여기서 잠시 휴식을 취하십시오. 그리고 처음부터 차근차근 다시 한 번 제 글을 따라가면서 명령을 실행시켜 봅시다.


자, 그럼 이제 다음의 명령을 실행시켜보겠습니다.

<바탕글 1> 간단한 디지털 시계

digitalClockProcess := [[
        Processor sleep: 1000.
        (DesktopView current canvas)
                font: (Font name: 'Arial' pointSize: 36) bold;
                text: Time now printString at: 10@10;
                free
] repeat] fork.


지금까지 우리는 한 줄 짜리 Smalltalk 명령을 실행해 보았습니다. 그런데 위의 <바탕글 1>은 일곱 줄로 이루어진 명령입니다. 이 명령을 그럼 어떻게 실행할 수 있을까요?


방법은 간단합니다. 위의 일곱 줄에 모두 덩이를 씌우십시오. 덩이를 씌우는 방법은

  1. 마우스를 이용하여 끌어서 덩이를 씌우는 방법.
  2. 명령의 첫 글자에 커서를 놓고, <Shift>를 누르면서 방향 글쇠를 이용하는 방법


등이 있습니다. 둘 중에서 여러분이 편리한 것을 골라서 사용하시기 바랍니다. 어쨌건 중요한 것은 위의 일곱 줄에서 한 글자도 빼놓지 말고 덩이를 씌워야 한다는 것입니다.


덩이를 씌웠으면 이제는 앞에서 한 것처럼 <바탕글 1>Ctrl-D를 입력하여 명령을 실행시켜 보겠습니다. 어떻게 되었습니까?


<바탕글 1>

 a Process(a CompiledExpression, priority: 5, state: #ready)


일곱 줄에 덩이를 씌운 다음 Ctrl-D 를 누르자마자 위의 결과를 뿌리면서 화면 왼쪽 구석에 큼지막하게 현재 시간이 표시되는 것을 볼 수 있습니다. 시간이 나타나는 자리에 다른 그림이 그려지더라도 곧 그 그림은 지워지고 그 자리에 시간이 나타납니다. 아주 큼지막하게 말입니다. 결과적으로 <바탕글 1>은 간단한 디지털 시계를 만들어서 화면에 보이는 프로그램이었습니다.


그렇지만 언제나 저렇게 큼지막한 시계가 표시되어있으면 때로는 불편할 때가 있을 것입니다. 자, 이제 우리가 방금 표시한 디지털 시계를 없애도록 합시다. 다음 명령을 실행하십시오. 한 줄 짜리 명령이므로 덩이를 씌울 필요는 없습니다. 그냥 명령의 끝에 커서를 놓고 Ctrl-D 를 눌러보십시오.

digitalClockProcess terminate.  
UserLibrary default invalidate: nil lpRect: nil bErase: true.
         true


※ 줄 끝에 '¬' 표시가 되어 있는 것은 한 줄에 쓸 수 있는 글자수의 제한 때문에 어쩔 수 없이 두 줄 이상으로 갈라서 나타낸 것을 의미합니다. 그러므로 이 표시가 있다는 것은 바로 다음 줄과 이어서 한 줄임을 나타 냅니다.


위의 명령을 실행하면 여태껏 표시되던 시계는 없어지고 'true'를 결과값으로 받게 됩니다.


앞서 우리는 두 가지 명령을 실행해 보았습니다. 하나는 <바탕글 1>로써 화면에 시계를 보이는 명령이고, 나머지 하나는 동작하고 있는 시계를 멈추어서 지우는 명령이었습니다. 그런데 이 명령을 실행한 뒤에 나타나는 결과값은 무엇이었습니까? 둘 다 사실 우리에게는 별로 쓸모 없는 결과입니다. 우리는 시계를 보이고 없애는 것이 중요하지, 실제로 이 명령이 실행되고 난 뒤에 어떤 결과를 일터에 표시하는지는 별로 관심이 없습니다.


이럴 때 Smalltalk에서 명령을 실행하는 세 번째의 방법이 있습니다. 이것은 바로 Ctrl-E 글쇠입니다. 명령어를 실행하고 나서 보고되는 결과를 굳이 일터 화면에 표시하고싶지 않을 때 사용합니다.


우리가 방금 실행했던 <바탕글 1>과 "UserLibrary"로 시작하는 명령을, 이번에는 Ctrl-D 대신 Ctrl-E 를 사용하여 실행시켜 보십시오. 한결 깔끔하게 실행되는 것을 볼 수 있습니다.


자, 다시 한 번 정리합시다. Smalltalk에서 명령을 실행하는 방법은 아래와 같습니다.

Smalltalk의 명령 실행법

Ctrl-D: 가장 일반적인 형태. 명령을 실행하고 나서 결과를 보인다.

Ctrl-I: 명령을 실행하고 난 결과가 복잡할 때, 결과값을 탐색한다.

Ctrl-E: 명령 실행 자체에 의미가 있고 결과는 무시하고 싶을 때 쓴다.


  ▶ 다른 Smalltalk Dolphin Smalltalk가 아닌 다른 Smalltalk 환경의 경우 명령 실행 방법이 다를 수 있습니다. 일단 이에 대해서는 나중에 명령 실행을 중점적으로 다루는 마당에서 자세하게 설명할 것입니다.


자, 그럼 계속해서 Smalltalk가 어디까지 할 수 있는지를 시험해 봅시다. 아래 명령은 여러분이 듣고싶은 음성(wave) 파일을 연주해 줍니다.

(Sound fromFile: 'xxxxx.wav') woofAndWait; woofAndWait.


위에서 'xxxxx.wav'를 자신이 연주하고 싶은 파일 이름으로 바꾸어 주면 됩니다. 위의 명령 역시 실행된 후의 결과값 보다는 명령 실행 자체가 중요하므로, Ctrl-E 를 사용하여 실행시켜 봅시다. 필자는

(Sound fromFile: 'C:\Windows\Media\Ding.wav') woofAndWait; woofAndWait.


로 고쳐서 실행해 보았습니다. 여하튼 위의 명령은 우리가 지정한 음성 파일을 두 번 연주해 주는 일을 합니다. 우와! Smalltalk에서 멀티미디어까지???


다음 명령은 이미 프로그래밍 언어를 접해본 사람들에게 의미가 있을지도 모르겠습니다. 100개의 원소를 가진 배열을 만들어 내는 명령입니다.

(1 to: 100) collect: [:i | i].   #(1 2 ...(중략)... 99 100)


결과가 너무 많습니까? Ctrl-D 를 사용하지 말고 Ctrl-I 를 사용하여 탐색해 봅시다. (배운 것을 잘 써먹는 것이 정말 중요하겠지요?) 위의 명령은 1 부터 100 까의 수 100 개가 들어 있는 배열(array)을 만들어 내는 명령입니다. '배열'은 간단히 말해서 번호가 붙은 '통'이라고 생각하면 되겠습니다.


자, 이제 처음보다는 Smalltalk 명령 실행에 많이 익숙해졌을 것입니다. 이제는 좀 더 부드럽게 진행해 나갈 수 있겠습니다. 자, 끝까지 해 봅시다.


지금도 일요일이면 TV에서 복권 추첨을 합니다. 이 때가 복권을 산 사람들의 희비가 엇갈리는 순간이겠지요 아래의 명령은 주택복권을 추첨하여 여섯 개의 번호를 담은 배열―앞에서 배열은 '번호가 붙은 통'쯤으로 이해하라고 말씀드린 것, 기억하십니까?―을 결과값으로 넘겨줍니다.

(Random new next: 6) collect: [:n | (n * 49) rounded]. 
 #(37 48 22 19 22 24 )        "첫 번째 실행"
 #(4 36 20 37 24 5 )          "두 번째 실행"
 #(18 43 28 15 41 22 )        "세 번째 실행"
   ...(중략)...


위의 명령은 실행할 때마다 서로 다른 번호를 나타냅니다. 신기하지 않습니까? 여러분이 즐겨하던 게임에서 매번 다른 상황이 연출되는 것도 이와 같은 원리가 적용되었기 때문입니다.


위의 명령은 다 좋지만 한 가지 결점이 있습니다. 가끔가다가 두 개 이상의 같은 수가 나올 확률이 있다는 것입니다. (첫 번째 실행 결과를 잘 보십시오.) 실제로 복권을 추첨할 때에는 같은 숫자가 두 번 이상 나오면 다시 추첨을 합니다. 그래서 중복된 수가 나오지 않도록 하는데요... 아래의 명령은 바로 이러한 원리를 그대로 적용한 예입니다. 명령이 두 줄 이상이므로 글쇠판이나 마우스로 덩이를 씌운 후 실행하십시오.

<바탕글 2> 복권 추첨 프로그램

r := Random new.
s := Set new.
[ s size = 6 ] whileFalse: [s add: (r next * 49) rounded].
s asSortedCollection asArray.

[ 실행 결과
 #(15 18 21 25 31 39 )        "첫 번째 실행"
 #(6 11 21 26 27 31 )         "두 번째 실행"
        ...(중략)...


<바탕글 2>는 단순히 중복된 숫자만 나오지 않는 것이 아니라, 작은 수에서 큰 수로, 즉 오름차순으로 정렬된 결과를 남깁니다. 이제 정말 복권 추첨 프로그램 같습니까?


지금까지는 글자들하고만 놀았으므로, 이번에는 여러분의 그림 솜씨를 마음껏 발휘할 수 있는 기회를 드리겠습니다. 다음 명령을 <Ctrl-E>를 사용하여 실행하십시오.

scribble := Scribble show.


화면에 'a Scribble'이라는 제목이 달린 노란색 창이 열릴 것입니다. 주저하지 말고 이 창 위에 마우스를 끌어서 그림을 그려봅시다. 아주 잘 그려질 것입니다. 여러분의 그림 솜씨가 여기에서 드러나겠지요?


그림판이 좀 썰렁합니다. 아래의 명령을 한 번 실행시켜 보십시오. 방금 여러분이 실행했던 명령어의 결과로 만들어진 그림판은 닫지 않도록 하십시오.

EtchASketch showOn: scribble model.


위의 명령을 실행하면 "Etch A Sketch"라는 그림판이 열릴 것입니다. 그리고 방금 여러분이 노란색 그림판에 그렸던 그림이 그대로 나타납니다. 아마 Dolphin Smalltalk를 만든 영국에서는 "Etch-a-Sketch"라는 그림판이 보편적으로 사용되고 있나봅니다.


지금 화면에는 노란 그림판과 Etch-aSketch가 떠 있습니다. 둘 중 아무 곳에나 여러분이 그림을 그리면 다른 한 쪽에 그것이 바로 반영이 됩니다. 즉 둘은 모양은 서로 다르지만 같은 자료를 공유하고 있습니다. 이것이 Dolphin Smalltalk에서 응용 프로그램을 만드는 "MVP 짜임새"의 예를 보여주는 것입니다. "MVP 짜임세"에 대해서 공부하려면 아직도 많은 여정이 남았지만, 그 때까지 지치지 말고 열심히 합시다.


그림을 다 그렸으면 이제 열려있는 두 개의 그림판을 닫으십시오.


아래 명령은 "발자취 창"(walkback window)를 표시하는 명령입니다. 발자취 창에 대해서도 나중에 상세하게 다루겠지만, 여기서는 단지 프로그램이 어떤 자취로 실행되어왔는가를 나타내는 창쯤으로 생각하면 됩니다.

self halt.


위의 명령을 실행하면 "발자취 창"이 열립니다. 보통의 경우 그냥 <Terminate> 단추를 누르는 것으로 문제가 해결됩니다. 만일 다른 프로그래밍 언어를 공부해 본 사람이라면 여기서 Debug 단추를 누름으로써 Smalltalk 환경의 벌레잡개(debugger)를 구경하실 수 있습니다. 물론 이렇게 해서 열린 벌래잡개는 Smalltalk 환경을 들여다볼 수 있는 중요한 도구입니다. 그러므로 잘못 다루는 일이 없도록 조심하십시오. 나중에 Smalltalk에 대해서 어느 정도의 지식이 생기면 그 때 벌래잡개에 대해서 깊이 있는 공부를 할 수 있을 것입니다. 운전도 못하면서 자동차 뚜껑을 열어서 차를 망그러뜨리는 일이 있어서는 안되겠지요? ^^:


다음 명령은 Smalltalk 환경에서 'Dolphin'이라는 낱말이 포함된 바탕글(source code)를 찾아내는 명령입니다. 3MB가 넘는 큰 용량의 파일을 뒤져서 내용을 찾는 것이기 때문에 몇 십초 정도의 시간이 걸릴 수도 있습니다. 조금만 기다리면 'Dolphin'이라는 낱말을 포함하고 있는 여러 가지의 바탕글들이 나타나게 될 것입니다.

SmalltalkSystem current browseContainingSource: 'Dolphin'.


"Containing Source: 'Dolphin'"이란 이름이 붙은 창은 두 부분으로 이루어져 있습니다. 위쪽은 찾아낸 바탕글을 나타내고, 아래쪽은 해당 글의 자세한 내용이 표시되는 곳입니다. 과연 Smalltalk 환경에서 Dolphin이라는 낱말이 몇 번이나 나왔으며, 또 어디서 사용되고 있는지를 한 번 살펴보시기 바랍니다. (참고로 '바탕글'을 명령을 써넣은 글이라는 뜻입니다.)


이제 마지막 명령입니다. 우리는 지금까지 여러 가지 명령을 실행해 왔는데, 이번 명령처럼 썰렁한 것은 없을 것입니다. 어느 정도로 썰렁하냐고요? 직접 실행을 해 보십시오. 아래의 명령을 실행해 봅시다.

View destroyAll.


위의 명령이 실행되자마자 Smalltalk 환경의 열려있던 모든 창이 없어지고 "Transcript"라는 이름의 창만 하나 덜렁 남아 있게 되었습니다. 썰렁하지 않습니까? ^^:


방금 내린 명령은 주로 Smalltalk 환경을 깨끗이 하고 싶을 때 사용하는 명령입니다. 지금까지 우리는 많은 명령을 실행해서 결과를 출력했으므로 우리가 가지고 놀았던 흔적(?)을 깨끗이 하는 것이라고 생각하면 되겠습니다.


지금까지 우리는 Smalltalk에서 여러 가지 명령을 실행해 보았습니다. 그리고 명령을 어떻게 실행하는지에 대해서도 알아보았습니다. 명령을 실행할 때에는 Ctrl-D, Ctrl-E, Ctrl-I의 세 가지 글쇠를 사용한다는 것도 알아보았습니다. 또한 한 줄 짜리 명령과 여러 줄에 걸친 명령을 실행하는 방법도 알아보았습니다.


이제 Smalltalk에서 명령을 내리는 것이 별로 어렵지 않을 거라고 생각합니다. 만약 잘 모르겠으면 Smalltalk를 빠져나간 다음 다시 들어와서 이 글에 있는 내용을 다시 한 번 따라해 보시기 바랍니다.


이제 Smalltalk를 끝내야 하는데, 앞서 말씀드렸듯이 저장의 문제가 남아 있습니다. Smalltalk를 끝낼 때마다 현재 Smalltalk의 상태를 저장하겠느냐고 묻게 됩니다. 지금은 아직 등록 절차를 밟지 않았으므로 저장은 불가능합니다. 오히려 이것이 더 잘된 일인지도 모르겠습니다. 저장이 안 된다는 말은 여러분이 무슨 실수를 하더라도 그것이 Smalltalk 환경에 영향을 주지 않음을 의미하기 때문입니다. 그러므로 당분간 Smalltalk에 익숙해질 때까지 저장 기능 없이 연습해 보는 것도 도움이 될 것입니다. 등록 절차에 관한 것은 바로 다음에 설명을 드리도록 하겠습니다.


몇 가지 준비해야 할 것들

지금까지 우리는 Smalltalk를 시작하고 끝내는 방법과 함께, Smalltalk 명령을 실행하는 방법에 대해서 알아보았습니다. 이제 여기서는 여러분이 앞으로 Smalltalk 공부를 계속 진행하기 전에 준비해야 할 몇 가지 사항에 대해서 다루어보도록 하겠습니다.


Dolphin Smalltalk 등록하기

이제까지 우리는 Dolphin Smalltalk를 사용하면서 저장 기능을 사용할 수 없었습니다. 이는 우리가 아직 등록 절차를 거치지 않았기 때문입니다. Object Arts사(社)는 공개용으로 사용할 수 있는 Dolphin Smalltalk 98 / 1.1 판을 배포하면서, 그를 사용하는 사람들이 무료로 등록번호를 발급 받아서 사용하도록 하고 있습니다. 이는 Dolphin Smalltalk를 사용하는 사람들이 어떤 계층인지, 그리고 이 사람들이 어떤 것을 원하는지를 조사하기 위한 수단이라고 생각합니다. 또한 사용자 지원을 위해서도 필요한 사항이라고도 합니다.등록은 무료입니다. 그러므로 인터넷을 사용할 수 있는 사람이라면 바로 등록 절차를 거칠 수 있습니다.


앞서 말한 대로, 등록을 하려면 Object Arts사에서 발급하는 등록 번호를 받아야 합니다. 등록 번호를 발급 받는 방법은 WWW(World Wide Web) 페이지를 사용하는 방법과 전자 우편(e-mail)을 사용하는 방법이 있습니다.


WWW를 사용하는 방법

Dolphin Smalltalk를 시작합니다. 그런 다음 File > Exit Dolphin 메뉴를 실행시켜서 Dolphin Smalltalk를 종료합니다. 이 때 현재 Smalltalk의 상황을 저장하겠느냐고 묻는데, 이 물음에 <예>라고 대답합니다. 그러면 "Locked Image"라는 제목이 붙은 창이 열릴 것입니다. 여기서는 왜 등록을 해야 하는지, 그리고 어떻게 등록을 해야 하는지가 설명되어있습니다.


여기서 Username 입력 상자에 여러분의 영문 이름을 넣습니다. 그러면 창 아래에 있는 <Register Online Now>라는 단추를 누를 수 있게 될 것입니다. 인터넷에 연결되어있는지 확인하고 이어서 이 단추를 누르면 Object Arts사의 "등록 페이지"로 이동하게 될 것입니다.


이 페이지에는 몇 개의 입력 항목이 있습니다. 간단하게 이 항목들에 대해서 설명합니다.

  • Product: 사용하고 있는 Dolphin Smalltalk의 종류. 우리는 1.1 판을 고르면 되겠지요?
  • First Name: 여러분의 이름을 넣습니다. 저의 경우는 ChanHong Kim으로 표기되므로, First Name에는 ChanHong을 입력하면 됩니다.
  • Last Name: 여러분의 성씨를 넣습니다. 저의 경우에는 Kim이겠지요?
  • Stree Address: 우리의 경우에는 시/군, 구/읍면, 동, 번지로 주소를 쓰지만 외국의 경우는 거꾸로 입니다. Street Address에는 여러분의 동이름과 번지수를 씁니다. 저의 경우라면 2288-3, DaeMyung 3 Dong, Nam-Gu 쯤으로 임력하면 되겠지요?
  • City: 여러분이 사는 도시를 입력합니다. 저는 대구랍니다. Taegu.
  • State: 미국의 경우는 주를 입력합니다만, 우리는 비워둡니다.
  • Zip Code: 여러분의 우편번호를 넣습니다. 700-234.
  • Country: 우리의 자랑스런 "Korea"를 선택합니다.
  • E-mail: 여러분의 전자우편 주소를 입력하면 됩니다.
  • Where did you hear about this product?
    • Dolphin Smalltalk에 대해 처음어로 접한 매체를 고릅니다.
  • Previous experience of Smalltalk?
    • 이전에 Smalltalk를 사용한 경험을 묻고 있습니다.
  • Intended use of this product?
    • Dolphin Smalltalk를 어떤 목적에 사용할 것인지를 묻습니다.
  • How many attempts did it take you to download this software?:
    • Dolphin Smalltalk를 몇 번만에 전송받았는지를 묻습니다.
  • Image Code: 여기에 "Locked Image" 창에 표시된 Image code를 넣습니다.
  • Usrname: "Locked Image" 창에 입력한 여러분의 Username을 입력합니다. (반드시 일치해야 합니다.)


여기까지 항목의 입력이 끝나면 이제는 아래의 <Register> 단추를 누릅니다. 그러면 Image Code와 그에 해당하는 Password를 발급 받게 됩니다. "Locked Image" 창에 방금 받은 Password를 입력하면 등록 절차가 끝나게 됩니다. 현재 여러분이 설치한 Smalltalk에 대해서는 Username과 Password가 그대로 사용될 수 있으므로, 다음부터는 등록 절차를 거칠 필요가 없습니다.


등록 절차를 마치면 이제부터 여러분의 컴퓨터에 설치되어 있는 Dolphin Smalltalk 는 저장 기능을 사용할 수 있게 설정됩니다. 이제 여러분이 Smalltalk에서 실행한 모든 것을 저장할 수 있습니다.


전자우편을 사용하는 방법

WWW를 사용하기 어렵거나 인터넷을 사용하기 어려운 분들은 전자우편을 이용하면 등록번호를 발급 받을 수 있습니다.

  • 수신: support@object-arts.com
  • 제목: password
  • 내용: Username과 Image code.


위의 형식대로 편지를 보내게 되면 곧 여러분의 사서함으로 등록 번호가 동봉된 편지가 도착할 것입니다.


이렇게 해서 발급받은 password를 (1)과 마찬가지로 입력하게 되면 Dolphin Smalltalk가 등록판이 됩니다.


일단 등록판이 생성되면 모든 기능을 제한 없이 사용할 수 있습니다.


바탕본 여벌 받기

Smalltalk를 끝낼 때 여러분은 현재 Smalltalk의 상태를 그대로 저장했다가 나중에 Smalltalk를 실행할 때 똑같이 복원할 수 있습니다. 예를 들어, 여러분은 저번 "1.3" 마디에서 Smalltalk로 만들어진 디지털 시계를 본 적이 있을 것입니다. 이제 저장 기능을 사용할 수 있는 여러분의 Dolphin Smalltalk에서 아래의 명령을 Ctrl-E 글쇠를 사용하여 실행해서 다시 한 번 디지털 시계를 표시해 봅시다.

<바탕글 1> Smalltalk로 만든 디지털 시계

digitalClockProcess := [[
        Processor sleep: 1000.
        (DesktopView current canvas)
                font: (Font name: 'Arial' pointSize: 36) bold;
                text: Time now printString at: 10@10;
                free
] repeat] fork.


여전히 화면에 큼지막한 디지털 시계가 표시되고 있을 것입니다. 이제 File > Exit Dolphin 메뉴를 사용해서 Dolphin Smalltalk를 끝내봅시다. 이 때 Smalltalk는 현재의 상태를 저장하겠느냐고 묻습니다. 를 선택하십시오. 그러면 Smalltalk의 실행이 끝나면서 여태껏 잘 돌아가던 시계가 멈춘 것을 볼 수 있습니다. 시계를 돌리던 Smalltalk 환경이 끝났기 때문에 당연히 멈춘 것이지요. 이 상태에서 시계를 지우려면 현재 화면을 다시 그려줘야 합니다. Windows의 바탕 화면이 표시되어있다면 F5 글쇠를 눌러서 바탕 화면을 다시 그려줄 수 있습니다.


이제 다시 Smalltalk를 실행시켜 봅시다. 어떻게 되었습니까? Smalltalk가 실행되자마자 여러분이 입력한 <바탕글 1>과 함께 디지털 시계가 다시 움직이기 시작했습니다. 즉, 여러분이 이전에 Smalltalk를 끝낸 상태를 그대로 유지하고 움직이는 것입니다. 신기하지 않습니까?


이야기를 더 진행하기 전에 다음의 명령을 Ctrl-E로 실행시켜서 돌아가는 시계를 멈춥시다.

digitalClockProcess terminate.
UserLibrary default invalidate: nil lpRect: nil bErase: true.


Smalltalk에서는 모든 것이 객체(object)입니다. 우리는 Smalltalk언어를 객체지향적 언어라고 말합니다. 따라서 Smalltalk에서 모든 것은 객체라는 사실이 그리 놀랄만한 일은 아닙니다. 그러나 C++나 Delphi 또는 Visual Basic 등 다른 개발 환경을 사용하던 사람이라면 Smalltalk의 객체가 살아있다는 사실을 간과하기 쉽습니다. 보는 바와 같이, Smalltalk의 모든 객체는 살아있습니다. 그리고 이는 Smalltalk를 종료할 때 그대로 저장되었다가 나중에 Smalltalk 환경이 시작되면 제 상태를 유지하면서 계속 움직입니다.


Smalltalk를 끝낼 때에는 현재의 상태를 그대로 기록해 둡니다. 여기서 '현재의 Smalltalk 상태'를 "본"(image)이라고 부르고, 이러한 본을 저장해 두는 것을 "본을 뜬다"고 말합니다. 본에는 Smalltalk 환경에서 살아서 돌아가는 모든 종류의 객체들이 저장되어 있습니다. Smalltalk 환경은 결국 4만여 개의 객체가 어루러져서 돌아가는 곳이므로,'본'에는 Smalltalk의 모든 상태가 기록되는 것입니다. 그러므로 '본'은 매우 중요한 것입니다. 그야말로 여러분이 만들어 놓은 모든 것은 '본'에 저장됩니다. 그러므로 Smalltalk를 종료할 때에는 반드시 "본"을 떠 두도록 합시다. 그래야만 나중에 Smalltalk 환경이 다시 시작될 때 이전에 뜬 본을 그대로 가지고 와서 객체들을 재생시킬 수 있기 때문입니다.


결국 "본"은 시간이 흐름에 따라 자꾸 자꾸 변한다는 것을 알 수 있습니다. 때로는 새로운 객체가 만들어지기도 하고, 이미 있던 객체가 없어지기도 하면서 말이지요. 그런데 만약 여러분이 실수로 Smalltalk에서 꼭 필요한 어떤 객체를 지웠다고 생각해 봅시다(물론 이러한 일을 Smalltalk가 묵묵히 지켜보고 있지는 않습니다. 몇 번의 경고 과정을 거치지요.). 그럼 어떻게 되살릴 수 있겠습니까? 사실 방법이 없습니다. 지우기는 쉬워도, 그렇게 해서 한 번 지워진 객체는 다시는 복구시킬 수가 없기 때문입니다. 이것이 여러분이 Smalltalk를 설치한 후에 바로 생성되는 '바탕본'(base image)을 한 벌 떠 두어야 하는 이유입니다. 그래야만 만일의 경우에 발생하는 문제를 예방할 수 있는 것입니다.


자, 이제 그럼 어떻게 하면 바탕본을 여벌 받아둘 수 있는지를 알아봅시다.


Dolphin Smalltalk가 설치된 폴더를 열어보면 다음과 같은 파일이 있음을 알 수 있습니다.

  • Dolphin.chg
  • Dolphin.img
  • Dolphin.sml


이 세 개의 파일이 여러분이 여벌(back up)을 받아야 하는 파일들입니다. 위의 파일들을 여벌 받아서 다른 곳에 각각 복사해 두면, 만일 여러분의 실수로 지워지거나 바뀐 Smalltalk 환경을 되돌릴 수 있을 것입니다. 필자의 경우 위의 세 파일을 압축하여 따로 보관합니다. 적어도 일 주일에 한 번은 위의 파일을 여벌 받아두는 것이 매우 좋습니다. (필자는 하루에 한 번 씩 여벌을 받습니다만...)


그럼 위의 파일들이 각각 무슨 역할을 하는지 간단하게나마 설명을 하도록 하겠습니다.


  • Dolphin.sml

이 파일은 Dolphin Smalltalk 바탕본의 바탕글(source code)입니다. 여기에는 기본적으로 Object Arts사에서 만들어 놓은 Smalltalk 환경을 이루고 있는 모든 구성요소에 대한 바탕글이 실려 있습니다. 용량이 3MB가 넘습니다.


  • Dolphin.img

이 파일은 Dolphin Smalltalk의 '본'(image)입니다. 앞서 말했지만, 이 본에는 Smalltalk의 모든 객체들의 상태가 저장되어있습니다. 그래서 다음에 Smalltalk 환경이 다시 실행되면 여기에 저장되어있는 객체들이 재생되어 활동을 시작하는 것입니다.


  • Dolphin.chg

이 파일은 '변경 기록 파일'(change log file)이라고 부릅니다. 이 파일 안에는 여러분이 Smalltalk에서 실행한 모든 명령이 기록됩니다. 새로운 객체를 만든다 거나 이전에 있던 객체를 지운다거나 하는, 여러분의 모든 동작이 이 파일에 기록되어 있습니다. 다시 말하면 바탕본이 어떻게 변해왔는지를 이 파일에 기록해 두는 것입니다.


여기서 여러분이 궁금해하는 점이 있을지도 모르겠습니다. 바로 본은 무엇이고, 바탕글은 무엇이냐는 것입니다. 즉 '본'이 있는데 왜 따로 바탕글이 필요한가가 궁금할 것입니다.


'본'에는 객체의 상태가 기억되어 있습니다. 그리고 '바탕글'은 이러한 본에 들어가는 객체를 만들기 위한 명령들이 들어 있습니다. 비유를 들어보면, '본'은 집이고 '바탕글'은 설계도입니다. 설계도대로 만들면 한 체의 집이 생깁니다. 그러므로 집이 있고 그 집을 만들기 위한 설계도가 있는 것입니다. 마찬가지로 '본'에는 무수히 많은 객체들이 있고, 이 객체들을 만들기 위한 명령은 바탕글에 들어있습니다. 바탕글에 있는 명령을 사용하면 객체를 만들 수 있는 것이고, 이 결과가 바로 '본'에 저장되는 것입니다.


우리가 맨 처음에

3 + 4.   7


이라고 했는데, 이 간단한 명령도 객체를 만드는 일을 합니다. 즉 '3'과 '4' 라는 객체를 가지고 '7'이라는 새로운 객체를 만들었기 때문입니다. '7'이라는 객체를 만들기 위해서 "3 + 4."라는 명령을 한 것이고, 이 결과 생겨나는 것이 "7"이라는 객체입니다. 여기서 "3 + 4."는 바탕글이 되는 것이고, '7' 은 그 결과(=본)가 되는 것입니다. 이제 '본'과 '바탕글'의 차이를 아시겠습니까?


여하튼 Dolphin Smalltalk에서 여러분은 위에서 늘어놓은 세 개의 파일을 반드시 여벌 받아 놓아야만 합니다. 그리고 여러분이 Smalltalk 환경으로 작업을 해 나가면서 중간 중간에 여러분만의 본을 떠 두는 것이 좋습니다. 여벌 받기는 아무리 강조해도 지나치지 않으니까요.


  ▶ 잠깐! Dolphin Smalltalk가 아닌 다른 Smalltalk 환경에서는 필자가 설명한 것과 다른 방식으로 '본'을 관리할 수 있습니다. 그러나 Smalltalk는 기본적으로 본에 모든 상태를 저장하고, 다음에 Smalltalk 환경이 다시 실행되면 본에 기록된 것을 불러와서 쓴다는 것은 변함이 없습니다.


글꼴 설정하기

Dolphin Smalltalk는 기본적으로 영어권에 맞도록 설정되어 있습니다. 따라서 한글 Windows에서 사용하는 기본 글꼴인 '굴림'으로 글꼴 설정을 바꾸어줄 필요가 있습니다.


Dolphin Smalltalk 의 Tool > Options > Default Font... 메뉴를 사용하여 기본 글꼴을 '굴림'으로 설정해 놓으면 이 후부터 Smalltalk는 기본적으로 굴림체의 글꼴을 사용할 것입니다. ('굴림'과 '굴림체'는 다른 글꼴이므로 반드시 '굴림'을 선택합시다.)


이제부터 여러분이 설정하는 것은 모두 Smalltalk의 본에 반영이 됩니다. 그러므로 다음부터 Smalltalk를 시작하면 기본 글꼴이 적용될 것입니다.


지금까지 우리는 Dolphin Smalltalk를 등록하고, 바탕본을 여벌 받고, 기본 글꼴을 설정하는 방법을 익혔습니다. 이제 이를 바탕으로 하여 Smalltalk 환경을 정비해 두면, 이 뒤로는 Smalltalk 공부에 많은 도움이 될 것입니다. 마지막으로 한 마디만 더 하겠습니다. "여벌 받기"는 아무리 강조해도 지나치지 않습니다! :)


Smalltalk 환경 둘러보기

Smalltalk를 실행해 보면 최소한 두 개의 창이 열려 있음을 볼 수 있습니다. 하나는 "System Transcript"라는 제목이 붙어있는 "알림판"(transcript)이 있고, 나머지 하나는 "untitled - workspace"라는 제목이 붙여진 "일터"가 그것입니다. 물론 Smalltalk 환경에는 이 두 가지 창 말고도 다른 여러 가지의 창이 있습니다. 각각은 저마다의 독특한 쓰임새를 가지고 있으며, 이들은 모두 Smalltalk로 프로그램을 짜는데 꼭 필요한 역할을 수행합니다. 이제 이 마디[節]에서는 Smalltalk에는 어떤 창들이 있으며 이들이 대충 어떤 일을 하는지를 알아봄으로써, Smalltalk 환경의 특징들을 여러분이 간단히 알아볼 수 있도록 하겠습니다. 각 창들에 대해서 나중에 필요할 때 좀 더 자세하게 설명할 것입니다. 여기서는 그냥 이러이러한 창이 있으며, 대충 이렇게 생겼구나 하는 정도만 이해하도록 합시다.


아직까지 자료실에서 Dolphin Smalltalk를 내리받아 설치하지 않으신 분이라면 지금부터는 조금 용량이 많기는 하더라도 Smalltalk 환경을 내리받아서 공부를 계속하시라고 권합니다. 세상은 멀티미디어화 되어가고 있지만 아직도 우리의 정겨운 통신 환경은 파란 바탕에 흰색 글자만 나타낼 수 있기 때문에, 그림을 곁들이고 싶은 필자의 간절한 마음이 반영되지 못하기 때문입니다. :)


알림판

Smalltalk 환경에서 가장 중요한 창은 "알림판"(transcript)입니다. 원래 'transcript'라는 낱말의 뜻은 '베껴낸 것, 사본, 등본'인데, Smalltalk를 깊이 공부하지 못한 필자로써는 왜 transcript라는 낱말이 이 창에 붙게 되었는지를 이해하기가 어렵습니다. 아무래도 Smalltalk 시스템의 상태가 이 창에 그대로 반영되기 때문이 아닌가 생각합니다.


여하튼 이 창은 Smalltalk 환경에서 가장 중요한 창입니다. 이 창이 열림으로써 바로 Smalltalk 환경이 시작되는 것이고, 이 창이 닫힘으로써 Smalltalk가 종료되는 것입니다. 즉 이 창은 Smalltalk 환경과 동고동락한다고 해도 과언이 아닐 정도로, Smalltalk 환경이 실행되어 있다면 언제든지 열려있는 창입니다.


이 창은 뒤에서 설명할 '일터'(workspace)와 비슷한 기능을 합니다. 그러나 알림판이 '일터'와 구별되는 가장 큰 특성은, Smalltalk 환경에서 사용자에게 알려야 할 것이 있으면 언제든지 이 창에 표시된다는 것입니다. 프로그램을 실행하는데 중대한 잘못이 생겼다거나, 새로운 꾸러미를 불러왔다거나 이미 있던 꾸러미나 객체를 지울 때 문제가 있었다는 등 이 알림판에는 Smalltalk 환경이 우리에게 알려야 할 여러 가지 사항들이 기록됩니다.물론 여러분이 이 알림판에 지시를 보내어 여러분만의 글줄을 찍게 할 수도 있습니다만, 그것은 조금 뒤로 미루겠습니다.


Smalltalk 환경을 끝낼 때 File > Exit Dolphin 명령을 내리는 대신 알림판 을 닫게 되면 Smalltalk 환경을 끝낼 수 있습니다.


일터

일터(workspace)란 Smalltalk 환경에서 알림판 다음으로 중요한 창입니다. 여러분은 일터에서 무엇을 합니까? :) 일을 하지요? 일에 성격에 따라 좀 다르겠지만, 몸을 많이 움직여야 하는 일이라면, 땀을 흘리면서 물건을 나르기도 하고 뛰기도 하면서 이 일터를 누빕니다. 머리를 쓰는 일이라면 이 일터에서 글을 쓰기도 하고 지우기도 합니다. 여러분이 회사의 사장이라면 일터에서 아랫사람들에게 여러 가지 지시를 내립니다. 그리고 지시를 받은 사람들은 자신이 처리한 일의 결과를 사장에게 되돌려 보내줍니다. 이렇듯 일터는 분주한 곳입니다.


Smalltalk의 일터 또한 마찬가지입니다. 여기서 여러분은 기본적으로 글을 쓸 수 있습니다. 이 글이 Smalltalk에게 내리는 명령이 될 수도 있고, 명령을 설명하는 풀이글이 될 수도 있으며, 그냥 아무런 관계없는 글이 될 수도 있습니다.


일터에서 여러분은 Smalltalk에서 명령을 내리고 그 결과를 시험합니다. 그리고 프로그램의 어떤 부분을 만들기 전에 여기서 기본적으로 여러 가지 명령을 내려봄으로써 논리를 세워 나갈 수도 있습니다.


새로운 일터를 만들기 위해서는 File > New 메뉴를 사용하거나, 도구 모음에서 "흰 종이가 그려진 그림"을 누르면 됩니다. 알림판이 오직 하나밖에 존재할 수 없는데 비해, 일터는 여러분이 필요한 수만큼 많이 만들 수 있습니다. 그리고 각각의 일터에 기록된 글들을 따로따로 저장하거나 불러올 수 있습니다. 그러므로 어떤 명령을 실행한 뒤에 나타나는 여러 가지 결과와 더불어 여러분이 내린 명령을 따로 하나의 파일로 저장해 둘 수 있다는 말입니다.


앞서 우리는 알림판에 지시를 내림으로써 우리가 원하는 글줄을 찍을 수 있다고 했습니다. 그럼 다음과 같이 명령해 보십시오. <Ctrl-E> 글쇠를 사용해서 아래 명령을 실행하십시오. (Smalltalk 명령을 실행하는 방법에 어려움을 겪는 분이라면 "1.3" 마디를 참조하시기 바랍니다.)

Transcript show: '안녕하세요?'.
 안녕하세요?          "알림판에 이 내용이 표시된다."


  ▶ 잠깐! 베끼기는 하지 맙시다! 앞으로 이 글을 진행하면서 무수히 많은 Smalltalk의 명령이 소개될 것입니다. 그래서 저는 여러분에게 부탁을 드릴까 합니다. 이 글에서 제공되는 Smalltalk 명령을 복사하여 일터에 붙여 넣어서 실행하시지 말았으면 하는 것이 제 부탁입니다. 좀 번거롭더라도 지금 여러분이 읽고 있는 명령을 그대로 일터에 글쇠판으로 쳐 넣고 실행하여 결과를 관찰하는 것이 훨씬 좋습니다. 단순히 복사해서 붙여 넣는 것 보다 실제로 글쇠판에서 명령을 치게 되면, 이 글에서 일단 명령을 읽어서 머리에 기억되게 되고, 기억된 것을 글쇠판으로 치면서 일터에 나타난 명령을 보게 되고, 명령을 실행하면서 세 번째로 명령을 보게 됩니다. 그러나 명령을 복사하고 붙이는 것은 전혀 이러한 효과를 볼 수가 없습니다.
글을 어떻게 읽고 어떻게 실행하는지는 전적으로 여러분에게 달려있습니다. 그러나 좀 더 효과적인 공부를 위해서는 모든 Smalltalk 명령을 여러분이 스스로 쳐 넣으며 실행해야 합니다. 맹목적으로 명령을 쳐 넣는 것이 아니라, 도대체 이 명령이 어떤 의미인지를 생각하면서 입력하면 Smalltalk 공부는 생각 외로 매우 쉬워질 것입니다. 이는 필자가 처음 "Smalltalk Tutorial"을 공부할 때 직접 경험한 것이므로, 한 번 믿어보셔도 좋을 것입니다.


어떻습니까? 방금 실행한 명령의 결과가 그대로 알림판에 나타났습니다. 이렇게 일터에서 여러분은 Smalltalk에게 명령을 내릴 수 있습니다. 또한 다음과 같은 명령을 사용하여 일터에 명령의 수행 결과를 출력할 수도 있습니다.

3 + 4.   7


이처럼 일터는 여러분의 Smalltalk 프로그래밍에 있어서 가장 자주 접하게 되는 창이므로, 그 사용 방법을 확실히 익혀두는 것이 좋을 것입니다.


참고로 일터에서 할 수 있는 대부분의 일을 알림판에서도 할 수 있습니다. 그렇지만 관례적으로 Smalltalk에서 대부분의 작업은 알림판이 아닌 일터에서 수행합니다. 알림판에는 주로 알림 사항이 기록되도록 하고, Smalltalk 환경 전체에 영향을 줄 명령이 있다면 이 '알림판'에서 실행하는 것이 관례로 되어 있습니다.


객체 탐색기

객체 탐색기(object inspector)는 명령을 실행할 떄 Ctrl-DCtrl-E 글쇠 대신 Ctrl-I 글쇠를 사용할 때 나타나는 창입니다. 이 창은 기본적으로 복잡한 구조를 가지고 있는 객체의 내용을 좀 더 잘게 쪼개어 탐색하기 편리하도록 만들어진 도구입니다. 앞에서 우리가 탐색기를 사용한 예를 생각해 보십시오. 아래의 명령은 Smalltalk 환경에 들어 있는 모든 갈래(class)들을 가나다 순서로 늘어놓은 모듬을 되돌리는 명령입니다.

Class allClasses asSortedCollection   "객체 탐색기 열림"


위의 명령을 Ctrl-I 글쇠로 실행해 보면 "Inspecting a SortedCollection" 이라는 제목이 붙은 창이 열릴 것입니다. 위의 명령을 실행하게 되면 500 개가 넘는 원소들이 들어 있는 모듬이 결과값으로 돌아오게 되는데 이를 좀 더쉽게 탐색하기 위해서는 객체 탐색기를 사용하는 것이 편리합니다.


객체 탐색기는 두 부분으로 이루어지는데, 왼쪽에는 그 객체에 속해있는 부분 부분들의 이름이 표시되고, 오른쪽에는 현재 돋이된 부분의 값이 표시됩니다. 맨 위의 "self"는 탐색하고 있는 객체 자신을 나타냅니다.


객체 탐색기는 복잡한 구조의 객체를 효율적으로 들여다보는데 매우 큰 몫을 하고 있습니다.


갈래씨줄 탐색기

자, 여러분이 지금 어디에 있던지 Tools > Class Hierarchy Browser 메뉴를 실행시키거나 글쇠판에서 <Ctrl=B>를 누르면 '갈래씨줄 탐색기'Class Hierarchy Browser)를 불러낼 수 있습니다. 갈래씨줄 탐색기를 줄여서 '갈래 탐색기'라고도 부릅니다.


갈래는 홀로 떨어져서 있는 것이 아니라 다른 갈래와 관계를 맺고 있는데, 이 갈래씨줄 탐색기는 이러한 갈래들의 씨줄(hierarchy)을 짚어가며 갈래들을 탐색할 때 사용하는 도구입니다. 모두 크게 내 부분으로 이루어진 갈래 탐색기가 매우 복잡해 보이겠지만, 이 창에 익숙해질 때쯤이면 여러분은 Smalltalk의 절반 이상을 공부한 셈이 됩니다.


Smalltalk에서는 모든 것이 객체입니다. 그러므로 프로그래밍을 할 때에도 이러한 객체를 사용하거나 아니면 새로 만들어야 합니다. 이 일을 이 '갈래 탐색기'에서 할 수 있기 때문에, '일터'와 더불어 프로그래밍을 할 때 가장 자주 사용되는 도구이기도 합니다.


길수 탐색기

우리가 Smalltalk에게 어떤 명령을 내리면 Smalltalk는 길수(method)를 뒤져서 이 명령을 어떻게 실행해야할지를 알아냅니다. 길수 탐색기는 이러한 길수들을 따로 모아서 탐색할 때 쓰이는 도구입니다. 다음의 명령은 길수 중에서 'Dolphin'이라는 낱말이 들어간 것을 지금 쓰고 있는 본(image)에서 죄다 찾아내는 명령입니다. 약 3M 이상 되는 바탕글(source code)에서 글귀를 찾는 것이므로 몇 초 정도 시간이 걸립니다.

SmalltalkSystem current browseContainingSource: 'Dolphin' 
 "길수 탐색기 열림"


생각보다 많은 길수에 "Dolphin"이라는 글귀가 포함되어있습니다. 이 길수 탐색기는 크게 두 부분으로 나누어져 있습니다. 위쪽 창에는 길수 이름들이 표시되어 있고 각각의 길수를 돋이할 수 있도록 되어있습니다. 그리고 아래쪽 창에는 위쪽 창에서 돋이되어있는 길수의 바탕글이 표시됩니다. 길수 탐색기는 앞서 말한 것과 같이 주로 여러 갈래(class)에서 조건에 맞는 길수를 뽑아내어 내용을 살펴보고자 할 때 사용합니다.


꾸러미 탐색기

Smalltalk 환경의 Tools > Package Browser 메뉴를 선택하면 꾸러미 탐색기를 열 수 있습니다. 꾸러미(package)에는 Smalltalk의 갈래, 객체, 자원(resource) 등이 함께 꾸려져서 들어있습니다. 주로 꾸러미는 하나의 커다란 프로그램을 만들 때, 그 프로그램과 관계된 여러 가지 객체들을 넣어놓고 관리하기 위해서 사용됩니다. 꾸러미 탐색기는 이러한 꾸러미를 새로 만들거나 이미 있던 꾸러미를 들여오거나, 지우거나 고치는 일을 합니다.


꾸러미 탐색기는 크게 세 부분으로 되어있습니다. 왼쪽에 세로로 길게 되어 있는 창은 현재 Dolphin Smalltalk 환경에 설치되어있는 꾸러미들을 늘어놓느 것입니다. 오른쪽 윗부분은 현재 꾸러미에 들어있는 것들을 살펴보기 위한 곳으로써, 갈래, 길수, 넓은 꼬리표(global variables), 자원 등을 각각 따로따로 볼 수 있는 고름(tab)이 달려있습니다. 오른쪽 아랫부분은 위에서 돋이된 내용을 실제로 보여주는 곳입니다. 갈래가 돋이되어있다면 갈래꼴(class definition)을, 길수가 돋이되어 있다면 바탕글 등을 보여줍니다.


꾸러미 탐색기는 Smalltalk 환경에서 움직이는 모든 객체를 관리하는 매우 중요한 도구입니다.


창맵씨

창맵씨(View Composer)는 사용자 접속 환경(User Interface)를 만드는 도구입니다. Tools > View Composer 메뉴를 선택하면 이 창을 열 수 있습니다. 여기서 여러분은 창(window)이나 대화 상자(Dialog box)를 만들어서 프로그램을 사용하는 최종사용자가 자료를 입력할 수 있도록 해 줍니다.


넓은 부분이 실제로 창을 설계할 때 사용하는 부분이고, 아래에 위치한 세 개의 창은 각각 현재 창의 뼈대, 현재 선택된 객체가 가지는 꼴(aspect), 그리고 바로 왼쪽에 돋이되어있는 꼴이 갖고 있는 값을 표시하는 부분입니다.


창맵씨에는 '연모통'(tool box)라고 하는 딸림창이 떠 있습니다. 이 창에는 창을 만들 때 필요한 여러 가지 부품 자원이 들어있습니다. 글씨 꼬리표 (label), 입력 상자(edit box), 단추(push button)는 물론 이미 만들어진 창도 여기에 표시됩니다.


Delphi나 Visual Basic에서는 창을 설계하는 것에 상당히 많은 비중을 둡니다. 물론 Smalltalk에서도 창 만들기는 매우 중요한 위치를 차지하지만, 기본적으로 창을 설계하기 전에 먼저 객체를 만들어야 합니다. 따라서 앞으로 창맵씨를 사용하기까지 참으로 긴 여정이 여러분을 기다리고 있을 것입니다.


자원 탐색기

'Tools > Resource Browser' 를 선택하면 자원 탐색기를 열 수 있습니다. 앞서 창맵씨를 설명하면서 '연모통'에 대해서 이야기한 적이 있습니다. 연모통은 창을 만들 때 쓸 수 있는 여러 가지 부품 자원들이 들어있다고 했는데, 자원 탐색기는 이러한 자원을 관리하는 일을 합니다. 새로운 자원을 만들거나 이미 있는 자원의 이름을 바꾸기도 하고, 자원이 연결된 갈래의 상태를 바꾸기도 합니다. 창맵씨와 더불어 자원 탐색기도 사용자 접속 환경을 만드는데 매우 중요한 역할을 수행하고 있습니다.


발자취 창과 벌래잡개

사람은 누구나 실수를 하기마련입니다. 저도 그렇고 여러분도 그럴 겁니다. Smalltalk에게 명령을 내릴 때에도 여러분이나 저나 실수를 할 때가 있습니다. "발자취 창"(walkback window)은 Smalltalk 프로그램이 실행되는 상태에서 어떤 중대한 문제가 발생했을 때, 지금까지 어떤 길수들이 어떻게 실행되어왔는지의 자취를 표시하고, 사용자가 알맞은 조치를 취할 수 있도록 돕는 창입니다.


아래의 명령을 Ctrl-D 글쇠로 실행시켜 봅시다.

5 hello   "발자취 창 열림"


위 명령을 실행하자마자 "SmallInteger does not understand #hello"라는 제목이 붙은 발자취 창이 표시될 것입니다. 이 내용인즉슨 "SmallInteger는 hello라는 지시를 알아듣지 못했다"는 것입니다. 즉 "5 hello"라는 명령을 Smalltalk가(정확히는 숫자 '5'가) 알아듣지 못했다는 말입니다.


그리고 아래에 나타난 작은 상자 안에 여태까지 명령을 실행한 발자취를 표시합니다.

SmallInteger(Object)>>doesNotUnderstand:
UndefinedObject>>{unbound}doIt
CompiledExpression>>value:
SmalltalkWorkspace>>evaluateRange:ifFail:
SmalltalkWorkspace>>evaluateItIfFail:
SmalltalkWorkspace>>evaluateIt
	....(하략)


여러분 대부분이 아직 위의 내용이 무엇을 의미하는지 정확하게 이해하지 못했을 것입니다. 그러나 Smalltalk에 익숙한 사람들은 위의 정보를 보고, 대체 어떤 경로를 따라서 명령이 실행되었으며 어디서 문제가 발생헀는지를 추측할 수 있게 됩니다. 물론 대부분의 경우는 발자취 창의 제목만 보고서도 문제의 원인을 파악할 수 있습니다. 지금과 같은 경우에는 우리가 내린 명령을 알아듣지 못했다는 것이 문제이겠지요.


이 발자취 창의 아래쪽에 네 개의 단추가 있습니다. 이 중에서 Resume 은 문제를 무시하고 계속 프로그램을 실행시킬 때 쓰고, Terminate 는 지금 실행시킨 명령 실행을 끝내라는 것이고, 마지막으로 Kill 은 현재 실행되고 있는 명령에 대한 정보를 깡그리 지워버리고 명령 실행을 중단할 때 사용합니다.


여기서 Debug 단추를 누르면 "벌레잡개"(debugger) 창이 나옵니다. 이 창은 여러 개의 명령을 하나씩 하나씩 실행하면서 명령을 실행할 때 마다 바뀌는 여러 객체의 상태를 관찰하면서 문제의 원인을 탐색할 때 사용하는 도구입니다. 쉽게 말해서, 탐정들이 사건이 일어난 것을 되짚으면서 원인을 찾는것과 비슷하다고 하겠습니다. 벌레잡개 창은 그 구조와 동작이 매우 복잡하게 이루어져 있어서, Smalltalk에서 명령이 어떤 방식으로 실행되는지를 알아야만 제대로 활용할 수 있는 도구입니다. 그러므로 지금은 단순히 벌레잡개가 이런 것이구나 정도로만 이해해 두면 될 것입니다. 나중에 벌레잡개를 어떻게, 언제, 왜 사용해야 하는지에 대해서 자세하게 이야기할 기회가 있을 것입니다.


  ▶ 잠깐! 다른 Smalltalk에서는... 기본적으로 모든 Smalltalk 환경은 알림판과 일터, 갈래씨줄 탐색기, 객체 탐색기, 발자취 창, 벌레잡개를 가지고 있습니다. 그리고 여기에 더해서 각각의 Smalltalk마다 조금씩 다른 기능을 가지는 창이 추가되어 있습니다. Dolphin의 경우 꾸러미 탐색기나 창맵씨, 자원 탐색기가 있으며, Smalltalk Express라는 Smalltalk 환경에서는 Disk Browser가 있다고 합니다.


  ▶ 잠깐! Windows와 같이 그림 위주의 사용자 환경(GUI)에서는 마우스가 필수적인 입력장치로 생각되고 있습니다. 물론 이것은 맞는 말입니다. 그러나 마우스가 언제나 편한 것만은 아닙니다. 어떤 때는 글쇠판이 마우스보다 편할 경우가 있으니까요. Smalltalk로 작업을 하다보면 여러 개의 창이 열려있고 각각의 창을 왔다갔다해야 하는 일이 잦습니다. 이럴 때 일일이 작업 표시줄에 있는 창 제목을 눌러서 이동하는 것보다는 Alt-Tab 이나 Alt-Shift-Tab 글쇠를 눌러서 이동하는 것이 훨씬 편합니다. Alt 글쇠를 누른 상태에서 -Tab 글쇠를 눌러보십시오. 그리고 -Tab 글쇠에서 손을 떼어 보십시오. 그러면 화면 가운데 작은 창이 뜨고, 현재 열려 있는 창들이 표시될 것입니다. Alt-Tab 은 오른쪽으로 이동하고, Alt-Shift-Tab 은 왼쪽으로 이동합니다. 이는 Windows 3.1 때부터 있던 '작업 전환'기능인데, 특히 Smalltalk처럼 많은 창을 가지고 작업해야 할 때 편리하게 사용할 수 있을 것입니다.


지금까지 우리는 Smalltalk란 대체 어떤 언어이고, 어떻게 동작하며, 또한 Smalltalk 환경을 어떻게 설치하고 유지하는지에 대해서 알아보았습니다. 그리고 Smalltalk 환경이 어떻게 생겼는지도 둘러보았습니다. 이 과정에서 우리는 몇 가지 짧지만 Smalltalk의 특징이 잘 드러난 몇 개의 명령들을 실행해 봄으로써, Smalltalk 환경에 친해질 수 있도록 했습니다.


이제 여기까지 온 여러분은 Smalltalk 환경에 대해서 어느 정도 익숙해 있어야 합니다. Smalltalk를 시작하고 끝내고, 명령을 내리는 일 등은 Smalltalk를 공부하면서 가장 기본적으로 알고있어야 할 사항들이기 때문입니다. 이제 이런 것들을 바탕으로 다음 가름[章]에서부터는 Smalltalk 언어와 객체지향에 대해서 본격적으로 알아보도록 하겠습니다.


Notes