~cpp
Smalltalk� 대한 몇 가지 �야기
98. 11. 16. 김찬�
mailto:andrea92@mail.hitel.net
ì�´ 글ì�€ Smalltalkë�¼ëŠ” 프로그래ë°� 언어ì—� 대한 몇 가지 중요한 ì�´ì•¼ê¸°ë¥¼ ë‹´ê³
있습니다. Dolphin Smalltalk 98ì�„ ë§Œë“ Object Artsë�¼ëŠ” 회사가 ì“´ "Dolphin
Smalltalk White pager"ì�˜ ë‚´ìš©ì—� ì œê°€ ìƒ�ê°�한 것ì�„ 몇 가지 ë�§ë¶™ì—¬ì„œ Smalltalk
ì—� 대한 ì�´ì•¼ê¸°ë¥¼ 시작해 ë³´ë ¤ 합니다.
사실 Smalltalkì—� 관한 êµë‚´ì�˜ ìž�료는 매우 빈약한 편입니다. ì�´ìƒ�하게ë�„ 우리
나ë�¼ì—�서는 C/C++ì�´ 프로그래ë°� 언어ì�˜ 주류를 ì�´ë£¨ê³ 있으며, 요즈ì�Œì�€ Delphi
와 Visual Basicë�„ ì �ì � ê·¸ 중요ë�„를 ë�”í•˜ê³ ìžˆìŠµë‹ˆë‹¤. 그러나 ì •ìž‘ ê°�체지향 프
로그래ë°� 언어ì�˜ ì¡°ìƒ�ì�´ìž� 완결íŒ�ì�´ë�¼ê³ í• ìˆ˜ 있는 Smalltalkì—� 대한 ìž�료는 ê±°
ì�˜ 찾아보기 ì–´ë µìŠµë‹ˆë‹¤. ì�´ëŠ” ìƒ�ìš© Smalltalk 시스템ì�˜ 가격ì�´ 만만치 않으며,
Smalltalk를 ì „ì‚° êµ�육 기관ì—�서 별로 중요하지 않게 ì—¬ê¸°ê³ ìžˆê¸° 때문ì�´ê¸°ë�„ í•©
니다.
그러나 90년대ì—� 들어서면서부터 훌ë¥í•œ 공개용 Smalltalk 시스템ì�´ ë§Žì�´ ë°°í�¬ë�˜
ê³ ìžˆìœ¼ë©°, í•„ìž�ê°€ ìž�료실ì—� 올린 Dolphin Smalltalk ì—시 그런 훌ë¥í•œ 개발 환
경� �합니다.
ì�´ì œ 미약하나마 ì €ëŠ” Smalltalkì—� 관한 ìž�료를 조금씩 힘닿는 대로 여러분ì—�게
소개시켜 드릴 것입니다. ë¬¼ë¡ í•œ 번ì—� ë§Žì�€ ì–‘ì�„ 드리지는 ëª»í•˜ê² ì§€ë§Œ, 앞으로
올리는 �료가 여러분� Smalltalk를 공부하는� 있어서 작으나마 �움� �었으
면 하는 바램입니다.
ë¨¼ì € Smalltalk 언어ì—� 대한 기본ì �ì�¸ ìƒ�ê°�ê³¼ ì² í•™ì�„ 간단히 소개합니다. í�”히들
Smalltalkì—� 대해 가지기 쉬운 오해들 ë˜�한 여기ì—�서 다루ë�„ë¡� í•˜ê² ìŠµë‹ˆë‹¤. 그래
서 Smalltalk 언어는 배워볼 만한 가치가 있다는 것과 충분히 ì‹¤ì œ ì�‘ìš©
(application) 프로그램ì�„ 만드는ë�° ì‚¬ìš©í• ìˆ˜ 있다는 것ì�„ ì•Œë ¤ë“œë¦¬ê³ ìž� 합니
다.
1. ê°�체지향, ê·¸ë¦¬ê³ Smalltalk
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
90년대 초�는 머지않아 무른모(software)는 �체(object)와 부품(component)를
사용하여 만들어질 것ì�´ë�¼ëŠ” ì�´ì•¼ê¸°ê°€ 무성했습니다. 과연 ì˜¤ëŠ˜ë‚ ë§Žì�€ 무른모들
ì�´ ê°�체와 부품으로 ë§Œë“¤ì–´ì§€ê³ ìžˆìœ¼ë©°, COMì�´ë‚˜ CORBA와 ê°™ì�´ ê°�체와 부품ì�„ 중
시하는 여러 가지 ê¸°ìˆ ë“¤ì�´ 개발 사용ë�˜ê³ 있습니다. 80년대 초반ì—� 등장하여 무
른모 개발� 하나� 커다란 사건� �어버린 "�체 지향"(Object Oriented) 패러
다임ì�€ ì˜¤ëŠ˜ë‚ ì—� 와서는 사실ìƒ� 무른모ì�˜ ëª¨ë“ ì˜�ì—ì—� ì �ìš©ë�˜ëŠ” 패러다임ì�´ ë�˜ì–´
ë²„ë ¸ìŠµë‹ˆë‹¤.
ì�´ì œëŠ” 어떻게 하면 질 좋ì�€ 무른모를 보다 빨리, ê·¸ë¦¬ê³ ë§Žì�´ 만들 수 있ëŠ�ëƒ�와
ë�”불어 사용ìž�ì�˜ 요구ì—� ë”°ë�¼ 무른모를 얼마나 쉽게 ìœ ì§€.ê´€ë¦¬í• ìˆ˜ 있ëŠ�ëƒ�ê°€ 중
요한 ë¬¸ì œë¡œ 대ë‘�ë�˜ì—ˆìœ¼ë©°, ê°�체지향 패러다임ì�€ ì�´ëŸ° ë¬¸ì œë¥¼ í•´ê²°í• ìˆ˜ 있는 하
나ì�˜ 대안ì�„ ì œì‹œí•´ 주었습니다.
ì˜¤ëŠ˜ë‚ ë§Žì�´ 사용ë�˜ê³ 있는 C++, Java, Object Pascal 등ì�€ 모ë‘� 프로그래ë°� ì–¸
ì–´ì—� ê°�ì²´ 지향 패러다임ì�„ ì �용시킨 좋ì�€ 예ë�¼ê³ í• ìˆ˜ 있곘습니다. 그러나 ì�´
러한 시�들� 기존� 존재하는 패러다임 위� �체 지향 패러다임� �씌운 결
과를 초래하여, 필요 ��으로 복잡한 언어 명세를 만들게 �었으며, 기존� 구
ì¡°ì � 프로그래ë°� 습관ì—� ì�µìˆ™í•œ 우리들ì—�게 ê°�ì²´ 지향 기법ì�„ êµ¬í˜„í• ìˆ˜ 있는 ìƒ�
ê°�ì�˜ ì—¬ìœ ë¥¼ 허용하지 않았습니다. 사람들ì�€ ìž�ì‹ ì�´ ì�´ë¯¸ ì•Œê³ ìžˆëŠ” ë°©ì‹�대로 프
로그래ë°�ì�„ í•˜ê³ , ë”°ë�¼ì„œ ê°�체지향 언어로 만들어진 프로그램ì�´ ì „í˜€ ê°�체지향
답지 안ì�€ 프로그램ì�´ ë�˜ê³ ë§Œ 것입니다. 그래서 ì €ëŠ” 순수하게 ê°�체지향ì �ì�¸ ê´€
ì �ì—�서 ë¬¸ì œë¥¼ ë°”ë�¼ë³´ëŠ” 것ì�´ 어떨까 í•˜ê³ ìƒ�ê°�하게 ë�˜ì—ˆìœ¼ë©°, 그래서 찾아내게
� 것� 바로 Smalltalk 언어입니다.
1980년대 초반� 처� 모습� 드러낸 Smalltalk 시스템� 당시� 무른모 위�회
(software community)� �해 매우 중요한 �체지향 프로그래� 환경으로 여겨
ì¡Œê³ , Smalltalkì�˜ 언어 명세는 다른 ëª¨ë“ ê°�체지향 프로그래ë°� 언어ì�˜ 잣대가
�었습니다. �한 Smalltalk 환경�서 사용�는 많� 개�들� 우리가 현재 사용
í•˜ê³ ìžˆëŠ” Delphi나 Visual Basic 등ì—� ì �ìš©ë�˜ê³ 있는 것으로 ë³¼ 때, ì�´ëŸ¬í•œ ê°�
체지향ì �ì�¸ 환경ì�€ 매우 높ì�€ ìƒ�산성ì�„ ê°€ì§€ê³ ìžˆë‹¤ëŠ” 것ì�„ 보여주는 좋ì�€ 예ë�¼
ê³ í•˜ê² ìŠµë‹ˆë‹¤.
그럼ì—�ë�„ ë¶ˆêµ¬í•˜ê³ Smalltalk는 범용 프로그래ë°� 언어로ì�¨ 사용ë�˜ê¸°ì—�는 몇 가지
ì�˜ 장벽ì�„ ê°€ì§€ê³ ìžˆì—ˆìŠµë‹ˆë‹¤. Dolphin Smalltalk는 ì�´ëŸ¬í•œ 장벽들ì�„ 뛰어넘어서
마침내 Smalltalkë�„ 하나ì�˜ 훌ë¥í•œ 개발환경ì�´ ë� 수 있다는 것ì�„ ë³´ì—¬ì£¼ê³ ìžˆìŠµ
니다. ì�´ëŠ” 비단 Dolphin Smalltalkë§Œì�´ 아니ë�¼, ë„�리 사용ë�˜ê³ 있는 VisualAge
for Smalltalk나 Visual Smalltalk 등ì�˜ 환경ì—�ë�„ 똑같ì�´ ì �ìš©ë�˜ê³ 있으며, ë”°ë�¼
서 ì�´ëŸ¬í•œ 장벽들ì�€ 분명히 í•´ê²°ë� 수 있다는 것ì�„ ë³´ì—¬ì¤�니다.
ì�´ì œ í�”히 í�‰ê°€ë�˜ê³ 있는 Smalltalkì—� 대한 장벽들ì—�는 ì–´ë–¤ 것ì�´ 있는지 알아보
ê² ìŠµë‹ˆë‹¤. 대부분 Smalltalkì—� 대한 í�‰ê°€ 중ì—�는 오해해서 비롯ë�œ 것들ì�´ 많으
며, �것� Smalltalk가 범용 프로그래� 언어로� 쓰�는� 하나� 커다란 장벽
� �었� 것입니다.
2. Smalltalk는 �리다
~~~~~~~~~~~~~~~~~~~~~
1981년 8월� 출시� "Smalltalk-80"� 첫 번째로 출시� Smalltalk 시스템으로
ì�¨ í�° ì�˜ë¯¸ë¥¼ ê°€ì§€ê³ ìžˆì—ˆìŠµë‹ˆë‹¤. ì�´ Smalltalk-80ì�´ ì œëŒ€ë¡œ ë�Œì•„ê°€ë ¤ë©´ 중대형
급 미니컴퓨터 ì�´ìƒ�ì�˜ 성능ì�„ 가진 시스템ì�´ 필요했습니다. 요즘ì�€ ì•„ë¬´ë ‡ì§€ë�„
않게 사용ë�˜ê³ 있는 ì �으로 ì�´ë£¨ì–´ì§„ 그림(bitmap graphic)ê³¼ 그래픽 사용ìž� 환
ê²½GUI), ëª¨ë“ ê²ƒì�´ ê°�ì²´ì�´ë©° ì�´ ê°�체들 ê°„ì—� 존재하는 ìƒ�ì†�성, ê·¸ë¦¬ê³ ê¸°ì–µ 공간
ì�„ 효율ì �으로 관리하기 위한 ì“°ë ˆê¸° 수집(garbage collection) 등 처ì�Œ
Smalltalk�서 소개� �러한 개�� 구현하기 위해서는 그 당시로�는 매우 높
� 사양� 시스템� 필요했� 것입니다. 비� �러한 기능들� 개�용 컴퓨터
(PC)ì—�서 구현ë� 수는 ìžˆì—ˆê² ì§€ë§Œ, 80년대ì—� ë„�리 사용ë�˜ë„Œ PCì—�서 ë�Œì•„가는
Smalltalk를 ìƒ�ê°�한다면? 아마 ëª…ë ¹ì–´ 하나를 수행하는ë�° 족히 몇 ì‹ì´ˆëŠ” 걸릴
것� 뻔했� 것입니다.
그러나 지금ì�€ 다릅니다. 무른모(hardware)는 ëˆˆë¶€ì‹ ì†�ë�„로 ë°œì „í•˜ì—¬, 현재 ìš°
리가 PC로 ì“°ê³ ìžˆëŠ” 펜티엄급ì�˜ 컴퓨터는 과거 80년대ì—� ì“°ì�´ë�˜ 대형 컴퓨터ì�˜
성능ì�„ 훨씬 ë›°ì–´ë„˜ê³ ìžˆìŠµë‹ˆë‹¤. ë˜�한 무른모 ì—시 ë§Žì�´ 발달하여 ê°™ì�€ 시스템ì�¼
ì§€ë�¼ë�„ 보다 효율ì �ì�¸ 수행 성능ì�„ ë³´ìž¥í• ìˆ˜ 있게 ë�˜ì—ˆìŠµë‹ˆë‹¤. ì�´ì œ 비로소
Smalltalk는 486DX 66 ì •ë�„ì�˜ 시스템ì—�서ë�„ 충분히 잘 ë�Œì•„ê°ˆ 수 있게 ë�˜ì—ˆìœ¼ë©°,
í�”히 우리들ì�´ ì‚¬ìš©í•˜ê³ ìžˆëŠ” 펜티엄급 컴퓨터ì—�서는 ë�”ìš± ë�” 최ì �ì�˜ 성능ì�„ ë°œ
íœ˜í•˜ê³ ìžˆìŠµë‹ˆë‹¤.
ì†�ë�„ì—� 대해서 ì�´ì•¼ê¸°í• 때 수행 ì†�ë�„(running performance)와 ë�”불어 ë¹ ì§ˆ 수
없는 것으로는 개발 ��가 있습니다. 요즘과 같� 업무 처리 요구가 복잡한 경
ìš°ì—�는 해당 기능ì�„ 수행하는 모른모 ì—시 매우 복잡하게 구성ë� 수 ë°–ì—� 없습니
다. ì�´ì œëŠ” '쓸만하다'ê³ ìƒ�ê°�ë�˜ëŠ” 프로그램ì�„ 둘러보면 ê·¸ ë�©ì¹˜ê°€ 어마어마하게
ë¹„ëŒ€í•´ì ¸ìžˆì�Œì�„ ë³¼ 수 있습니다. ë”°ë�¼ì„œ ì�´ëŸ¬í•œ 프로그램ì�´ 얼만í�¼ ë¹ ë¥´ê²Œ 실행
ë�˜ëŠ”ê°€ë�„ ì¤‘ìš”í•˜ê² ì§€ë§Œ, 얼만í�¼ 빨리 ì�´ëŸ¬í•œ 프로그램ì�„ 만들 수 있ëŠ�ëƒ�ì—� 대한
것ë�„ ìƒ�당한 관심ì�˜ 대ìƒ�ì�´ ë�˜ê³ 있습니다. 여러분ì�€ 개발하는ë�° 6개월ì�´ 걸리
ê³ , 실행하는ë�° 3ë¶„ì�´ 걸리는 개발 환경과, 개발하는ë�° 3개월ì�´ ê±¸ë¦¬ê³ ì‹¤í–‰í•˜ëŠ”
ë�° 6ë¶„ì�´ 걸리는 개발 환경ì�´ 있다면, ì–´ëŠ� 쪽ì�„ ì„ íƒ�í•˜ê² ìŠµë‹ˆê¹Œ? 아마 대부분ì�˜
경우 후ìž�를 ì„ íƒ�í• ê²ƒìž…ë‹ˆë‹¤. ì�¼ë‹¨ ë¹ ë¥¸ 시간 안ì—� 프로그램ì�˜ 개발ì�„ ë��ë‚´ 놓
으면, 남는 시간ì�€ 프로그램ì�˜ 수행 ì†�ë�„ í–¥ìƒ�ì�„ 위해 충분히 í• ì˜ˆí• ìˆ˜ 있기 때
문입니다.
Smalltalk가 바로 그러한 시스템입니다. 분명히 몇 줄 안 �는 반복 수행문
(loop)ì�˜ 수행 시간ì�„ ì¸¡ì •í•˜ë©´ Smalltalk는 ë„�리 ì“°ì�´ëŠ” 다른 언어(C, Object
Pascal 등)들보다 ëŠ�린 것ì�€ 사실입니다. 그러나 ì�´ê²ƒì�€ Smalltalkê°€ ì œê³µí•˜ëŠ”
ìƒ�산성과 융통성ì�„ ìƒ�ê°�하면 충분히 í�¬ì„�ë�˜ì–´ì§ˆ 수 ìžˆë‹¤ê³ ìƒ�ê°�합니다. Java ì–¸
ì–´ ë˜�한 ê²°ì½” C 언어와 ê°™ì�€ ì†�ë�„를 내기는 ì–´ë µìŠµë‹ˆë‹¤. 그러나 Javaê°€ 가지ê³
있는 특성들ì�€ 충분히 ë§Žì�€ 사람들ì�´ Javaì—� ë¹ ì ¸ë“¤ë�„ë¡� ë§Œë“¤ê³ ìžˆìŠµë‹ˆë‹¤.
Smalltalk는 í�° 시스템ì�„ ì„¤ê³„í• ë•Œ 진가를 발휘합니다. ê°�체지향 패러다임ì�´ë�¼
는 것ì�´ ì›�래는 간단한 ë¬¸ì œë¥¼ 해결하기보다는 í�° 시스템ì�„ 어떻게 하면 쉽게 설
ê³„í•˜ê³ ë§Œë“¤ 수 있는가ì—� ì´ˆì �ì�„ 맞추었기 때문입니다. Cì—�서는 ë‘�ì–´ 줄로 ë��ë‚
프로그램ì�„, C++ì�˜ 갈래(class)를 사용하여 ì—´ 줄로 ì§°ë‹¤ê³ í•´ì„œ, C++ 언어가 C
보다 못하다는 사람� 없� 것입니다. 마찬가지로, Smalltalk 언어는 � 시스템
ì�„ ì„¤ê³„í•˜ê³ ê°œë°œí•˜ëŠ”ë�° ë�”ìš± ë�” ë§Žì�€ 힘ì�„ 나타냅니다. ì�´ëŠ” ê°�체지향 패러다임
� 따르는 �서 오는 명확한 설계 때문� 가능한 것입니다.
Dolphin Smalltalk와 Delhi�서 �소수가 200만개� 배열 변수�서 어떤 값� 찾
아내는 실험� 했습니다.
<바탕글 1> 200만개ì�˜ ë°°ì—´ì—�서 íŠ¹ì • ì›�소를 찾는 Delphi 프로그램
----------------------------------------------------------
var
Data: array[1 .. 2000000] of Integer;
procedure TForm1.Button1Click(Sender: TObject);
var
i, Key: Integer;
begin
// 배열 초기화하기
for i := 1 to High( Data ) do
Data[i] := i * 2;
Key := 6500000; // 존재하지 않는 값.
for i := 1 to High( Data ) do
begin
if Data[i] = key then
begin
ShowMessage( IntToStr(i) );
Exit;
end;
end;
ShowMessage('못 찾�');
-----------------------------------------------------------
<바탕글 2> 200만개ì�˜ ë°°ì—´ì—�서 íŠ¹ì • ì›�소를 찾는 Smalltalk 프로그램
-----------------------------------------------------------
| data key |
"배열 초기화하기"
data := Array new: 2000000.
1 to: data size do: [ :i | data at: i put: i * 2. ].
key := 6500000. "존재하지 않는 값"
1 to: data size do: [ :i |
(data at: i) = key ifTrue: [
^MessageBox notify: i displayString
]
].
MessageBox notify: '못 찾�'.
-----------------------------------------------------------
위� 간단한 벤치마� 실험�서, Object Pascal� 사용하는 Delphi� 경우는 실
행하는� 0.5초� 소요�지 않�� 비해, Smalltalk� 경우는 약 5초� 시간�
경과했습니다. ì�´ì™€ ê°™ì�´ 32비트ì�˜ ì™„ì „í•œ 기계어로 번ì—ë�˜ëŠ” 번ì—형 언어와 ê°�
체지향 언어� Smalltalk와� 단순 반복문 실행 성능� 매우 � 차�를 보였습니
다. ì�´ 비êµ�를 ë³´ê³ ì‹¤ë§�하는 여러분ì�´ 계시다면, 여러분ì�´ Smalltalkì—� 대해서
ì–´ëŠ� ì •ë�„ 알아갈 때까지, ê·¸ 실ë§�ì�„ ìž ì‹œ ì ‘ì–´ë‘�기를 권합니다. ì •ë§�,
Smalltalk�는 여러분� 지금까지 ��하지 못했� 순수 �체지향� �리가 숨쉬
ê³ ìžˆìœ¼ë©°, ì�´ê²ƒì�€ 여러분ì�˜ 무른모 개발 주기를 í�¬ê²Œ 단축시켜 줄 것입니다. ì�´
단순한 실험 때문ì—� Smalltalkì—� 대한 공부를 ì¤‘ë‹¨í•˜ì‹ ë‹¤ë©´, 여러분ì�€ í�° 것ì�„
ì–»ì�„ 수 있는 기회를 잃는 것ì�´ë�¼ê³ , 다시 한 번 ë§�씀 드립니다. (ë¬¼ë¡ í•„ìž�ë�„
처ì�Œ ì�´ 실험ì�„ í•´ ë³´ê³ Smalltalkì�˜ ëŠ�린 ì†�ë�„ì—� 좀 실ë§�ì�„ 했지만, Smalltalk
ì—�는 과연 다른 언어가 ì œê³µí•˜ì§€ 못하는 Smalltalkë§Œì�˜ ê·¸ 무엇ì�´ 숨어있습니다.
분명히!)
아울러, 위ì�˜ 예와 ê°™ì�´ 극단ì �ì�¸ 경우는 ì‹¤ì œ 프로그래ë°�ì—�서 극히 드문 ì�¼ì�´ë�¼
는 것ì�„ ì°¸ê³ ë¡œ ë§�씀 드립니다. Smalltalkì�˜ ì†�ë�„ 때문ì—� 실ë§�하실 ë¶„ì�´ë�¼ë©´
PowerBuilder를 사용하여 위ì�˜ ì˜ˆì œë¥¼ 만들어 보시기를 권합니다. ë˜�한 현재
Smalltalk는 실행 ì†�ë�„를 ê°œì„ í•˜ê¸° 위하여 ë§Žì�€ 연구가 ì�´ë£¨ì–´ì§€ê³ 있다는 것ë�„
ì°¸ê³ ë¡œ ë§�씀드립니다. ì �ì–´ë�„ 실행 ì†�ë�„ì�˜ ë¬¸ì œì—� 있어서 Smalltalk는 JAVA와 ê°™
ì�€ ë¬¸ì œë¥¼ ì•ˆê³ ìžˆë‹¤ê³ ë³´ì‹œë©´ ì�´í•´ê°€ ë¹ ë¥¼ 것입니다.
3. Smalltalk는 배우기 ì–´ë µë‹¤
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
� �� 틀린 �입니다. Smalltalk� 언어 명세 �체는 그 �름�서 �해주듯�
매우 작으며, 따�서 C++나 Java언어와 같� 언어 명세와 문법� 복잡한 언어�
비해 ì�µíž� 것ì�´ 극히 ì �습니다. ì�´ 사실ì�€ 별로 놀ë�¼ìš¸ 것ì�´ 없는ë�°, Smalltalk
언어를 설계한 Xerox사ì�˜ 연구ì›�들ì�€ ì•„ì�´ë“¤ì�´ 쉽게 배워서 ì‚¬ìš©í• ìˆ˜ ìžˆê³ , 쉽
게 프로그래ë°�ì�„ 짤 수 있는 시스템ì�„ 개발ì�„ ì›�래 목표로 ì‚¼ê³ ìžˆì—ˆê¸° 때문입니
다. ì‹¤ì œë¡œ Smalltalk 언어를 공부한 ì§€ ë‘� 달ì�´ ë�˜ëŠ” 초등학êµ� 5학년 í•™ìƒ�ì�´ í—¬
리콥터 ì‹œë®¬ë ˆì�´í„°ë¥¼ ì œìž‘í–ˆë‹¤ëŠ” 사실ì�´ Smalltalk 시스템ì�´ 매우 뒵다는 것ì�„
ì¦�명해 ì¤�니다(월간 마ì�´í�¬ë¡œì†Œí”„트, ì •ë³´ì‹œëŒ€).
ì�´ëŸ° 오해는 아마 다ì�Œì�˜ ë‘� 가지 ì˜�ì—ì—�서 기ì�¸í•œ 것으로 ìƒ�ê°�ë�©ë‹ˆë‹¤.
ìš°ì„ , Smalltalk 언어는 주로 사용ë�˜ëŠ” 언어들ì—� 비해서 매우 다르다는 것입니
다. C++나 Java와 같� 언어 명세와 문법� 매우 복잡하여, 그것� �히는� �
당한 시간� 소비했� 사람들� 몇 가지� 안 �는 개�으로 �루어진 Smalltalk
ì�˜ 간결한 문법ì—� ì �ì�‘하기가 ì–´ë ¤ìš¸ 수ë�„ 있ì�„ 것입니다. Smalltalk 언어는 "ê°�
ì²´ì—�게 지시를 내리면, ê°�체는 ê·¸ 지시ì—� ë”°ë�¼ ë°˜ì�‘한다"는 ê°œë…�ì�„ í† ëŒ€ë¡œ 문법
ì�„ 형성해 나아갑니다. 즉 다른 언어처럼 문법ì�„ ê·œì •ì§“ëŠ” 것ì�´ 아니ë�¼, ê°�ì²´ì—�
게 보내는 지시가 �연히 Smalltalk� 문법� �루는 것입니다. �는 �사 �간
ì�˜ 언어 체계와 ë¹„ìŠ·í•˜ë‹¤ê³ í• ìˆ˜ 있습니다. (문법ì�´ ë¨¼ì € ìƒ�긴 것ì�´ 아니ë�¼ ë§�
� 하다 보니 거기서 문법� 형성� 것입니다.)
�욱� Smalltalk 언어� 바탕글(source code)� 보면 다른 언어들과 그 모양�
매우 다름ì�„ 알 수 있습니다.(<바탕글 1>ê³¼ <바탕글 2>를 비êµ�í•´ ë³´ì‹ì‹œì˜¤) 그러
나 모양ì�´ 다르기 때문ì—� ì–´ë µê²Œ ë³´ì�¼ ë¿�입니다. ì‹¤ì œë¡œ Smalltalkì�˜ 몇 가지 ê°œ
ë…�ì�„ ì•Œê³ ë‚˜ë©´ 바탕글ì�„ 매우 쉽게 ì�½ì�„ 수 있습니다.
Smalltalkê°€ ì–´ë µë‹¤ê³ ëŠ�껴지는 ì�´ìœ 중 가장 í�° ë¬¸ì œëŠ” Smalltalkê°€ ê°€ì§€ê³ ìžˆ
는 방대하면서� 확장성� 뛰어난 갈래 다발(class library)때문� 아�까 합니
다. Smalltalk로 쓸만한 프로그램� 만들기 위해서는 필요로 하는 기능� 수백개
ê°€ 넘는 방대한 갈래 중ì—�서 ë�„대체 ì–´ë–¤ 갈래ì—� ì†�í•´ 있는지ì—� 대해서 ê¿°ê³ ìžˆ
어야 하는ë�°, ì�´ê²ƒì�´ ì�¼ë°˜ì �으로 프로그래ë°�ì�˜ 초보ìž�ê°€ ì •ë§� 넘기 íž˜ë“ '장벽'
ì�´ ë�˜ì–´ë²„리는 것입니다. Smalltalk를 사용해서 ì € ìœ ëª…í•œ "Hello, world!"를 ì¶œ
ë ¥í•˜ëŠ” ì™„ì „í•œ 프로그램ì�„ ë§Œë“¤ê³ ê·¸ê²ƒì�„ ì�´í•´í•˜ë ¤ë©´ ì–´ëŠ� ì •ë�„ì�˜ 시간ì�´ 필요합
니다. 그러나 Smalltalk�서 Hello World 프로그램� 만들 수 있다면, 그 다��
ì •ë§� 쉽게 쉽게 넘어갈 수 있습니다. C 언어ì�˜ 경우, Hello World 프로그램ì�„ ë§Œ
들기는 쉽지만, ì�´ê²ƒë§Œ ê°€ì§€ê³ ëŠ” C 언어ì—�서 공부해야 í• ê¸°ëŠ¥ 중ì—� 10%ë�„ 안 ë�˜
는 내용밖ì—� 알 수 없습니다. Smalltalkì—�서 Hello World 프로그램ì�„ ë§Œë“¤ê³ ê·¸
것ì�„ ì�´í•´í–ˆë‹¤ë©´, Smalltalk 언어ì�˜ 80% ì�´ìƒ�ì�„ ì •ë³µí–ˆë‹¤ê³ í•´ë�„ 과언ì�´ ì•„ë‹� 것
입니다.
그런ë�° 갈래 다발ì�„ ì�µížˆëŠ” 것ì�´ ì–´ë ¤ì›Œì„œ Smalltalkê°€ ì–´ë µë‹¤ë©´, ì�´ëŠ” C++,
Java ê·¸ë¦¬ê³ ì‰½ë‹¤ê³ ì—¬ê²¨ì§€ëŠ” Delphi나 Visual Basicì�„ 공부하는 것 ì—시 ì–´ë µë‹¤
ê³ ë´�야합니다. Visual C++를 ê°€ì§€ê³ í”„ë¡œê·¸ëž¨ì�„ ì§œë ¤ë©´ ì �ì–´ë�„ MFC(Microsoft
Foundation Classes)ë�¼ëŠ” 갈래 다발ì�„ ì�µí˜€ì•¼ í•˜ê³ , Delphiì�˜ 경우ì—�는 VCL
(Visual Component Library)� 공부해야 하며, Java� 경우네는 JavaBeans나 여
러 가지ì�˜ 꾸러미(package)ì—� 대해서 ì–´ëŠ� ì •ë�„ì�˜ ì§€ì‹�ì�´ 필요합니다.
마지막으로, Smalltalk 시스템ì�€ 대화ì‹�입니다. ì˜ˆì „ì—� ë² ì�´ì‹�ì�„ 공부해 본 ë¶„ì�´
ë�¼ë©´ 대화ì‹� 개발 방법ì�´ 얼마나 쉬운지를 알 것입니다. Smalltalkì—�서는 ëª…ë ¹ì–´
를 한 줄 단위로 실행시켜볼 수 있으며, 그 결과를 바로 알 수 있습니다. 컴퓨터
와 대화하듯ì�´ ì–´ë–¤ ì�¼ì�„ ì²˜ë¦¬í• ìˆ˜ 있기 때문ì—�, ì�µížˆê¸°ê°€ 매우 쉽습니다. ê·œì •
ë�œ 문법ì—� ì�˜í•´ 바탕글ì�„ ì“°ê³ ê·¸ê²ƒì�„ 번ì—(compile)하여 실행해야만 결과를 ì–»
ì�„ 수 있는 언어들ì—� 비해서, Smalltalkì�˜ 경우ì—�는 대화ì‹�으로 ëª…ë ¹ì–´ë¥¼ 수행í•
수 있는 언어ì�´ê¸° 때문ì—� 특히 초보ìž�들ì�´ 배우기가 매우 ì‰½ë‹¤ê³ í• ìˆ˜ 있습니
다. 앞서 ë§�ì”€ë“œë ¸ì§€ë§Œ, Smalltalkì�˜ ëª¨í† ëŠ” "어린아ì�´ë“¤ë�„ 쉽게 í”„ê³ ê·¸ëž¨ì�„ 짤
수 있는 환경ì�„ 만들ìž�"는 것입니다. (ë¬¼ë¡ ê·¸ '어린아ì�´'ê°€ ì˜�ì–´ê¶Œì—� ì�µìˆ™í•´ì•¼
한다는 것� 마�� 아픕니다만...)
�런 것들� 공부하면서 �시� 복잡한 언어 명세를 공부하는 것과, 단순한 언어
명세와 대화� 개발를 지�하는 Smalltalk를 공부하는 것 중�, 과연 어떤 것�
ë�” ì–´ë ¤ì›Œ ë³´ì�¼ê¹Œìš”? 그것ì�€ ë�…ìž� 여러분ì�˜ íŒ�단ì—� ë§žê¹�니다.
4. Smalltalk� 비싸다
~~~~~~~~~~~~~~~~~~~~~
�는 아주 간단하게 예를 들 수 있습니다. 공개용 Smalltalk 시스템� 많� 나와
있으며, Dolphin Smalltalkì�˜ 경우ì—�ë�„ ìƒ�ìš© ì œí’ˆê³¼ 공개용 ì œí’ˆì�„ ê°™ì�´ 내놓ê³
있습니다. ë˜�한 Dolphin Smalltalk ìƒ�ìš©íŒ�ì�˜ 경우는 약 $50 ì •ë�„ì�˜ 가격으로 ì¶©
분히 êµ¬ìž…í• ìˆ˜ 있으며, ë�°ì�´í„°ë² ì�´ìŠ¤ë‚˜ ì�‘ìš© 프로그램 ë°°í�¬ 등ì�˜ 기능ì�„ í�¬í•¨í•œ
꾸러미 형태로 íŒ�매ë�˜ëŠ” ì œí’ˆì�˜ 경우 $219 ì •ë�„ì�˜ 가격ì�´ë©´ 충분히 êµ¬í• ìˆ˜ 있습
니다. Smalltalk가 비쌉니까?
5. Smalltalk는 �다
~~~~~~~~~~~~~~~~~~~
Smalltalk�는 �름 �체가 � �� 사실� 아님� �명해 �니다. Smalltalk는
ìž‘ì�€ 시스템입니다. ì�´ëŠ” 장ì �ì�´ ë� 수ë�„ ìžˆê³ ë�™ì‹œì—� 단ì �ì�´ ë� 수ë�„ 있습니다.
ANSI X3J20표준ì—� ì�˜í•´ ê·œì •ë�œ 갈래 씻줄(class hierarchy)ì�€ í�”히 ë³¼ 수 있는
다른 ê°�ì²´ 지향 언어ì�˜ 갈래 다발보다 ë�” ë§Žì�€ 것ì�„ ë‹´ê³ ìžˆìŠµë‹ˆë‹¤. C++ì�˜ 경우
ANSIì—�서 표준화ë�œ 갈래 다발ì�€ 기본ì �ì�¸ 것들 ë¿�ì�´ê³ 대부분 C++를 만들어 파는
회사마다 ë�…ìž�ì �ì�¸ 갈래 다발ì�„ 만들어 ì‚¬ìš©í•˜ê³ ìžˆìœ¼ë©°, ë”°ë�¼ì„œ ì�´ëŠ” í�”히 ë§�하
는 것처럼 호환성 좋ì�€ C++를 ìž�꾸 호환성 없는 언어로 만드는 ìš”ì�¸ì�´ ë�˜ê³ 있습
니다(Visual C++� MFC와 Borland C++� OWL� ��해 봅시다.) ANSI 표준� 따
르는 Smalltalkì�˜ê²½ìš°ëŠ” 기본ì �으로 방대한 ì–‘ì�˜ 갈래 다발ì�„ ê°€ì§€ê³ ìžˆì§€ë§Œ, ì�´
는 ì�´ë¯¸ 표준화 ë�œ 것ì�´ê¸° 때문ì—� Smalltalkì�˜ 호환성ì�„ 높여주는 ì´‰ë§¤ì œê°€ ë�©ë‹ˆ
다.
ì�´ëŸ¬í•œ 방대한 갈래 다발ì�´ 표준화ë�¨ìœ¼ë¡œì�¨ ìƒ�겨나는 단ì �으로는 Smalltalk로 프
로그램ì�„ ê°œë°œí• ë•Œ, Smalltalk 환경 ìž�ì²´ê°€ 방대해질 수 있다는 것ì�„ 들 수 있
습니다. ë¬¼ë¡ ì‹¤ì œ ì�‘ìš© 프로그램ì�„ ë°°í�¬í• 때ì—�는 개발 단계ì—�서보다는 훨씬 ìž‘
ì�€ í�¬ê¸°ë¡œ ë°°í�¬ê°€ 가능하지만, 현재ì�˜ Smalltalk 구현 ê¸°ìˆ ë¡œëŠ” ì•„ì§�까지 다른
언어로 만들어진 프로그램들보다는 기억 공간ì�˜ 소비가 í�¬ë‹¤ëŠ” 단ì �ì�„ ê°€ì§€ê³ ìžˆ
습니다.
그러나 Dolphin Smalltalk� 경우는 보통 구현�는 Smalltalk� 특성보다 한 단
계 ë°œì „ë�œ ê¸°ìˆ ì�„ 사용함으로ì�¨, 실행 파ì�¼ì�´ 차지하는 기억 공간ì�˜ ì �ìœ ìœ¨ì�„ 매
ìš° 낮게 í• ìˆ˜ 있었으며, ì�´ëŠ” Dolphin Smalltalkê°€ 다른 Smalltalkì—� 비해서 ì›”
등한 성능ì�„ ë³´ìž¥í• ìˆ˜ 있ë�„ë¡� í•´ ì¤€ë‹¤ê³ í•©ë‹ˆë‹¤.
기억공간 소비가 심하다는 �가� 대해서, Delphi나 Visual Basic� 경우와 비�
í•´ ë³´ì‹ì‹œì˜¤. ìž�ì›� ì¸¡ì •ê¸°ë¥¼ 켜 놓ì�€ ìƒ�태ì—�서 Delphi 4.0ì�„ ì‹¤í–‰í• ê²½ìš°, 약
10% ì „í›„ì�˜ ìž�ì›�ì�„ 소비하며, ì�´ëŠ” 개발 프로그램ì�´ 커지면 커질수ë¡� ë�”ìš± ë�” ë§Ž
ì�´ 소비하게 ë�©ë‹ˆë‹¤. (프로ì �트ì—� ë”°ë�¼ì„œëŠ” 약 30%ì�˜ ìž�ì›�ì�„ ì†Œë¹„í• ë•Œë�„ 있었습
니다.) 그러나 Dolphin Smalltalkì�˜ 경우ì—�는 기본ì �으로 약 3%ì�˜ ìž�ì›�ì�„ 소비합
니다. ì�´ëŠ” ì�´ë¯¸ ëª¨ë“ ê°ˆëž˜ 다발과 ê°�체들ì�´ 다 ìƒ�성ë�œ ìƒ�태ì—�서 차지하는 기억
공간ì�˜ ì �ìœ ìœ¨ìž…ë‹ˆë‹¤. (보통 ë°°í�¬ë�˜ëŠ” Dolphin Smalltalkì—�는 약 540ê°œì�˜ 갈래와
45,000여개� �체가 들어있습니다.)
어찌보면 Smalltalk는 í�½ë‹ˆë‹¤. 그러나 ë˜�한 작습니다. í�° 것ì�´ 무조건 단ì �ì�´ ë�
수만ì�€ 없는 것입니다. 그런ë�°, ì •ë§� Smalltalkê°€ í�½ë‹ˆê¹Œ? 그런지 ê·¸ë ‡ì§€ 않ì�€ì§€
는 여러분ì�´ ì§�ì ‘ Smalltalk를 곱우해 ë³´ë©´ 알 수 있ì�„ 것입니다.
6. Smalltalk는 연구용 언어�다
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
아마 ì�´ ë¬¸ì œëŠ” Smalltalk 언어가 개발ë�œ ê³³ì�´ Xerox 연구소ì�´ë©°, ë”°ë�¼ì„œ ìƒ�ìš©
번ì—기 개발 회사들ì�´ 내놓는 것보다는 ë‚®ì�€ 실행 ì†�ë�„ 때문ì—� 기ì�¸í•œ 것ì�´ë�¼ê³
��합니다. �히 Delphi나 Visual Basic, C++ 등으로 Windows 용� �용 프로그
램ì�„ ë§Œë“¤ë ¤ê³ í• ë•Œ 매우 높ì�€ 시스템 사양ì�´ 필요합니다. 그러나 Smalltalk는
ê·¸ë ‡ì§€ ì•Šë‹¤ê³ ì•žì„œë�„ 언급한 ë°” 있습니다. ë˜�한 Smalltalkê°€ 개발ë� 때 ì›�래부
í„° 사용ìž� ì�¸í„°íŽ˜ì�´ìŠ¤ë¥¼ ìƒ�성하는 방법ì�´ ë§ˆë ¨ë�˜ì–´ 있었으며, ì˜ˆì „ì—�는
Smalltalk를 운�체계로 쓰는 컴퓨터� 있었습니다. �욱� Dolphin Smalltalk�
경우�는 WIN32 API를 90% �� 지�합니다. 따�서 �용 프로그램� 만드는��
결코 다른 개발 환경� 비해서 뒤떨어지지 않습니다.
7. 요약
~~~~~~~
Smalltalk, 특히 Dolphin Smalltalk는 다�� 지�합니다.
* Dolphin Smalltalk는 학습ì�´ë‚˜ ì‹¤ì œ ì�‘ìš© 프로그램ì�„ ê°œë°œí• ìˆ˜ 있는 공개용
Smalltalk를 ë°°í�¬í•©ë‹ˆë‹¤. ì�´ì œëŠ” 개발 환경ì�˜ 구입 가격 때문ì—� ë§�설ì�´ëŠ” ì�¼
� 없� 것입니다.
* ìƒ�대ì �으로 ìž‘ì�€ Smalltalkì�˜ 개발 환경ì�€ ë‚®ì�€ 사양ì�˜ 컴퓨터ì—�서ë�„ 충분히
ì�‘ìš© 프로그램ì�„ ê°œë°œí• ìˆ˜ 있ë�„ë¡� í• ìˆ˜ 있ì�„ 것입니다.
* ANSI X3J20ì—�서 Smalltalkì�˜ 표준ì�„ ì •í•˜ê³ ìžˆìœ¼ë©°, Smalltalk는 C++와 ë�”불어
ì‚°ì—… 표준ì�´ ë�˜ì–´ê°€ê³ 있습니다.
* Dolphin Smalltalkì—�서 ì œê³µí•˜ëŠ” '3계층 ì�‘ìš© 프로그램 모형'(three tiered
application framework)� 프로그램� 매우 융통성있게 만들어 �니다.
* Dolphin Smalltalk는 Windows 시스템ì�˜ ëª¨ë“ ìž�ì›�ì�„ ì‚¬ìš©í• ìˆ˜ 있으며,
Windows 운� 체계� 지�� 받� 수 있습니다. �는 WIN32 API� 사용� 보
장해주며, 따�서 WIndows �용 프로그램� 개발� 쉽게 해 �니다.
ì�´ì œ Smalltalk를 한 번 공부해 ë³´ì‹ì‹œì˜¤. 작게는 여러분ì�˜ ê°�체지향 패러다임ì�„
ì�µížˆëŠ” ë�„구로ì�¨, í�¬ê²ŒëŠ” ì‹¤ì œ 프로ì �트를 ê°œë°œí• ìˆ˜ 있는 ë�„구로ì�¨, Smalltalk
는 여러분ì—�게 í�° 몫ì�„ í• ê²ƒìž…ë‹ˆë‹¤. ìž�료실ì—� ì˜¬ë ¤ì§„ Dolphin Smalltalk와
Dolphin Education Center를 ë‚´ë¦¬ë°›ê³ Smalltalk 공부를 시작해 ë³´ì‹ì‹œì˜¤. 그리
ê³ ìš°ë¦¬ 함께 공부합시다. 그래서 Smalltalkì�˜ ìž�료가 ë�” ì�´ìƒ� 빈약하지 않ë�„ë¡�
합시다.
아룰로 í•„ìž�는 Smalltalkë�„ 하나ì�˜ ë�„구로 ìƒ�ê°�합니다. ì €ëŠ” Delphi를 주로 사용
하는�, Smalltalk를 공부하면서 �파�를 바�보는 시�� 바뀌었습니다. 좀 �
ì§ˆì„œìžˆê³ , 관리하기 쉬운 코드를 쓸 수 있게 ë�˜ì—ˆìŠµë‹ˆë‹¤. ê°�ì²´ 지향ì�´ 무엇ì�¸ì§€,
ì •ë§� ì§„ì •í•œ ê°�체지향ì�˜ 진수를 ë§›ë³´ê³ ì‹¶ìœ¼ì‹œë‹¤ë©´, Smalltalk를 ê¼ ê¶Œí•´ë“œë¦½ë‹ˆ
다. 같� 공부합시다.