~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 때까 기능 보는 것 될 것다. 록 관 것 바로 다 명 드리록 겠다. ...