Smalltalk80LanguageImplementationKor:Preface: Difference between revisions
Onionmixer (talk | contribs) (bluebook preface 번역추가) |
Onionmixer (talk | contribs) (카테고리 수정) |
||
Line 143: | Line 143: | ||
<references /> | <references /> | ||
[[Category: | [[Category:Smalltalk80LanguageImplementationKor]] |
Revision as of 09:30, 16 June 2015
- 서문
서문
컴퓨터 하드웨어의 디자인과 생산의 발전 덕분에 많은 사람들이 컴퓨터와 직접적으로 접촉하게 되었다. 이러한 접촉의 증가를 최대한으로 활용하기 위해서는 컴퓨터 소프트웨어의 디자인과 생산의 발전도 비슷하게 발전되어야 한다. Smalltalk-80 시스템은 개인 컴퓨터 시스템과 고도로 기능적이고 상호작용적인 소통에 적절한 컴퓨터 소프트웨어를 생산하는 데에 십여 년 동안 연구한 결과물이다.
이 책은 Smalltalk-80 시스템을 상세하게 다룬 첫 번째 기술서다. 본문은 네 개의 주요 부분으로 나뉜다:
- 제 1부 - 프로그래밍 언어의 개념과 구문에 대한 개관.
- 제 2부 - 시스템의 기능에 대한 주석과 설명의 명세.
- 제 3부 - 중간 크기의 애플리케이션의 디자인과 구현 예제.
- 제 4부 - Smalltalk-80 가상 머신의 명세.
제 1부는 정보 표현과 조작에 대한 스몰토크의 접근법을 소개한다. 스몰토크를 논할 때는 다섯 개의 단어, 즉 객체, 메시지, 클래스, 인스턴스, 메서드가 어휘를 구성한다. 이러한 용어를 정의하고, Smalltalk-80 프로그래밍 언어의 구문을 소개한다.
제 2부에는 Smalltalk-80 프로그래밍 환경에 이미 존재하는 유형의 객체에 대한 명세가 포함되어 있다. 새로운 유형의 객체는 프로그래머가 추가할 수 있지만, 표준 시스템에 이미 다양한 범위의 객체가 포함되어 있다. 각 객체 유형으로 전송이 가능한 메시지를 열거하고 설명한다.
제 3부는 새로운 유형의 객체를 시스템으로 추가하는 예제에 해당한다. 애플리케이션을 세차, 은행, 또는 정보체계와 같이 별개의 이벤트 위주 시뮬레이션으로 추가하는 것을 설명한다. 일부 독자들은 제 1장을 읽은 후 3장을 읽고, Smalltalk-80 표현식의 의미가 분명하지 않을 때마다 제 2부의 명세를 참조한다면 유용할 것이다.
본 서적의 제 4부에서는 Smalltalk-80 가상 머신을 구현하는 방법을 명시한다. 이러한 가상 머신은 객체 지향의 저장공간, 메시지 위주의 프로세싱, 그래픽 위주의 상호작용을 제공한다. 이는 주로 Smalltalk-80 시스템을 구현하고자 하는 독자들 또는 메시지 위주의 시스템 구현을 자세히 이해하고자 하는 독자들의 관심사다.
책의 집필 작업에 대해
Smalltalk-80 시스템에 관해 첫 서적을 쓰는 과정은 복잡한 작업으로, 부분적으로는 시스템 생성의 사회학 때문이고, 일부는 사람들이 그러한 시스템에 관해 필요로 하는 다양한 정보의 유형 때문이다. 이러한 작업이 복잡한 이유는 네 가지 범주로 나눌 수 있다.:
- 스몰토크는 비전이다.
- 스몰토크는 소수의 개념을 기반으로 하지만 일반적이지 않은 용어로 정의된다.
- 스몰토크는 그래픽의 대화형 프로그래밍 환경이다.
- 스몰토크는 큰 시스템이다.
스몰토크는 비전이다
1970년대 초기에 Xerox Palo Alto Research Center Learning Research Group은 사람들이 컴퓨터의 능력(computing power)을 효과적으로, 그리고 기쁘게 사용하는 방법에 대한 비전에 작업을 착수하기 시작했다. 1981년, 그룹은 Software Concepts Group(SCG)로 이름을 바꾸었다.
SCG의 목표는 사용자의 발상이 증가하면서 시스템도 커질 수 있도록 사용자가 정보를 저장, 접근, 조작할 수 있는 강력한 정보 시스템을 생성하는 데에 있다. 시스템 구성요소의 개수와 종류는 시스템을 얼마나 효율적으로 사용하는지에 대한 사용자의 인식 증진에 비례하여 증가해야 한다.
이러한 비전을 실현하기 위한 SCG의 전략은 연구의 두 가지 주요 영역에 중점을 두어 왔는데, 인간의 마음에 있는 모델과 컴퓨팅 하드웨어에 있는 모델 간에 인터페이스 역할을 하는 기술 언어(프로그래밍 언어)와, 인간의 통신 시스템과 컴퓨터의 통신 시스템에 일치하는 상호작용 언어(사용자 인터페이스)가 그것들이다. 스몰토크 연구는 2-4년의 주기를 따르는데, 소프트웨어의 요구에 대한 현재의 이해를 나타내는 시스템 생성하기, 애플리케이션을 지원하는 시스템의 기능을 테스트하는 애플리케이션 구현하기, 마지막으로 결과가 되는 경험을 바탕으로 소프트웨어의 요구에 대한 이해를 새로이 하고 프로그래밍 언어와 사용자 인터페이스를 다시 디자인하는 것까지 포함된다.
Smalltalk-80 시스템은 이러한 주기를 다섯 번째 기록하였다. 그리고 연구는 여전히 진행 중이다. 현재 연구 결과에 실린 상세한 설명이 SCG의 비전을 작업하는 공동체에 기여하길 바란다. 연구가 계속해서 이루어진다는 것은 본 서적에 설명된 소프트웨어 시스템이 말 그대로 “움직이는 목표”인데다가 본문에 실린 정보는 긴 선로에서 위치한 하나의 역에 불과하기 때문이다. 열차에 관한 글을 쓰는 동안 열차를 역에 오래 묶어두는 바람에 글 쓰는 작업이 복잡해져 버렸다.
스몰토크에는 적은수의 개념으로 구성되어 있다
스몰토크는 적은분량의 개념만 기반으로 하며, 일반적이지 않은 용어로 정의된다. 시스템에서 객체 메시지 지향이 실행되는 획일성으로 인해 스몰토크를 이해하기 위해 학습해야 할 새로운 프로그래밍의 개념은 매우 소수에 불과하다. 이는 어떻게 보면 독자에게 모든 개념을 빠르게 알려주고 이러한 개념들이 시스템에서 적용되는 다양한 방법을 탐구할 수 있다는 의미가 되기도 한다. 이러한 개념들은 앞서 스몰토크 어휘를 구성하는 것으로 소개한 다섯 가지 단어, 즉 객체, 메시지, 클래스, 인스턴스, 메서드를 정의함으로써 표현된다. 다섯 개의 단어는 서로와 관련해 정의되므로 독자는 무언가를 알기 위해선 그 전 모든 것을 알아야 하는 셈이다.
스몰토크는 환경이다
스몰토크는 그래픽의 대화형 프로그래밍 환경이다. 개인 컴퓨팅 비전이 제시하는 바와 같이 스몰토크는 사용자로 접근할 수 있는 시스템의 모든 구성요소를 관찰 및 조작에 의미가 있는 방식으로 표현할 수 있도록 디자인된다. 스몰토크에서 사용자 인터페이스 문제는 각 객체에 대한 시각적 언어를 생성하려는 시도를 중심으로 돌아간다. 스몰토크에서 선호하는 하드웨어 시스템으로는 고해상도 그래픽 디스플레이 화면과 그래픽 펜이나 마우스와 같은 지시 장치를 들 수 있다. 사용자는 이러한 장치들을 이용해 화면에서 볼 수 있는 정보를 선택하고, 그 정보와 상호작용하기 위해 메시지를 호출할 수 있다.
Smalltalk-80 시스템의 세부 내용을 표현하는 한 가지 방법으로, 사용자 인터페이스로 시작하여 객체로- 접근하기 위한 각 기능을 설명하는 방법이 있다. 그러한 표현은 프로그래머가 시스템과 상호작용할 수 있는 방식에 대한 시나리오로 시작할 수 있다. 각 시나리오는 동적 시스템의 스냅샷이 될 것이다. 이 서적은 선형적이고 정적인 방식으로 다중 접근 경로의 역학 관계를 크고 다양한 양의 정보로 전달하고자 할 것이다.
시스템의 이러한 측면들은 스몰토크가 애플리케이션 개발 환경으로서 제공하는 중요한 부분이다. 하지만 이러한 그래픽 사용자 인터페이스가 실제로 어떻게 작동하는지 설명하려면 독자가 먼저 프로그래밍 언어를 이해할 필요가 있다. 따라서 본 서적은 언어 자체를 시작으로 하여 시스템의 표현을 다루겠다. 사용자 인터페이스를 지원하는 시스템 객체에 관한 정보는 본문에서 다루지 않지만 커널 그래픽 클래스는 예외로 본문에서 다룰 것이다. 이러한 시스템 객체의 구현을 처리하는 문제는 또 다른 Smalltalk-80 사용자 인터페이스 서적에서 상세히 다룬다 (Adele Golldberg의 Smalltalk-80: The Interactive Programming Environment).
스몰토크는 큰 시스템이다
Smalltalk-80 시스템은 많은 구성요소로 구성된다. 이는 주로 컴퓨터 운영체제에 기인하는 기능을 제공하는 객체들을 포함하는데, 그러한 기능으로는 자동 저장공간 관리, 파일 시스템, 디스플레이 처리, 텍스트와 그림 편집, 키보드와 지시 장치 입력, 디버거, 성능 스파이, 프로세서 스케줄링, 컴파일과 역컴파일이 포함된다. 학습할 객체의 종류는 매우 많다.
스몰토크는 통신하는 객체의 모델을 기반으로 빌드된다. 큰 애플리케이션들은 시스템이 빌드된 기본 단위와 동일한 방식으로 본다. 대부분의 프리미티브 객체들 간 상호작용은 컴퓨터와 사용자 간 최상위 수준의 상호작용과 똑같은 방식으로 본다. 객체들은 모듈화를 지원하여, 어떤 객체의 기능도 다른 객체의 내부적 세부사항(internal details)에 의존하지 않는다. 시스템의 복잡성은 시스템 구성요소의 상호 의존성을 최소화하여 줄일 수 있다. 복잡성은 또 비슷한 구성요소를 그룹화하여 줄일 수도 있는데, 이는 스몰토크에서 클래스를 통해 성취한다. 클래스는 스몰토크에서 확장(extension)에 가장 으뜸인 메커니즘이다. 사용자가 정의한 클래스는 시스템의 커널 클래스와 동등한 입장으로 시스템의 일부가 된다. 서브클래스는 여러 장소에서 동일한 개념의 반복을 피하기 위해 시스템을 팩토링하는 기능을 지원한다.
복잡성을 관리하는 것은 소프트웨어에 대한 스몰토크 접근법의 주요 기여 요인이다. 언어의 초기 예제들은 많은 프로그래밍 언어 서적에 공통되는 프로그래밍 연습문제에서 발췌한 매우 간단한 예제들이다. 이는 간략하게 한 두 가지 요점만 소개하기 위함이다. 이러한 예제에서는 스몰토크의 가치가 분명히 드러나지 않을지도 모른다. 하지만 결국엔 다른 언어에서도 적용이 가능하며, 오히려 그 편이 나을지도 모른다. 스몰토크의 가치는 큰 애플리케이션을 디자인하고 구현할 때, 또는 시스템 자체의 수정을 시도할 때 분명하게 드러난다. 예를 들어, Smalltalk-80 시스템에서 자주 사용되는 데이터 구조체인 사전을 고려해보라. 실행 중인 시스템을 전혀 방해하지 않고 사전에 대한 새로운 표현을 디자인, 구현, 테스트, 설치하는 것이 가능하다. 이는 다른 시스템 객체의 기능이 의존하는 메시지 인터페이스가 파괴되지 않는 한 가능하다.
Smalltalk-80 시스템은 여러 흥미로운 디자인 툴을 지원하는데, 그 중에서 정보를 조직하고 공유하는 단위로 클래스와 인스턴스를 꼽고, 기존의 기능을 상속하고 정제하는 수단으로 서브클래싱을 꼽을 수 있다. Smalltalk-80 시스템은 프로그램 개발 과정이 실행되는 대화형 방식과 결합하여 새로운 애플리케이션의 프로토타입과 기존 애플리케이션의 정제를 위한 풍부한 환경을 제공한다.
이렇게 다채로운 시스템에 관한 책을 쓴다는 것은 어쩔 수 없이 어떤 내용은 빠질 수밖에 없다는 의미가 되기도 한다. 다시 말하지만, 이 첫 번째 책에서는 프로그래밍 인터페이스의 세부 내용과, 대화형 그래픽 애플리케이션을 생성할 수 있는 방식에 관한 내용은 다루지 않을 것이다. 대신 시스템의 커널 클래스와 언어에 중점을 두겠다.
책을 읽는 방법
본 서적은 독자에게 특정 수준의 컴퓨터 문해력을 요한다. 독자는 아래의 조건을 충족하는 것으로 간주하겠다.
- 소프트웨어 시스템이 왜 훌륭한 아이디어인지 이해한다.
- 최소한 하나의 언어를 잘 이해하는 프로그래머 또는 프로그래밍 언어 디자이너여야 한다.
- 표현식 구문과 해석기에 의한 표현식의 평가에 대한 개념에 익숙하다.
- 컴퓨터에서 명령어 순서(sequencing of instructions), 반복과 재귀와 같은 제어 구조체, 데이터 구조체의 역할에 익숙하다.
- 컴퓨팅 시스템에서 정보의 표현과 조작에 더 나은 제어의 필요성에 관심이 있다.
- 해답의 자연적인 표현식에 밀접하게 연관된 방식으로 소프트웨어 솔루션을 표현하는 기능을 지원하는 소프트웨어(애플리케이션) 시스템의 생성 방법에 새로운 견해를 강구한다.
본 서적의 일부는 특정 유형의 하드웨어 시스템에서 언어와 그 개발 환경을 구현하는 방법에 관심이 있는 프로그래머들을 대상으로 한다. 시장에 출시된 하드웨어 시스템의 다양성으로 인해 “이식성(portability)”이 강조되어 왔다. 이식성이란 실행 시스템을 실현하기 위해서는 각 하드웨어 시스템마다 사실상 소량의 기능 커널만 생성되어야 함을 의미한다. 따라서 본문에서는 그러한 이식성을 추구하는 방법의 예를 제공한다.
감사의 말
Smalltalk-80 시스템은 애초에 우리를 균일한 객체 지향 시스템의 생성을 시도하도록 장려한 Alan Kay의 비전과 Simula 언어에서 비롯된 개념들을 기반으로 한다. 현재 이러한 개념들의 전형은 두 가지 연관된 활동, 즉 Xerox Palo Alto Research Center에서 실행된 연구와, 연구 결과를 검토하기 위해 프로젝트에 참여한 충실한 참가자 그룹의 협력으로 이루어진 결과물이다.
1980년 8월, 스몰토크와 그 당시 스몰토크의 실현을 다룬 두 번째 책을 검토하기 위해 여러 하드웨어 제조업체들이 초대되었다. 첫 번째 시도에서는 Smalltalk-76 시스템을 설명하면서, 시스템이 Xerox 연구 센터를 벗어나 배포되도록 좀 더 휴대성이 있는 시스템을 생성하려는 바람 때문에 단념하게 되었다. 두 번째 시도는 그 특성상 부분적으로는 역사적이었고, 일부는 개인 컴퓨팅에 관한 비전을 나타내는 서술이 차지했으며, 또 일부는 새로운 스몰토크 시스템에 대한 기능적 명세가 차지했다. 책의 이중적 목적을 반영하여 Smalltalk Dreams and Schemes라고 이름을 붙이기로 했다. Apple Computer, Digital Equipment Corporation, Hewlett-Packard, Tektronix 제조업체들은 우리 자료를 참을성 있게 검토해주었다. 이 기업들이 선정된 이유는 하드웨어 시스템을 디자인하기 때문이다. 자료를 검토하면서 일반적이지 않은 우리의 소프트웨어 목표를 이해하고, 특히 유사 스몰토크(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 사에서 오디오테이프로 제공한 상세한 검토 덕분에 우리가 범한 오류를 확인할 수 있었을 뿐만 아니라 그들의 의견도 들을 수 있었다! 바람이 있다면 이 책, 그리고 동료들이 컴퓨터 공동체에서 스몰토크의 개념을 퍼트리는 데에 도움이 되는 것이다. 만일 성공한다면 그 성공은 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