{{{~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ì— ìµìˆ™í•´ì§ˆ 때까지 ì € 장 기능 ì—†ì´ ì—°ìŠµí•´ 보는 ê²ƒë„ ë„ì›€ì´ ë 것입니다. ë“±ë¡ ì ˆì°¨ì— ê´€í•œ ê²ƒì€ ë°”ë¡œ 다ìŒì— ì„¤ëª…ì„ ë“œë¦¬ë„ë¡ í•˜ê² ìŠµë‹ˆë‹¤. 계ì†... }}} ---- ["SmallTalk/강좌FromHitel"]