Smalltalk — 객체지향과 GUI를 함께 발명한 Xerox PARC의 실험 (1972/1980, Alan Kay)
Smalltalk — 객체지향과 GUI를 함께 발명한 Xerox PARC의 실험
1. 요약
Smalltalk는 1970년대 초 Xerox PARC의 Learning Research Group에서 Alan Kay·Dan Ingalls·Adele Goldberg가 개발한 순수 객체지향 언어이다. Smalltalk-72(첫 버전)·Smalltalk-80(첫 공개판)을 거쳐 1980년대 초 보급되었다. "객체지향(Object-Oriented)"이라는 단어 자체를 Alan Kay가 만들어낸 언어이며, 모든 것이 객체·메시지 패싱·동적 타입·이미지 기반 영속성을 처음으로 종합한 언어이다. GUI·IDE·MVC 패턴까지 함께 발명되었다는 점에서, 단순한 언어가 아니라 현대 컴퓨팅 환경의 원형이다.
2. 등장 배경
- ARPA 자금과 Dynabook 비전: Alan Kay는 Dynabook — 오늘날의 태블릿 컴퓨터를 50년 앞서 상상한 학습용 휴대 기기 — 의 비전을 가지고 있었다. 어린이도 쓸 수 있는 컴퓨터가 목표.
- Simula의 영향: 1967년 노르웨이의 Simula 67이 객체와 클래스 개념을 처음 도입했다. Kay는 이 사상에 충격을 받고, Simula의 객체에 Lisp의 동적 평가·Logo의 교육 친화성을 합성하기로 했다.
- Xerox PARC: 1970년 Xerox가 설립한 연구소. Alto 워크스테이션과 함께 마우스·GUI·이더넷이 모두 여기서 발명되었다. Smalltalk는 Alto의 시스템 언어였다.
Smalltalk-72(1972)·Smalltalk-76·Smalltalk-80(1980 공개)으로 진화. 1983년 Adele Goldberg의 Blue Book (Smalltalk-80: The Language and Its Implementation)이 표준 교과서가 됨.
3. 핵심 특징
- 순수 객체지향(Pure OO) — "all values are objects". 정수도, 불리언도, 클래스 자체도 객체. C++·Java처럼 기본 타입 + 객체의 이중 구조가 없음.
- 메시지 패싱(Message Passing) — Alan Kay 본인의 말: "The big idea is 'messaging' — that is what the kernel of Smalltalk/Squeak is all about". 메소드 호출이 아니라 객체에 메시지를 보냄.
- 동적 타입 + 라이브 코딩 — 실행 중에 코드 수정 가능. 재시작 없이 시스템이 진화. Lisp의 사상을 OO에 접목.
- 이미지 기반 영속성(Image-Based Persistence) — 시스템 전체 상태(객체 + 코드)를 이미지 파일로 저장. 컴퓨터 끄고 켜도 같은 객체 그래프가 살아있음.
- 반사성(Reflection) — 시스템이 자기 자신을 검사·수정 가능. 메타클래스, doesNotUnderstand, perform: — 모두 후일 Ruby·Python·JavaScript의 메타프로그래밍에 이어짐.
4. 주 용도
- 교육 환경: 1970년대 어린이를 위한 컴퓨팅 비전의 첫 구현.
- GUI/IDE 개척자: 최초의 겹치는 윈도우, 팝업 메뉴, MVC 패턴 모두 Smalltalk에서 발명·구현.
- 비즈니스 응용: 금융·보험·기업 시스템 — IBM의 VisualAge for Smalltalk, ParcPlace VisualWorks.
- 빠른 프로토타이핑: 애자일 운동의 출발지 — Beck·Cunningham이 Smalltalk 환경에서 *테스트 주도 개발(TDD)*과 *익스트림 프로그래밍(XP)*을 정합.
5. 그 시대 설계 도구 매핑
Smalltalk는 언어와 설계 도구가 함께 발명된 거의 유일한 사례이다.
| 도구 | 역할 | Smalltalk와의 관계 |
|---|---|---|
| CRC 카드 (Class-Responsibility-Collaboration) (Beck & Cunningham, 1989, OOPSLA) | 객체의 책임과 협력자 식별. 색인 카드에 손으로 기록. | Smalltalk 환경에서 발명·정련됨 |
| MVC (Model-View-Controller) (Trygve Reenskaug, 1979 Xerox PARC) | UI와 모델의 분리 | Smalltalk-80에 내장 라이브러리로 기록됨 — 모든 후속 GUI 프레임워크의 조상 |
| Responsibility-Driven Design (RDD) (Rebecca Wirfs-Brock, 1990) | 책임 중심 객체 식별 | CRC 카드의 형식화. Smalltalk 커뮤니티에서 값 |
| Booch Method (1991) | 객체지향 시각적 설계 표기법 | Booch도 Smalltalk·Eiffel·Ada 사례 분석에서 출발 |
| Design Patterns (GoF, 1994) | 23개 OO 설계 패턴 | 원본 사례 다수가 Smalltalk·C++ 코드. Observer는 MVC에서 직접 추출 |
→ Smalltalk 시대의 사상적 전환: 절차형 시대에는 알고리즘 + 자료구조 = 프로그램(Wirth)이었지만, OO 시대에는 객체 + 책임 + 협력 = 시스템(Wirfs-Brock)으로 사상이 옮겨갔다. CRC 카드가 연필과 종이로 객체를 기록하는 첫 도구가 되었다.
6. 강의 활용
핵심 명제와의 연결: Smalltalk는 언어가 곧 설계 환경인 거의 유일한 사례다. 즉 코드를 작성하는 행위와 설계하는 행위가 분리되지 않았다. CRC 카드·MVC·RDD가 모두 Smalltalk 환경에서 필요해서 발명되었다는 사실은, 설계 사상이 언어를 따라간 것이 아니라 함께 자라났다는 사례다.
강의에서의 위치: G4 시리즈의 원형이자 사상적 출발점. Smalltalk가 없었다면 C++·Java·Python·Ruby 모두 다른 언어가 되었을 것. *"Alan Kay가 객체지향이라는 단어를 만들었다"*는 사실 자체가 G4 도입의 핵심 일화.
오늘날의 흔적:
- Ruby: Yukihiro Matsumoto가 Smalltalk + Perl을 합성한 언어. 모든 것이 객체·메시지 패싱·블록(클로저) 모두 직접 계승.
- Objective-C: Brad Cox가 C + Smalltalk 메시지 문법을 합성. NeXT·Apple Cocoa의 기반.
- Pharo / Squeak: 현대 Smalltalk 구현체. 교육·연구에서 여전히 사용.
- 모든 GUI 프레임워크: React·Vue·Angular의 컴포넌트 + 상태 + 뷰 분리는 MVC의 직계 후예.
- TDD·XP·애자일: Kent Beck이 Smalltalk 환경에서 SUnit을 만들었고, 이것이 모든 xUnit 프레임워크의 조상.
오늘 LLM 시대로의 다리: 모든 것이 객체라는 Smalltalk 사상은, LLM 시대에 모든 것이 Agent로 옮겨가고 있다. Agent는 메시지를 받아 응답하는 객체다. MCP·A2A 프로토콜은 Agent 간 메시지 패싱의 형식화이다. 즉 50년 전 Alan Kay가 박은 메시지 패싱 사상이 프롬프트와 도구 호출로 형태를 바꾸어 살아 돌아왔다.
출처
- Wikipedia, "Smalltalk", https://en.wikipedia.org/wiki/Smalltalk
- Goldberg, A., & Robson, D. (1983). Smalltalk-80: The Language and Its Implementation. Addison-Wesley.
- Kay, A. (1993). "The Early History of Smalltalk". History of Programming Languages II, ACM.
- Beck, K., & Cunningham, W. (1989). "A Laboratory for Teaching Object-Oriented Thinking". OOPSLA '89 Proceedings.
- Wirfs-Brock, R., & Wilkerson, B. (1989). "Object-Oriented Design: A Responsibility-Driven Approach". OOPSLA '89 Proceedings.
그룹 시리즈
→ synthesis/group-g4 (시대 그룹 종합 카드)