Smalltalk80LanguageImplementationKor:Preface: Difference between revisions
Onionmixer (talk | contribs) (카테고리 수정) |
Onionmixer (talk | contribs) (번역수정) |
||
Line 3: | Line 3: | ||
==서문== | ==서문== | ||
컴퓨터 하드웨어의 디자인과 생산의 발전 덕분에 많은 사람들이 컴퓨터와 직접적으로 | 컴퓨터 하드웨어의 디자인과 생산의 발전 덕분에 많은 사람들이 컴퓨터와 직접적으로 만나게 되었다. 이러한 상황의 변화를 최대한으로 활용하기 위해서는 컴퓨터 소프트웨어의 디자인과 생산의 발전도 비슷하게 발전되어야 한다. Smalltalk-80 시스템은 개인 컴퓨터 시스템과 고도로 기능적이고 상호작용적인 소통에 적절한 컴퓨터 소프트웨어를 생산하는 것에 대해 십여 년 동안 연구한 결과물이다. | ||
이 책은 Smalltalk-80 시스템을 상세하게 다룬 첫 번째 기술서다. 본문은 네 개의 주요 부분으로 나뉜다: | 이 책은 Smalltalk-80 시스템을 상세하게 다룬 첫 번째 기술서다. 본문은 네 개의 주요 부분으로 나뉜다: | ||
:제 1부 - 프로그래밍 언어의 개념과 구문에 대한 | :제 1부 - 프로그래밍 언어의 개념과 구문에 대한 개요. | ||
:제 2부 - 시스템의 기능에 대한 주석과 설명의 명세. | :제 2부 - 시스템의 기능에 대한 주석과 설명의 명세. | ||
:제 3부 - 중간 크기의 | :제 3부 - 중간 크기의 응용프로그램의 디자인과 구현 예제. | ||
:제 4부 - Smalltalk-80 가상 머신의 명세. | :제 4부 - Smalltalk-80 가상 머신의 명세. | ||
제 1부는 정보 표현과 | 제 1부는 정보 표현과 취급에 대한 Smalltalk 의 접근법을 소개한다. Smalltalk 에 대한 논의는 다섯 개의 단어, 즉 객체, 메시지, 클래스, 인스턴스, 메서드의 용어로 구성된다. 이러한 용어를 정의하고, Smalltalk-80 프로그래밍 언어의 구문을 소개한다. | ||
제 2부에는 Smalltalk-80 프로그래밍 환경에 이미 존재하는 유형의 객체에 대한 명세가 포함되어 있다. 새로운 유형의 | 제 2부에는 Smalltalk-80 프로그래밍 환경에 이미 존재하는 유형의 객체에 대한 명세가 포함되어 있다. 새로운 유형의 객체를 프로그래머가 추가할 수도 있지만, 표준 시스템에는 이미 다양한 범위의 객체가 포함되어 있다. 각 객체 유형으로 전송이 가능한 메시지를 열거하고 설명한다. | ||
제 3부는 새로운 유형의 객체를 시스템으로 추가하는 예제에 | 제 3부는 새로운 유형의 객체를 시스템으로 추가하는 예제에 해당된다. 응용프로그램을 세차, 은행, 또는 정보체계처럼 별개의 이벤트 주도(event-driven) 시뮬레이션으로 추가하는 것을 설명한다. 일부 독자들은 제 1장을 읽은 뒤에 3장을 읽고, Smalltalk-80 표현식의 의미가 분명하지 않을 때마다 제 2부의 명세를 참조한다면 유용할 것이다. | ||
본 서적의 제 4부에서는 Smalltalk-80 가상 머신을 구현하는 방법을 명시한다. | 본 서적의 제 4부에서는 Smalltalk-80 가상 머신을 구현하는 방법을 명시한다. 이렇게 구현되는 가상 머신은 객체 지향의 저장공간, 메시지 위주의 처리 그래픽 위주의 상호작용을 제공한다. 이 부분은 주로 Smalltalk-80 시스템을 구현하고자 하는 독자들 또는 메시지 위주의 시스템 구현을 자세히 이해하고자 하는 독자들의 관심사이기도 하다. | ||
Line 29: | Line 29: | ||
==책의 집필 작업에 대해== | ==책의 집필 작업에 대해== | ||
Smalltalk-80 시스템에 관해 첫 서적을 쓰는 과정은 복잡한 | Smalltalk-80 시스템에 관해 첫 서적을 쓰는 과정은 복잡한 작업으로서, 부분적으로는 시스템 생성의 사회학 때문이며, 일부는 사람들이 그러한 시스템에 관해 필요로 하는 다양한 정보의 유형 때문이다. 이러한 작업이 복잡한 이유는 네 가지 범주로 나눌 수 있다.: | ||
* | * Smalltalk 는 비전(vision)이다. | ||
* | * Smalltalk 는 최소한의 개념을 기반으로 하지만, 일반적이지 않은 용어로 정의된다. | ||
* | * Smalltalk 는 그래픽의 대화형 프로그래밍 환경이다. | ||
* | * Smalltalk 는 큰 시스템이다. | ||
=== | ===Smalltalk는 비전(vision)이다=== | ||
1970년대 초기에 Xerox Palo Alto Research Center Learning Research Group은 사람들이 컴퓨터의 능력(computing power)을 효과적으로, 그리고 기쁘게 사용하는 방법에 대한 비전에 작업을 착수하기 시작했다. 1981년, 그룹은 Software Concepts Group(SCG)로 이름을 바꾸었다. | 1970년대 초기에 Xerox Palo Alto Research Center Learning Research Group은 사람들이 컴퓨터의 능력(computing power)을 효과적으로, 그리고 기쁘게 사용하는 방법에 대한 비전에 작업을 착수하기 시작했다. 1981년, 그룹은 Software Concepts Group(SCG)로 이름을 바꾸었다. | ||
Line 45: | Line 45: | ||
이러한 비전을 실현하기 위한 SCG의 전략은 연구의 두 가지 주요 영역에 중점을 두어 왔는데, 인간의 마음에 있는 모델과 컴퓨팅 하드웨어에 있는 모델 간에 인터페이스 역할을 하는 기술 언어(프로그래밍 언어)와, 인간의 통신 시스템과 컴퓨터의 통신 시스템에 일치하는 상호작용 언어(사용자 인터페이스)가 그것들이다. | 이러한 비전을 실현하기 위한 SCG의 전략은 연구의 두 가지 주요 영역에 중점을 두어 왔는데, 인간의 마음에 있는 모델과 컴퓨팅 하드웨어에 있는 모델 간에 인터페이스 역할을 하는 기술 언어(프로그래밍 언어)와, 인간의 통신 시스템과 컴퓨터의 통신 시스템에 일치하는 상호작용 언어(사용자 인터페이스)가 그것들이다. Smalltalk 연구는 2-4년의 주기를 따르는데, 소프트웨어의 요구에 대한 현재의 이해를 나타내는 시스템 생성, 응용프로그램을 지원하는 시스템의 기능을 테스트하는 응용프로그램 구현, 마지막으로 결과가 되는 경험을 바탕으로 소프트웨어의 요구에 대한 이해를 새로이 하고 프로그래밍 언어와 사용자 인터페이스를 다시 디자인하는 것까지 포함된다. | ||
Smalltalk-80 시스템은 이러한 | Smalltalk-80 시스템은 이러한 작업 주기의 다섯 번째 기록이다. 그리고 연구는 여전히 진행 중이다. 현재 연구 결과에 실린 상세한 설명이 SCG의 비전을 작업하는 공동체에 기여하길 바란다. 연구가 계속해서 이루어진다는 것은, 본 서적에 설명된 소프트웨어 시스템이 말 그대로 “움직이는 목표”인데다가, 본문에 실린 정보는 긴 선로에 위치한 하나의 역에 불과하기 때문이다. 열차에 대한 글을 쓰는 동안 열차를 역에 오래 묶어두는 바람에 글 쓰는 작업이 복잡해졌다. | ||
=== | ===Smalltalk 는 최소한의 개념으로 구성되어 있다=== | ||
Smalltalk는 최소한의 개념만을 기반으로 하고 있으며, 일반적이지 않은 용어로 정의된다. 시스템에서 객체-메시지 지향이 실행되는 획일성으로 인해 Smalltalk를 이해하기 위해 학습해야 할 새로운 프로그래밍의 개념은 매우 적다. 이러한 특성은 어떻게 보면 독자에게 모든 개념을 빠르게 알려주고 이러한 개념들이 시스템에서 적용되는 다양한 방법을 탐구할 수 있다는 의미가 되기도 한다. 이러한 개념들은 앞서 Smalltalk 를 구성하는 용어로 소개한 다섯 가지 단어, 즉 객체, 메시지, 클래스, 인스턴스, 메서드를 정의함으로써 표현된다. 다섯 개의 단어는 서로 연관되며 정의되기 때문에, 독자는 무언가를 알기 위해선 그 전의 모든 것을 알아야 하는 셈이다. | |||
=== | ===Smalltalk 는 환경(environment)이다=== | ||
Smalltalk 는 시각적(graphical)인 대화형 프로그래밍 환경이다. 개인 컴퓨팅 비전이 제시하는 바와 같이 Smalltalk 는 사용자가 접근할 수 있는 시스템의 모든 구성요소를 관찰 및 조작에 의미가 있는 방식으로 표현할 수 있도록 디자인된다. Smalltalk 에서 사용자 인터페이스에 대한 주제는 각 객체에 대한 시각적 언어를 생성하려는 시도를 중심으로 돌아간다. Smalltalk 에서 선호하는 하드웨어 시스템으로는 고해상도 그래픽 디스플레이 화면과 그래픽 펜이나 마우스와 같은 지시 장치를 들 수 있다. 사용자는 이러한 장치들을 이용해 화면에서 볼 수 있는 정보를 선택하고, 그 정보와 상호작용하기 위해 메시지를 호출할 수 있다. | |||
Smalltalk-80 시스템의 세부 내용을 표현하는 한 가지 방법으로, 사용자 | Smalltalk-80 시스템의 세부 내용을 표현하는 한 가지 방법으로, 사용자 인터페이스에서 시작해서 객체로- 접근하기 위한 각 기능을 설명하는 방법이 있다. 이러한 표현은 프로그래머가 시스템과 상호작용할 수 있는 방식에 대한 시나리오로 시작할 수 있다. 각 시나리오는 동적 시스템의 스냅샷이 될 것이다. 이 책에서는 선형적이고 정적인 방식으로 다중 접근 경로의 역학 관계를 크고 다양한 양의 정보로 전달하려고 할 것이다. | ||
시스템의 이러한 측면들은 | 시스템의 이러한 측면들은 Smalltalk 에서 응용프로그램 개발 환경으로서 제공되는 중요한 부분이다. 하지만 이러한 그래픽 사용자 인터페이스가 실제로 어떻게 작동하는지를 설명하려면 독자가 먼저 프로그래밍 언어를 이해해야할 필요가 있다. 따라서 이 책에서는 언어 자체를 시작으로 해서 시스템의 표현자체를 취급한다. 사용자 인터페이스를 지원하는 시스템 객체에 관한 정보는 본문에서 다루지 않지만, 커널 그래픽 클래스는 예외로 본문에서 다룰 것이다. 이러한 시스템 객체의 구현을 처리하는 문제는 또 다른 Smalltalk-80 사용자 인터페이스 서적에서 상세히 다룬다 (Adele Golldberg의 Smalltalk-80: The Interactive Programming Environment). | ||
=== | ===Smalltalk는 큰 시스템이다=== | ||
Smalltalk-80 시스템은 많은 | Smalltalk-80 시스템은 많은 구성 요소로 이루어져 있는데, 자동 저장 장치 관리, 파일 시스템, 디스플레이 처리, 텍스트 및 그림 편집, 키보드 및 포인팅 장치 입력, 디버거, 성능 스파이, 프로세서 스케줄링, 컴파일 및 디 컴파일과 같은 컴퓨터 운영 체제에서 일반적으로 제공되는 기능을 제공하는 객체가 포함된다. 학습해야할 객체의 종류는 매우 많다. | ||
Smalltalk 는 객체의 의사 소통 모델을 기반으로 한다. 큰 응용프로그램들은 시스템이 구측된 기본 단위와 동일한 방식으로 표시된다. 대부분의 Primitive 객체들 사이의 상호작용은 컴퓨터와 사용자 간 최상위 수준의 상호작용과 동일한 방식으로 표시된다. 객체들은 모듈화를 지원하며, 어떤 객체의 기능도 다른 객체의 내부적 세부사항(internal details)에 의존하지 않는다. 시스템의 복잡성은 시스템 구성요소의 상호 의존성을 최소화하여 줄일 수 있다. 복잡성은 또 비슷한 구성요소를 그룹화하여 줄일 수도 있는데, 이는 Smalltalk 에서 클래스를 통해서 가능해진다. 클래스는 Smalltalk 에서 확장(extension)을 위한 가장 중요한 메커니즘이다. 사용자 정의 클래스(User-defined classes)는 시스템의 커널 클래스와 동등한 위치에서 시스템의 일부가 된다. 하위클래스는 여러 장소에서 동일한 개념의 반복을 피하기 위해 시스템을 팩토링하는 기능을 지원한다. | |||
복잡성을 관리하는 것은 소프트웨어에 대한 | 복잡성을 관리하는 것은 소프트웨어에 대한 Smalltalk 접근법의 핵심이다. 언어의 초기 예제들은 많은 프로그래밍 언어 서적에서 공통되는 프로그래밍 연습문제들에서 발췌한 매우 간단한 예제들이다. 이런 방식은 간략하게 한 두 가지 요점만 소개하기 위함이다. 소개된 예제에서는 Smalltalk 의 가치가 분명히 드러나지 않을지도 모른다. 하지만 결국엔 다른 언어에서도 적용이 가능하며, 오히려 그 편이 나을지도 모른다. Smalltalk 의 가치는 큰 응용프로그램을 디자인하고 구현할 때, 또는 시스템 자체의 수정을 시도할 때 분명하게 드러난다. 예를 들어, Smalltalk-80 시스템에서 자주 사용되는 데이터 구조체인 dictionaries 을 생각해보자. 실행 중인 시스템을 전혀 방해하지 않고 dictionaries 에 대한 새로운 표현(representation)을 디자인, 구현, 테스트, 설치하는 것이 가능하다. 이런 작업은 다른 시스템 객체가 작동하는 메시지 인터페이스가 파괴(destroyed)되지 않는 한 가능하다. | ||
Smalltalk-80 시스템은 여러 흥미로운 디자인 | Smalltalk-80 시스템은 여러 흥미로운 디자인 도구를 지원하는데, 그 중에서 정보의 구성 및 공유를 위한 클래스로 클래스와 인스턴스, 기존의 기능을 상속하고 정제하는 수단으로 서브클래싱을 지원한다. Smalltalk-80 시스템은 프로그램 개발 과정이 진행되는 대화형 방식과 결합되어 새로운 응용프로그램의 프로토타입과 기존 응용프로그램의 개선을 위한 풍부한 환경을 제공한다. | ||
이렇게 다채로운 시스템에 관한 책을 쓴다는 것은 어쩔 수 없이 어떤 내용은 빠질 수밖에 없다는 의미가 되기도 한다. 다시 말하지만, 이 첫 번째 책에서는 프로그래밍 인터페이스의 세부 내용과, 대화형 그래픽 | 이렇게 다채로운 시스템에 관한 책을 쓴다는 것은 어쩔 수 없이 어떤 내용은 빠질 수밖에 없다는 의미가 되기도 한다. 다시 말하지만, 이 첫 번째 책에서는 프로그래밍 인터페이스의 세부 내용과, 대화형 그래픽 응용프로그램을 생성할 수 있는 방식에 관한 내용은 다루지 않을 것이다. 대신 시스템의 커널 클래스와 언어에 중점을 둔다. | ||
Line 96: | Line 96: | ||
* 표현식 구문과 해석기에 의한 표현식의 평가에 대한 개념에 익숙하다. | * 표현식 구문과 해석기에 의한 표현식의 평가에 대한 개념에 익숙하다. | ||
* 컴퓨터에서 명령어 순서(sequencing of instructions), 반복과 재귀와 같은 제어 구조체, 데이터 구조체의 역할에 익숙하다. | * 컴퓨터에서 명령어 순서(sequencing of instructions), 반복과 재귀와 같은 제어 구조체, 데이터 구조체의 역할에 익숙하다. | ||
* 컴퓨팅 시스템에서 정보의 표현과 조작에 더 나은 | * 컴퓨팅 시스템에서 정보의 표현과 조작에 더 나은 조작의 필요성에 관심이 있다. | ||
* | * 솔루션의 자연스러운 표현에 밀접하게 연관된 방식으로 소프트웨어 솔루션을 표현하는 기능을 지원하는 소프트웨어(응용프로그램) 시스템의 생성 방법에 새로운 견해를 모색한다. | ||
본 서적의 일부는 특정 유형의 하드웨어 시스템에서 언어와 그 개발 환경을 구현하는 방법에 관심이 있는 프로그래머들을 대상으로 한다. 시장에 출시된 하드웨어 시스템의 다양성으로 인해 “이식성(portability)”이 강조되어 왔다. 이식성이란 | 본 서적의 일부는 특정 유형의 하드웨어 시스템에서 언어와 그 개발 환경을 구현하는 방법에 관심이 있는 프로그래머들을 대상으로 한다. 시장에 출시된 하드웨어 시스템의 다양성으로 인해 “이식성(portability)”이 강조되어 왔다. 이식성이란 실행중인 시스템을 실현하기 위해 각 하드웨어 시스템에 대해 실제로 작은 커널 기능만 만들어야 한다는 것을 의미한다. 따라서 본문에서는 그러한 이식성을 추구하는 방법의 예를 제공한다. | ||
Line 106: | Line 106: | ||
==감사의 말== | ==감사의 말== | ||
Smalltalk-80 시스템은 애초에 우리를 균일한 객체 지향 시스템의 생성을 시도하도록 장려한 Alan Kay의 비전과 Simula 언어에서 비롯된 개념들을 기반으로 한다. 현재 이러한 개념들의 전형은 두 가지 연관된 활동, 즉 Xerox Palo Alto Research | Smalltalk-80 시스템은 애초에 우리를 균일한 객체 지향 시스템의 생성을 시도하도록 장려한 Alan Kay의 비전과 Simula 언어에서 비롯된 개념들을 기반으로 한다. 현재 이러한 개념들의 전형은 두 가지 연관된 활동, 즉 Xerox Palo Alto Research Center 에서 실행된 연구와, 연구 결과를 검토하기 위해 프로젝트에 참여한 충실한 참가자 그룹의 협력으로 이루어진 결과물이다. | ||
1980년 8월, | 1980년 8월, Smalltalk 와 그 당시 Smalltalk 의 구현(realization)을 다룬 두 번째 책을 검토하기 위해 여러 하드웨어 제조업체들이 초대되었다. 첫 번째 시도에서는 Smalltalk-76 시스템을 설명하면서, 시스템이 Xerox 연구 센터를 벗어나 배포되도록 좀 더 휴대성이 있는 시스템을 생성하려는 바람 때문에 단념하게 되었다. 두 번째 시도는 그 특성상 부분적으로는 역사적이었고, 일부는 개인 컴퓨팅에 관한 비전을 나타내는 서술이 차지했으며, 또 일부는 새로운 Smalltalk 시스템에 대한 기능적 명세가 차지했다. 책의 이중적 목적을 반영하여 Smalltalk Dreams and Schemes 라고 이름을 붙이기로 했다. Apple Computer, Digital Equipment Corporation, Hewlett-Packard, Tektronix 제조업체들은 우리 자료를 참을성 있게 검토해주었다. 이 기업들이 선정된 이유는 하드웨어 시스템을 디자인하기 때문이다. 자료를 검토하면서 일반적이지 않은 우리의 소프트웨어 목표를 이해하고, 특히 유사 Smalltalk(Smalltalk-like) 시스템에 대한 하드웨어 시스템을 생성하는 문제에 시간을 할애해주길 바랬다. 당시 시장에 나온 하드웨어 시스템을 비롯해 심지어 가까운 미래에 출시될 하드웨어 시스템조차 우리의 목표를 지원하기에는 성능이 부족하다는걸 알고 있었다. 따라서 우리는 구매하는 하드웨어에 일치하는 소프트웨어를 디자인하는 대신 우리가 원하고 있는 소프트웨어에 일치하도록 디자인된 하드웨어를 얻기로 결정했다. | ||
Line 115: | Line 115: | ||
본 서적의 저자로서 Smalltalk-80 시스템에 관해 작성된 설명은 우리에게 책임이 있다. 하지만 | 본 서적의 저자로서 Smalltalk-80 시스템에 관해 작성된 설명은 우리에게 책임이 있다. 하지만 시스템의 구현에는 Software Concepts Group 의 모든 구성원들에게 공을 돌린다. 신세를진 이 분들에게 감사함과 사랑을 전한다. Dan Ingalls는 전체적인 시스템 디자인과 개발 노력을 관리한다. Dorado의 Petter Deutsch, Alto의 Glenn Krasner, Dolphin(Xerox 1100 Scientific Information Processor라고도 불림)의 Kim McCall은 Xerox 컴퓨터에서 가상 머신의 구현에 전문적인 기술을 적용하는 데에 기여하였다. 사용자 인터페이스 개념, 구현, 배포 과정의 관리는 James Althoff (사용자 인터페이스 개발), Robert Flegal (그래픽 에디터의 디자인), Ted Kaehler (가상 메모리 문제를 다루기도 함), Diana Merry (우리의 텍스트 전문가), Steve Putz (버전 관리)가 책임졌다. Peggy Asprey, Marc Meyer, Bill Finzer, Laura Gould는 시스템 개발의 속도에 맞춰 응용프로그램을 연구하면서 주요 변경내용을 테스트하였다. Michael Rutenberg, Michael Madsen, Susanne Bodker, Jay Trow는 여러 시작 단계에서 방대한 양의 원고를 읽었다. 편집은 Rachel Rutherford와 Janet Moreland가 맡았다. | ||
Line 121: | Line 121: | ||
검토 과정에 참여한 분들께도 감사의 말을 전하고 싶다. 이분들과 함께 보인 협력 과학적 교류의 모델은 계속해서 진화하고 성장하길 바란다. 이 프로젝트는 처음에 우리 실험실을 관리하는 Bert Sutherland가 처음으로 제시하였다. 그리고 Apple, Rick Meyers, David Casseres, Digital Equipment Corporation, Stoney Ballard, Eric Osman, Steve Shirron, Hewlett-Packard, Alec Dara-Abrams, Joe Falcone, Jim Stinger, Bert Speelpenning, Jeff Eastman, Tektronix, Paul McCullough, Allen Wirfs-Brock, D. Jason Penney, Larry Katz, Robert Reed, Rick Samco가 검토 및 구현을 맡았다. 기업과 관리자, 즉 Apple 사의 Steve Jobs와 Bruce Daniels, Digital 사의 Larry Samburg, Hewlett-Packard 사의 Paul Stoft, Jim Duley, Ted Laliotis, Tektronix 사의 Jack Grimes와 George | 검토 과정에 참여한 분들께도 감사의 말을 전하고 싶다. 이분들과 함께 보인 협력 과학적 교류의 모델은 계속해서 진화하고 성장하길 바란다. 이 프로젝트는 처음에 우리 실험실을 관리하는 Bert Sutherland가 처음으로 제시하였다. 그리고 Apple, Rick Meyers, David Casseres, Digital Equipment Corporation, Stoney Ballard, Eric Osman, Steve Shirron, Hewlett-Packard, Alec Dara-Abrams, Joe Falcone, Jim Stinger, Bert Speelpenning, Jeff Eastman, Tektronix, Paul McCullough, Allen Wirfs-Brock, D. Jason Penney, Larry Katz, Robert Reed, Rick Samco가 검토 및 구현을 맡았다. 기업과 관리자, 즉 Apple 사의 Steve Jobs와 Bruce Daniels, Digital 사의 Larry Samburg, Hewlett-Packard 사의 Paul Stoft, Jim Duley, Ted Laliotis, Tektronix 사의 Jack Grimes와 George Rhine 에게 한순간이었지만 흔쾌히 산업의 표준에서 벗어나 인내심을 갖고 노력한 데에 감사함을 전한다. Tektronix 사에서 오디오테이프로 제공해준 상세한 검토 덕분에 우리가 범한 오류를 확인할 수 있었을 뿐만 아니라 그들의 의견도 들을 수 있었다! 바람이 있다면 이 책, 그리고 동료들이 컴퓨터 공동체에서 Smalltalk 의 개념을 퍼트리는 데에 도움이 되는 것이다. 만일 성공한다면 그 성공은 Xerox Palo Alto Research Center 의 동료들과 함께 나눌 것이다. | ||
Line 130: | Line 130: | ||
Smalltalk-80 화면의 그래픽과 각 부(Part)와 장에 실린 아트워크를 표현하는 그래픽 이미지 대부분은 Gary | Smalltalk-80 화면의 그래픽과 각 부(Part)와 장에 실린 아트워크를 표현하는 그래픽 이미지 대부분은 Gary StarkWeather 와 PARC 의 Imaging Sciences Laboratory 가 개발한 Platemaker 시스템에 인쇄되었다. 제판기를 이용할 수 있도록 해준 Gary, Eric Larson, Julian Orr 에게 감사의 마음을 전한다. | ||
Latest revision as of 02:56, 18 April 2018
- 서문
서문
컴퓨터 하드웨어의 디자인과 생산의 발전 덕분에 많은 사람들이 컴퓨터와 직접적으로 만나게 되었다. 이러한 상황의 변화를 최대한으로 활용하기 위해서는 컴퓨터 소프트웨어의 디자인과 생산의 발전도 비슷하게 발전되어야 한다. Smalltalk-80 시스템은 개인 컴퓨터 시스템과 고도로 기능적이고 상호작용적인 소통에 적절한 컴퓨터 소프트웨어를 생산하는 것에 대해 십여 년 동안 연구한 결과물이다.
이 책은 Smalltalk-80 시스템을 상세하게 다룬 첫 번째 기술서다. 본문은 네 개의 주요 부분으로 나뉜다:
- 제 1부 - 프로그래밍 언어의 개념과 구문에 대한 개요.
- 제 2부 - 시스템의 기능에 대한 주석과 설명의 명세.
- 제 3부 - 중간 크기의 응용프로그램의 디자인과 구현 예제.
- 제 4부 - Smalltalk-80 가상 머신의 명세.
제 1부는 정보 표현과 취급에 대한 Smalltalk 의 접근법을 소개한다. Smalltalk 에 대한 논의는 다섯 개의 단어, 즉 객체, 메시지, 클래스, 인스턴스, 메서드의 용어로 구성된다. 이러한 용어를 정의하고, Smalltalk-80 프로그래밍 언어의 구문을 소개한다.
제 2부에는 Smalltalk-80 프로그래밍 환경에 이미 존재하는 유형의 객체에 대한 명세가 포함되어 있다. 새로운 유형의 객체를 프로그래머가 추가할 수도 있지만, 표준 시스템에는 이미 다양한 범위의 객체가 포함되어 있다. 각 객체 유형으로 전송이 가능한 메시지를 열거하고 설명한다.
제 3부는 새로운 유형의 객체를 시스템으로 추가하는 예제에 해당된다. 응용프로그램을 세차, 은행, 또는 정보체계처럼 별개의 이벤트 주도(event-driven) 시뮬레이션으로 추가하는 것을 설명한다. 일부 독자들은 제 1장을 읽은 뒤에 3장을 읽고, Smalltalk-80 표현식의 의미가 분명하지 않을 때마다 제 2부의 명세를 참조한다면 유용할 것이다.
본 서적의 제 4부에서는 Smalltalk-80 가상 머신을 구현하는 방법을 명시한다. 이렇게 구현되는 가상 머신은 객체 지향의 저장공간, 메시지 위주의 처리 그래픽 위주의 상호작용을 제공한다. 이 부분은 주로 Smalltalk-80 시스템을 구현하고자 하는 독자들 또는 메시지 위주의 시스템 구현을 자세히 이해하고자 하는 독자들의 관심사이기도 하다.
책의 집필 작업에 대해
Smalltalk-80 시스템에 관해 첫 서적을 쓰는 과정은 복잡한 작업으로서, 부분적으로는 시스템 생성의 사회학 때문이며, 일부는 사람들이 그러한 시스템에 관해 필요로 하는 다양한 정보의 유형 때문이다. 이러한 작업이 복잡한 이유는 네 가지 범주로 나눌 수 있다.:
- Smalltalk 는 비전(vision)이다.
- Smalltalk 는 최소한의 개념을 기반으로 하지만, 일반적이지 않은 용어로 정의된다.
- Smalltalk 는 그래픽의 대화형 프로그래밍 환경이다.
- Smalltalk 는 큰 시스템이다.
Smalltalk는 비전(vision)이다
1970년대 초기에 Xerox Palo Alto Research Center Learning Research Group은 사람들이 컴퓨터의 능력(computing power)을 효과적으로, 그리고 기쁘게 사용하는 방법에 대한 비전에 작업을 착수하기 시작했다. 1981년, 그룹은 Software Concepts Group(SCG)로 이름을 바꾸었다.
SCG의 목표는 사용자의 발상이 증가하면서 시스템도 커질 수 있도록 사용자가 정보를 저장, 접근, 조작할 수 있는 강력한 정보 시스템을 생성하는 데에 있다. 시스템 구성요소의 개수와 종류는 시스템을 얼마나 효율적으로 사용하는지에 대한 사용자의 인식 증진에 비례하여 증가해야 한다.
이러한 비전을 실현하기 위한 SCG의 전략은 연구의 두 가지 주요 영역에 중점을 두어 왔는데, 인간의 마음에 있는 모델과 컴퓨팅 하드웨어에 있는 모델 간에 인터페이스 역할을 하는 기술 언어(프로그래밍 언어)와, 인간의 통신 시스템과 컴퓨터의 통신 시스템에 일치하는 상호작용 언어(사용자 인터페이스)가 그것들이다. Smalltalk 연구는 2-4년의 주기를 따르는데, 소프트웨어의 요구에 대한 현재의 이해를 나타내는 시스템 생성, 응용프로그램을 지원하는 시스템의 기능을 테스트하는 응용프로그램 구현, 마지막으로 결과가 되는 경험을 바탕으로 소프트웨어의 요구에 대한 이해를 새로이 하고 프로그래밍 언어와 사용자 인터페이스를 다시 디자인하는 것까지 포함된다.
Smalltalk-80 시스템은 이러한 작업 주기의 다섯 번째 기록이다. 그리고 연구는 여전히 진행 중이다. 현재 연구 결과에 실린 상세한 설명이 SCG의 비전을 작업하는 공동체에 기여하길 바란다. 연구가 계속해서 이루어진다는 것은, 본 서적에 설명된 소프트웨어 시스템이 말 그대로 “움직이는 목표”인데다가, 본문에 실린 정보는 긴 선로에 위치한 하나의 역에 불과하기 때문이다. 열차에 대한 글을 쓰는 동안 열차를 역에 오래 묶어두는 바람에 글 쓰는 작업이 복잡해졌다.
Smalltalk 는 최소한의 개념으로 구성되어 있다
Smalltalk는 최소한의 개념만을 기반으로 하고 있으며, 일반적이지 않은 용어로 정의된다. 시스템에서 객체-메시지 지향이 실행되는 획일성으로 인해 Smalltalk를 이해하기 위해 학습해야 할 새로운 프로그래밍의 개념은 매우 적다. 이러한 특성은 어떻게 보면 독자에게 모든 개념을 빠르게 알려주고 이러한 개념들이 시스템에서 적용되는 다양한 방법을 탐구할 수 있다는 의미가 되기도 한다. 이러한 개념들은 앞서 Smalltalk 를 구성하는 용어로 소개한 다섯 가지 단어, 즉 객체, 메시지, 클래스, 인스턴스, 메서드를 정의함으로써 표현된다. 다섯 개의 단어는 서로 연관되며 정의되기 때문에, 독자는 무언가를 알기 위해선 그 전의 모든 것을 알아야 하는 셈이다.
Smalltalk 는 환경(environment)이다
Smalltalk 는 시각적(graphical)인 대화형 프로그래밍 환경이다. 개인 컴퓨팅 비전이 제시하는 바와 같이 Smalltalk 는 사용자가 접근할 수 있는 시스템의 모든 구성요소를 관찰 및 조작에 의미가 있는 방식으로 표현할 수 있도록 디자인된다. Smalltalk 에서 사용자 인터페이스에 대한 주제는 각 객체에 대한 시각적 언어를 생성하려는 시도를 중심으로 돌아간다. Smalltalk 에서 선호하는 하드웨어 시스템으로는 고해상도 그래픽 디스플레이 화면과 그래픽 펜이나 마우스와 같은 지시 장치를 들 수 있다. 사용자는 이러한 장치들을 이용해 화면에서 볼 수 있는 정보를 선택하고, 그 정보와 상호작용하기 위해 메시지를 호출할 수 있다.
Smalltalk-80 시스템의 세부 내용을 표현하는 한 가지 방법으로, 사용자 인터페이스에서 시작해서 객체로- 접근하기 위한 각 기능을 설명하는 방법이 있다. 이러한 표현은 프로그래머가 시스템과 상호작용할 수 있는 방식에 대한 시나리오로 시작할 수 있다. 각 시나리오는 동적 시스템의 스냅샷이 될 것이다. 이 책에서는 선형적이고 정적인 방식으로 다중 접근 경로의 역학 관계를 크고 다양한 양의 정보로 전달하려고 할 것이다.
시스템의 이러한 측면들은 Smalltalk 에서 응용프로그램 개발 환경으로서 제공되는 중요한 부분이다. 하지만 이러한 그래픽 사용자 인터페이스가 실제로 어떻게 작동하는지를 설명하려면 독자가 먼저 프로그래밍 언어를 이해해야할 필요가 있다. 따라서 이 책에서는 언어 자체를 시작으로 해서 시스템의 표현자체를 취급한다. 사용자 인터페이스를 지원하는 시스템 객체에 관한 정보는 본문에서 다루지 않지만, 커널 그래픽 클래스는 예외로 본문에서 다룰 것이다. 이러한 시스템 객체의 구현을 처리하는 문제는 또 다른 Smalltalk-80 사용자 인터페이스 서적에서 상세히 다룬다 (Adele Golldberg의 Smalltalk-80: The Interactive Programming Environment).
Smalltalk는 큰 시스템이다
Smalltalk-80 시스템은 많은 구성 요소로 이루어져 있는데, 자동 저장 장치 관리, 파일 시스템, 디스플레이 처리, 텍스트 및 그림 편집, 키보드 및 포인팅 장치 입력, 디버거, 성능 스파이, 프로세서 스케줄링, 컴파일 및 디 컴파일과 같은 컴퓨터 운영 체제에서 일반적으로 제공되는 기능을 제공하는 객체가 포함된다. 학습해야할 객체의 종류는 매우 많다.
Smalltalk 는 객체의 의사 소통 모델을 기반으로 한다. 큰 응용프로그램들은 시스템이 구측된 기본 단위와 동일한 방식으로 표시된다. 대부분의 Primitive 객체들 사이의 상호작용은 컴퓨터와 사용자 간 최상위 수준의 상호작용과 동일한 방식으로 표시된다. 객체들은 모듈화를 지원하며, 어떤 객체의 기능도 다른 객체의 내부적 세부사항(internal details)에 의존하지 않는다. 시스템의 복잡성은 시스템 구성요소의 상호 의존성을 최소화하여 줄일 수 있다. 복잡성은 또 비슷한 구성요소를 그룹화하여 줄일 수도 있는데, 이는 Smalltalk 에서 클래스를 통해서 가능해진다. 클래스는 Smalltalk 에서 확장(extension)을 위한 가장 중요한 메커니즘이다. 사용자 정의 클래스(User-defined classes)는 시스템의 커널 클래스와 동등한 위치에서 시스템의 일부가 된다. 하위클래스는 여러 장소에서 동일한 개념의 반복을 피하기 위해 시스템을 팩토링하는 기능을 지원한다.
복잡성을 관리하는 것은 소프트웨어에 대한 Smalltalk 접근법의 핵심이다. 언어의 초기 예제들은 많은 프로그래밍 언어 서적에서 공통되는 프로그래밍 연습문제들에서 발췌한 매우 간단한 예제들이다. 이런 방식은 간략하게 한 두 가지 요점만 소개하기 위함이다. 소개된 예제에서는 Smalltalk 의 가치가 분명히 드러나지 않을지도 모른다. 하지만 결국엔 다른 언어에서도 적용이 가능하며, 오히려 그 편이 나을지도 모른다. Smalltalk 의 가치는 큰 응용프로그램을 디자인하고 구현할 때, 또는 시스템 자체의 수정을 시도할 때 분명하게 드러난다. 예를 들어, Smalltalk-80 시스템에서 자주 사용되는 데이터 구조체인 dictionaries 을 생각해보자. 실행 중인 시스템을 전혀 방해하지 않고 dictionaries 에 대한 새로운 표현(representation)을 디자인, 구현, 테스트, 설치하는 것이 가능하다. 이런 작업은 다른 시스템 객체가 작동하는 메시지 인터페이스가 파괴(destroyed)되지 않는 한 가능하다.
Smalltalk-80 시스템은 여러 흥미로운 디자인 도구를 지원하는데, 그 중에서 정보의 구성 및 공유를 위한 클래스로 클래스와 인스턴스, 기존의 기능을 상속하고 정제하는 수단으로 서브클래싱을 지원한다. Smalltalk-80 시스템은 프로그램 개발 과정이 진행되는 대화형 방식과 결합되어 새로운 응용프로그램의 프로토타입과 기존 응용프로그램의 개선을 위한 풍부한 환경을 제공한다.
이렇게 다채로운 시스템에 관한 책을 쓴다는 것은 어쩔 수 없이 어떤 내용은 빠질 수밖에 없다는 의미가 되기도 한다. 다시 말하지만, 이 첫 번째 책에서는 프로그래밍 인터페이스의 세부 내용과, 대화형 그래픽 응용프로그램을 생성할 수 있는 방식에 관한 내용은 다루지 않을 것이다. 대신 시스템의 커널 클래스와 언어에 중점을 둔다.
책을 읽는 방법
본 서적은 독자에게 특정 수준의 컴퓨터 문해력을 요한다. 독자는 아래의 조건을 충족하는 것으로 간주하겠다.
- 소프트웨어 시스템이 왜 훌륭한 아이디어인지 이해한다.
- 최소한 하나의 언어를 잘 이해하는 프로그래머 또는 프로그래밍 언어 디자이너여야 한다.
- 표현식 구문과 해석기에 의한 표현식의 평가에 대한 개념에 익숙하다.
- 컴퓨터에서 명령어 순서(sequencing of instructions), 반복과 재귀와 같은 제어 구조체, 데이터 구조체의 역할에 익숙하다.
- 컴퓨팅 시스템에서 정보의 표현과 조작에 더 나은 조작의 필요성에 관심이 있다.
- 솔루션의 자연스러운 표현에 밀접하게 연관된 방식으로 소프트웨어 솔루션을 표현하는 기능을 지원하는 소프트웨어(응용프로그램) 시스템의 생성 방법에 새로운 견해를 모색한다.
본 서적의 일부는 특정 유형의 하드웨어 시스템에서 언어와 그 개발 환경을 구현하는 방법에 관심이 있는 프로그래머들을 대상으로 한다. 시장에 출시된 하드웨어 시스템의 다양성으로 인해 “이식성(portability)”이 강조되어 왔다. 이식성이란 실행중인 시스템을 실현하기 위해 각 하드웨어 시스템에 대해 실제로 작은 커널 기능만 만들어야 한다는 것을 의미한다. 따라서 본문에서는 그러한 이식성을 추구하는 방법의 예를 제공한다.
감사의 말
Smalltalk-80 시스템은 애초에 우리를 균일한 객체 지향 시스템의 생성을 시도하도록 장려한 Alan Kay의 비전과 Simula 언어에서 비롯된 개념들을 기반으로 한다. 현재 이러한 개념들의 전형은 두 가지 연관된 활동, 즉 Xerox Palo Alto Research Center 에서 실행된 연구와, 연구 결과를 검토하기 위해 프로젝트에 참여한 충실한 참가자 그룹의 협력으로 이루어진 결과물이다.
1980년 8월, Smalltalk 와 그 당시 Smalltalk 의 구현(realization)을 다룬 두 번째 책을 검토하기 위해 여러 하드웨어 제조업체들이 초대되었다. 첫 번째 시도에서는 Smalltalk-76 시스템을 설명하면서, 시스템이 Xerox 연구 센터를 벗어나 배포되도록 좀 더 휴대성이 있는 시스템을 생성하려는 바람 때문에 단념하게 되었다. 두 번째 시도는 그 특성상 부분적으로는 역사적이었고, 일부는 개인 컴퓨팅에 관한 비전을 나타내는 서술이 차지했으며, 또 일부는 새로운 Smalltalk 시스템에 대한 기능적 명세가 차지했다. 책의 이중적 목적을 반영하여 Smalltalk Dreams and Schemes 라고 이름을 붙이기로 했다. Apple Computer, Digital Equipment Corporation, Hewlett-Packard, Tektronix 제조업체들은 우리 자료를 참을성 있게 검토해주었다. 이 기업들이 선정된 이유는 하드웨어 시스템을 디자인하기 때문이다. 자료를 검토하면서 일반적이지 않은 우리의 소프트웨어 목표를 이해하고, 특히 유사 Smalltalk(Smalltalk-like) 시스템에 대한 하드웨어 시스템을 생성하는 문제에 시간을 할애해주길 바랬다. 당시 시장에 나온 하드웨어 시스템을 비롯해 심지어 가까운 미래에 출시될 하드웨어 시스템조차 우리의 목표를 지원하기에는 성능이 부족하다는걸 알고 있었다. 따라서 우리는 구매하는 하드웨어에 일치하는 소프트웨어를 디자인하는 대신 우리가 원하고 있는 소프트웨어에 일치하도록 디자인된 하드웨어를 얻기로 결정했다.
제조업체들은 자사 연구 실험실 직원들로 하여금 책의 두 번째 판을 읽는 작업에 착수하도록 하였다. 이 책은 이러한 검수자들의 작업과 많은 토론을 통해 만들어졌다. 책의 앞부분은 검수자들의 건설적인 비평의 결과물로 완전히 다시 작성되었다. 검수자들 덕분에 배포 과정을 완료하고 책을 완료할 수 있었으나, 최종 결과물에서 발견되는 결함은 그들의 책임이 아니다. 각 검수자 집단은 Smalltalk-80 가상 머신에 대한 우리의 명세를 테스트하기 위해 최소 한 번 이상 시스템을 구현하였다.
본 서적의 저자로서 Smalltalk-80 시스템에 관해 작성된 설명은 우리에게 책임이 있다. 하지만 시스템의 구현에는 Software Concepts Group 의 모든 구성원들에게 공을 돌린다. 신세를진 이 분들에게 감사함과 사랑을 전한다. Dan Ingalls는 전체적인 시스템 디자인과 개발 노력을 관리한다. Dorado의 Petter Deutsch, Alto의 Glenn Krasner, Dolphin(Xerox 1100 Scientific Information Processor라고도 불림)의 Kim McCall은 Xerox 컴퓨터에서 가상 머신의 구현에 전문적인 기술을 적용하는 데에 기여하였다. 사용자 인터페이스 개념, 구현, 배포 과정의 관리는 James Althoff (사용자 인터페이스 개발), Robert Flegal (그래픽 에디터의 디자인), Ted Kaehler (가상 메모리 문제를 다루기도 함), Diana Merry (우리의 텍스트 전문가), Steve Putz (버전 관리)가 책임졌다. Peggy Asprey, Marc Meyer, Bill Finzer, Laura Gould는 시스템 개발의 속도에 맞춰 응용프로그램을 연구하면서 주요 변경내용을 테스트하였다. Michael Rutenberg, Michael Madsen, Susanne Bodker, Jay Trow는 여러 시작 단계에서 방대한 양의 원고를 읽었다. 편집은 Rachel Rutherford와 Janet Moreland가 맡았다.
Smalltalk-80 그래픽 커널에 관한 제 18장은 Byte 잡지에 실린 Dan Ingalls 의 논문을 수정한 것이며, 제 30장은 Larry Tesler가 처음에 작성한 논문이다. 제 18, 19, 20장에 실린 그래픽 이미지는 Robert Flegal (특히 그림 18.1과 20.1), Dan Ingalls, Adele Goldberg (그림 20.2와 20.3)가 디자인했다. Steve Putz는 제 17장에 실린 이미지를 만드는 데에 많은 도움을 주었다. 제 1부와 2부를 여는 데에 사용된 이미지와, 제 1장부터 20장까지 각 장의 오프닝 페이지에 사용된 이미지는 모두 Adele Goldberg가 만들었다. 제 3부와 4부, 제 21장부터 30장의 오프닝에 사용된 이미지는 Robert Flegal이 담당했다. 이러한 이미지들은 Smalltalk-80 그래픽 에디터와 함께 Joseph Maleson이 디자인한 저해상도 이미지 스캐너를 이용해 생성되었다.
검토 과정에 참여한 분들께도 감사의 말을 전하고 싶다. 이분들과 함께 보인 협력 과학적 교류의 모델은 계속해서 진화하고 성장하길 바란다. 이 프로젝트는 처음에 우리 실험실을 관리하는 Bert Sutherland가 처음으로 제시하였다. 그리고 Apple, Rick Meyers, David Casseres, Digital Equipment Corporation, Stoney Ballard, Eric Osman, Steve Shirron, Hewlett-Packard, Alec Dara-Abrams, Joe Falcone, Jim Stinger, Bert Speelpenning, Jeff Eastman, Tektronix, Paul McCullough, Allen Wirfs-Brock, D. Jason Penney, Larry Katz, Robert Reed, Rick Samco가 검토 및 구현을 맡았다. 기업과 관리자, 즉 Apple 사의 Steve Jobs와 Bruce Daniels, Digital 사의 Larry Samburg, Hewlett-Packard 사의 Paul Stoft, Jim Duley, Ted Laliotis, Tektronix 사의 Jack Grimes와 George Rhine 에게 한순간이었지만 흔쾌히 산업의 표준에서 벗어나 인내심을 갖고 노력한 데에 감사함을 전한다. Tektronix 사에서 오디오테이프로 제공해준 상세한 검토 덕분에 우리가 범한 오류를 확인할 수 있었을 뿐만 아니라 그들의 의견도 들을 수 있었다! 바람이 있다면 이 책, 그리고 동료들이 컴퓨터 공동체에서 Smalltalk 의 개념을 퍼트리는 데에 도움이 되는 것이다. 만일 성공한다면 그 성공은 Xerox Palo Alto Research Center 의 동료들과 함께 나눌 것이다.
책의 제작에 대한 후기
본 서적의 원본 텍스트는 자기 테이프를 통해 출판업자에게 제공되었다. 테이프에는 원고 내 다양한 타입의 텍스트 개체를 식별하는 포맷팅 코드가 포함되어 있다. 각 텍스트 개체의 실제 포맷은 출판업자가 제공하였다. International Computaprint Corporation의 Eileen Colahan, 제작 편집자 Fran Fulton의 수고와 인내, 그리고 Addison-Welsley의 Sue Zorn, Jim DeWolf, Marshall Henrichs의 협력 덕분에 모든 과정이 순조롭게 진행되었다.
Smalltalk-80 화면의 그래픽과 각 부(Part)와 장에 실린 아트워크를 표현하는 그래픽 이미지 대부분은 Gary StarkWeather 와 PARC 의 Imaging Sciences Laboratory 가 개발한 Platemaker 시스템에 인쇄되었다. 제판기를 이용할 수 있도록 해준 Gary, Eric Larson, Julian Orr 에게 감사의 마음을 전한다.
- Adele Goldberg
- David Robson
- Palo Alto, California
- January, 1983