Smalltalk

1 개요

1970년대 초 미국 제록스(XEROX)사의 팰러 앨토 연구 센터(PARC)에서 개발한 최초의 객체 지향 프로그래밍 언어. C++, Java 같은 객체 지향 프로그램의 조상님[1]. Smalltalk는 C++, Java외에도 루비, 파이썬, AppleScript, Dylan, Perl, Scala 같은 수많은 프로그래밍 언어에 영향을 주었으며, 그 외에 최초로 GUI(그래픽 사용자 인터페이스)를 제공하는 언어로 매킨토시의 GUI에 영향을 준, 쉽게 말하자면 프로그래밍 언어의 한 획을 그은 언어.

객체 지향 프로그래밍(Object-Oriented Programming), 줄여서 OOP는 당시에는 완전히 새로운, 혁명적인 개념이었는데 쉽게 말해서 컴퓨터 프로그램을 명령어의 목록으로 보는 것이 아니라 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 한 것이다. 각각의 객체는 메세지를 주고받고, 데이터를 처리할 수 있다.

Smalltalk는 [엘런 케이(Alan Kay)]를 위시한 PARC의 연구자들이 OOP의 개념을 지원하기 위해, 즉 OOP란 이거야! 라는 샘플을 만들기 위해서 개발한 성격이 강하며, 그렇기 때문에 순수 객체 지향 프로그래밍 언어로 만들어 진 것이 특징이다. 따라서 OOP가 가지는 대부분의 장점과 단점을 그대로 가지고 있는데, 개발시간 단축, 좀더 정확한 코딩, 높은 보안 시스템 같은 장점을 지닌 반면 실제 세계의 모습을 그대로 반영하지 못한다는 비판을 받기도 했다. Smalltalk에서는 정수형 등의 기본적인 자료구조도 모두 객체였던 등의 문제로 인해 Smalltalk로 만든 프로그램은 C로 만든 프로그램보다 10배 이상 느리다는 것이 정평이었고, Smalltalk의 자체가 하나의 프로그래밍 언어라기보다 시스템 전체를 포괄하는 구조를 가지고 있다는 점도 언어의 확산에 제약이 되었다. 이 부분은 현재의 Java와 비슷한 개념이라고 말할 수도 있지만, 70~80년대의 컴퓨터 성능을 생각하면 일반적인 프로그램을 실행하기 위해 가상머신을 이용해야한다는 것은 다소 비현실적인 것이었다.

뭐, Java 같은 강력한 객체 지향 프로그래밍 언어가 있는 요즘은 잘 쓰이지도 않을 뿐더러 어차피 개발 목적 자체가 새로운 개념의 적용이라는 성격이 강했기 때문에 사용인구는 매우 소수에 불과하다. 그래도 분명 역사적 의미가 있는 언어임은 틀림없으며, 후대의 프로그래밍 언어에 많은 영향을 끼친 언어임은 확실하다.


2 현재상황

Smalltalk 는 현재 3가지정도의 버전정도가 최신으로 유지되고 있다.

1. 앨런케이에게서 시작된 squeak 의 business 용 버전인 pharo. 현재 4버전까지 출시되어 있다. (2015.09)
2. Cincom 에서 만들어지고있는 Visual Smalltalk 과 Object Studio
3. gnu 재단의 일부로 유지되고 있는 gnu Smalltalk.


Pharo 는 morphic 이라는 그래픽 시스템을 사용해서 구성되어있으며 CogVM 이라는 jit 를 이용하는 기반에서 유지되고 있다. 최근에는 [nativeboost] 등의 프로젝트를 이용해서 보다 빠른 시스템을 구성하려는 노력을 경주하는 중이다.

Cincom 의 Visual Smalltalk 은 유서깊은 시스템으로서 현재도 windows 환경에서 .net 용 커넥터를 제공하는등 최신의 환경을 제대로 지원하고 있는 중이다. 또한 Visual Smalltalk 은 Windows, Linux, Mac os X, Solaris 등에서 사용가능한 multi platform system 으로서 MVC 의 개념을 충실하게 따르고 있는 시스템중 하나이다.

gnu smalltalk 은 linux 상에서 작동하는 smalltalk 시스템으로서 초기에는 blox 로 대표되는 tk 기반의 GUI 환경을 제공하며 XIM 등을 지원하지 않아 한국 사용자들에게 크게 쓸모는 없었지만 몇년전부터 gtk+2 를 지원하는 시스템으로 GUI 의 기반을 옮겨서 현재는 한글을 무리없이 사용할 수 있는 GUI 시스템이 되어있다. 또한 gnu smalltalk 은 다른시스템과는 다르게 python 과 같은 interpreter mode 를 지원함으로서 소스코드의 실시간 디버깅 및 rails 같은 개발을 시도할 수 있게 지원하고 있다.

이외에 [Amber Smalltalk]처럼 web browser 에서 바로 사용할 수 있는 smalltalk 시스템도 있으며 [F-Script]처럼 cocoa Framework(libFoundation)을 smalltalk 스타일로 사용할 수 있게 해주는 시스템도 있으니 죽어버린 시스템이라 생각하지 말고 찾아보면 분명 여러가지 자료를 찾을 수 있다.

그외에 유럽에서는 정기적으로 [ESUG] 같은 곳에서 해마다 컨퍼런스를 개최중이니 관심이 있는 사람은 좀 더 찾아보기로 하자.


한국에서는 미약하지만 [한국 스몰토크 사용자그룹]을 유지중이니 해당되는 사이트에서 정보를 찾아볼 수 있으며, 구글 그룹중에 [smalltalk-kr 그룹]도 있으니 필요한 내용이 있으면 간단한 수준의 질문은 가능하기도 하다. 네이버에는 [Smalltalk 의 객체마을]이라는 카페가 있지만 정보가 update 되지 않은지 한참되었으니 주의하자. 다만 지금은 잘 쓰이지 않는 dolphin smalltalk 으로 공부를 하려한다면 이곳의 자료가 도움이 될 것이다.


3 참조도서

Smalltalk 을 공부하는데 봐둘만한 책은 다음과같다.

  • 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 버전이라고 생각하면 된다. 필자가 겹치기도 하지만 내용도 참고할만한 부분이 많다. Smalltalk 으로 공부를 하고싶다면 후반부에 필히 봐야하는책
  • Computer Programming with GNU Smalltalk :: Linux 의 Console 을 좋아하고 gnu smalltalk 으로 입문을 시작하려는 사람들에게 추천한다.
  • SMALLTALK-80/The Language and It's Implementation :: Smalltalk-80 언어의 사양이 어떻게 구성되어있는지.. Smalltalk 의 설계에 대한 모든것을 알 수 있다. 보다 심도있게 알기위해서는 반드시 읽어볼것을 권한다.



이상의 내용중 대부분은 구글링으로 얻을 수 있는 정보이며 문턱이 높지 않다. 진심으로 공부하려는 사람이 있다면 이 위키페이지 정도 읽고 참고하면 진지하게 공부를 해볼 수 있다.
  1. 단 Simula 라는 시뮬레이션 전용 언어가 객체지향의 기본적인 개념을 제시하기는 했다.