동음이의어에 대한 내용은 스몰토크 문서 참고하십시오.
'Hello, world' printNl !
1. 개요
스몰토크(Smalltalk)는 1970년대 초, 미국 제록스(XEROX)사의 팰러 앨토 연구 센터(PARC)에서 개발한 객체 지향 프로그래밍 언어이다. C++, Java와 같은 객체 지향 프로그램의 시초이다.(단, Simula라는 시뮬레이션 전용 언어가 객체지향의 기본적인 개념을 제시하기는 했다.) 이 외에도 Ruby, Python, AppleScript, Dylan, Perl, Scala 같은 수많은 프로그래밍 언어에 영향을 주었으며, 그 외에 최초로 GUI(그래픽 사용자 인터페이스)를 제공하는 언어로 매킨토시의 GUI에 영향을 준, 쉽게 말하자면 프로그래밍 언어의 한 획을 그은 언어이다.객체 지향 프로그래밍(OOP; Object-Oriented Programming)은 당시에는 완전히 새로운, 혁명적인 개념이었는데 쉽게 말해서 컴퓨터 프로그램을 명령어의 목록으로 보는 것이 아니라 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 한 것이다. 각각의 객체는 메세지를 주고받고, 데이터를 처리할 수 있다.
Smalltalk는 엘런 케이(Alan Kay)를 위시한 PARC의 연구자들이 OOP의 개념을 지원하기 위해, 즉 OOP란 이거야! 라는 샘플을 만들기 위해서 개발한 성격이 강하며, 그렇기 때문에 순수 객체 지향 프로그래밍 언어로 만들어진 것이 특징이다. 따라서 OOP가 가지는 대부분의 장점과 단점을 그대로 가지고 있는데, 개발시간 단축, 좀더 정확한 코딩, 높은 보안 시스템 같은 장점을 지닌 반면 실제 세계의 모습을 그대로 반영하지 못한다는 비판을 받기도 했다. Smalltalk에서는 정수형 등의 기본적인 자료구조도 모두 객체였던 등의 문제로 인해 Smalltalk로 만든 프로그램은 C로 만든 프로그램보다 10배 이상 느리다는 것이 정평이었고, Smalltalk의 자체가 하나의 프로그래밍 언어라기보다 시스템 전체를 포괄하는 구조를 가지고 있다는 점도 언어의 확산에 제약이 되었다. 이 부분은 현재의 Java와 비슷한 개념이라고 말할 수도 있지만, 70~80년대의 컴퓨터 성능을 생각하면 일반적인 프로그램을 실행하기 위해 가상머신을 이용해야한다는 것은 다소 비현실적인 것이었다.
Java와 같은 강력한 객체 지향 프로그래밍 언어가 있는 요즘은 잘 쓰이지도 않을 뿐더러, 어차피 개발 목적 자체가 새로운 개념의 적용이라는 성격이 강했기 때문에 사용 인구는 매우 소수에 불과하다. 그래도 분명 역사적 의미가 있는 언어임은 틀림없으며, 후대의 프로그래밍 언어에 많은 영향을 끼친 언어임은 확실하다.
2. 현재상황
스몰토크는 현재 세 가지 버전 정도가 최신으로 유지되고 있다.- 앨런케이에게서 시작된 squeak의 business용 버전인 pharo. 2021년 10월 현재 9.0까지 출시되었다.
- Cincom에서 만들어지고있는 Visual Smalltalk와 Object Studio.
- GNU 재단의 일부로 유지되고 있는 GNU Smalltalk.
Pharo는 morphic이라는 그래픽 시스템을 사용해서 구성되어있으며 JIT을 사용하는 CogVM 기반에서 유지되고 있다. 최근에는 nativeboost 등의 프로젝트를 이용해서 보다 빠른 시스템을 구성하려는 노력을 경주하는 중이다.
Cincom의 Visual Smalltalk는 유서깊은 시스템으로서 현재도 Windows 환경에서 .net용 커넥터를 제공하는등 최신의 환경을 제대로 지원하고 있는 중이다. 또한 Visual Smalltalk는 Windows, Linux, Mac os X, Solaris 등에서 사용가능한 multi platform system으로서 MVC의 개념을 충실하게 따르고 있는 시스템 중 하나이다.
GNU smalltalk는 linux 상에서 작동하는 스몰토크 시스템으로서 초기에는 blox로 대표되는 tk 기반의 GUI 환경을 제공하며 XIM 등을 지원하지 않아 한국 사용자들에게 크게 쓸모는 없었지만 몇년전부터 gtk+2를 지원하는 시스템으로 GUI의 기반을 옮겨서 현재는 한글을 무리없이 사용할 수 있는 GUI 시스템이 되어있다. 또한 gnu smalltalk는 다른 시스템과는 다르게 python과 같은 interpreter mode를 지원함으로써 소스코드의 실시간 디버깅 및 rails 같은 개발을 시도할 수 있게 지원하고 있다.
이외에 Amber Smalltalk처럼 web browser에서 바로 사용할 수 있는 스몰토크 시스템도 있으며 F-Script처럼 cocoa Framework(libFoundation)를 스몰토크 스타일로 사용할 수 있게 해주는 시스템도 있으니 죽어버린 시스템이라 생각하지 말고 찾아보면 분명 여러가지 자료를 찾을 수 있다.
그 외에 유럽에서는 정기적으로 ESUG 같은 곳에서 해마다 컨퍼런스를 개최중이니 관심이 있는 사람은 좀 더 찾아보기로 하자.
한국에서는 미약하지만 한국 스몰토크 사용자그룹을 유지중이니 해당되는 사이트에서 정보를 찾아볼 수 있으며 구글 그룹중에 smalltalk-kr 그룹도 있으니 필요한 내용이 있으면 간단한 수준의 질문은 가능하기도 하다. 네이버에는 Smalltalk의 객체마을이라는 카페가 있지만 정보가 업데이트 되지 않은지 한참되었으니 주의하자. 다만 지금은 잘 쓰이지 않는 dolphin smalltalk로 공부를 하려 한다면 이곳의 자료가 도움이 될 것이다.
3. 참조도서
- Squeak By Exmaple: Squeak에 대한 입문서. 최신 버전으로는 Pharo By Example이 있다.
- Deep into Pharo: Pharo system에 대해서 보다 심도있는 내용을 다루고 있다.
- Smalltalk Objects and Design: Smalltalk에서 Object와 전체 시스템이 어떤 개념으로 설명되어 있는지를 간단하게 설명하고 있다.
- Smalltalk Best Practice Patterns: Smalltalk의 하부 시스템에 사용되는 기술들을 패턴으로 설명해놓았다.
- The Design Patterns Smalltalk Companion: 디자인 패턴. GoF의 디자인 패턴과 필자가 겹치기도 하지만 내용도 참고할만한 부분이 많다. Smalltalk으로 공부를 하고싶다면 후반부에 필히 봐야하는 책.
- Computer Programming with GNU Smalltalk: 리눅스의 Console을 좋아하고 gnu smalltalk로 입문을 시작하려는 사람들에게 추천한다.
- SMALLTALK-80/The Language and It's Implementation: Smalltalk-80 언어의 사양이 어떻게 구성되어있는지 Smalltalk의 설계에 대한 모든 것을 알 수 있다. 보다 심도있게 알기 위해서는 반드시 읽어볼 것을 권한다.