~cpp
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
목:[강] Smalltalk 배기 #2 관련료:
보낸:김(드래) 1998-11-23 10:40 :392 1/34
───────────────────────────────────────
Smalltalk 배기 #2
1998. 11. 22. 김
mailto:andrea92@hitel.net
======================================
1. Smalltalk 개
1.1. 로그램과 로그래밍
→1.2. Smalltalk
1.3. Smalltalk 보기 로그램
........
=======================================
1. Smalltalk 개
------------------------------
───────────────────────────────────────
1.2. 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 무료로 배부는 록
를 발급 는데, 관는 뒤 명다.
--------------------------------------------------------------------
1.3. 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>를 르면 방 글를
는 방법
다. 둘 러 리 것 골라 기 바랍
다. 것 글 빼놓 말고 덩를
다는 것다.
덩를 면 는 것럼 <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 때까
기능 보는 것 될 것다. 록 관 것
바로 다 명 드리록 겠다.
...