튜링상 관련 업적
스케치패드의 시작
오늘날§ 우리가 접하는 컴퓨터들은 하나같이 화면을 가지고 있다. 그리고 그 화면에는 문자뿐만 아니라 도형과 그림도 나타난다. 이른바 그래픽 사용자 인터페이스GUI에 우리는 익숙해져 있다. 그래픽 유저 인터페이스를 가능하게 하는 기술적인 이유는 여러 가지가 있을 수 있다. 하지만 가장 기본은, 점을 찍는 일이다. 그리고 그다음은 선을 그리는 일이다. 이를 거의 처음 구현한 시스템이 스케치패드Sketchpad이다. 스케치패드란, 음극선관CRT과 라이트펜Light pen 및 여러 버튼들을 지원하는 TX-2 컴퓨터 시스템과 그 위에서 실행되는 특별한 소프트웨어 프로그램을 모두 포함한다고 보아야 맞을 듯싶다.
스케치패드가 개발되기 시작한 해는 1961년이고 정식 발표된 것은 1963년이다. 1960년의 시점에서 보는 컴퓨터는 어떤 모양일까? 1950년대에 발표된 컴퓨터들은 릴레이를 사용한 전기-기계식 기계에서, 진공관을 사용하는 전자식 기계로 진화한 후에 트랜지스터와 자기코어 메모리를 받아들여 점점 안정적인 형태로 변화하고 있었다. 하지만 사용자가 컴퓨터를 다루기 위해서는 여전히 많은 스위치를 조작해야 했고, 펀치카드나 테이프와 같은 비직관적인 방식이 사용되었다. 컴퓨터가 사용되는 용도가 과학기술 계산이나 통계처리 위주였으므로 입력과 출력은 숫자 혹은 문자로만 구성되어 있었다.
하지만 계산하는 기계가 아니라, 인간을 도와주는 기계로 컴퓨터를 바라보는 시각이 초창기부터 존재했다. 대표적인 이가 배니바 부시Vannevar Bush와 릭라이더Licklider였다. 배니바 부시는, 다양한 정보를 다루는 장치를 상상했고 릭라이더는, 상호작용을 통해 인간을 도와주는 장치를 상상했다. 안타깝게도 1950년대의 컴퓨터는 이런 상상을 만족시키기에 턱없이 부족했다.
흔히 CRT라고 불리는 음극선관은 일찍부터 전자계측장비인 오실로스코프의 화면으로 사용되었고, 이어서 레이더 장치에서 화면으로 사용되었다. 가장 대중화된 형태는 텔레비전이었다. 1940년대 말에 음극선관은 잠시 컴퓨터의 메모리로 사용되기도 했으나 그 부피로 인해서 인기를 끌지는 못했다. 그러다가 SAGE 프로젝트에서 음극선관은 컴퓨터의 출력장치로 선택되었다. SAGE 프로젝트가 방공 조기 경보시스템이었으므로 레이더 시스템에서 음극선관을 차용해 오는 것은 자연스러웠을 것이다. SAGE 프로젝트에서 중요한 역할을 담당했던 웨스 클라크는 TX-0와 TX-2 컴퓨터를 만들면서 음극선관과 라이트펜을 포함했다.
1958년에 TX-2 컴퓨터가 완성되었지만, 음극선관과 라이트펜은 점을 찍는 정도로만 활용되었다. 그러다가 1960년에 허셜 루미스가 처음으로 회전 손잡이를 이용하여 선을 그리는 소프트웨어 프로그램을 작성했다. X, Y 좌표값을 각각 회전 손잡이로 설정하는 형태여서 매우 불편했다. 아이번 서덜랜드의 설명에 따르면 그가 루미스의 프로그램을 보고 스케치패드를 만들 생각을 했던 것은 아니다.2 그에 따르면 1960년에 같은 박사과정이었던 잭 라펠로부터, 음극선관을 활용해서 컴퓨터를 “더 친화적으로” 만드는 일에 MIT 링컨 연구소가 상당한 관심이 있다는 말을 들었다고 한다. 그래서 그림 그리기 프로그램을 만들 생각을 하게 되었고 후에 TX-2 컴퓨터를 처음 접했을 때 루미스의 프로그램을 보았다고 한다.
스케치패드의 사용법
스케치패드를 어떻게 사용하는지는 직접 동영상을 보는 편이 좋겠다. 1963년에 촬영된 동영상이 유튜브에 올려져 있으므로 참고하기 바란다.
사용자 인터페이스를 위한 장치는 다음과 같다.
- 음극선관: 화면 장치
- 라이트펜Light pen: 화면 위에 커서의 위치를 지정해 주는 일을 한다. 라이트펜을 화면 가까이에 가져가면 십자 모양의 커서가 나타난다.
- 누름 버튼Push button: 특정 작업을 명령하기 위한 용도이다. ‘그리기’, ‘원 중심 정하기’ 등과 같은 작업을 지시한다.
- 회전 손잡이Knob: 화면을 확대/축소하거나 회전시키기 위해 사용한다.
- 똑딱 스위치Toggle switch: 특정 기능을 끄고 켜거나, 새로운 화면으로 전환할 때 사용한다.
스케치패드가 지원하는 기본 동작은 다음과 같다.
- 직선 그리기: 먼저 라이트펜으로 시작점의 위치를 지정한 상태에서 ‘그리기’ 버튼을 누른다. 그런 후에 라이트펜을 움직이면 고무줄처럼 직선이 따라 움직인다. 끝점의 위치까지 라이트펜을 이동시킨 후 라이트펜을 확 들어 올린다. 그러면 직선이 확정된다.
- 원 그리기: 원의 중심에 해당하는 위치에 라이트펜을 위치시킨 후에 ‘원 중심 정하기’ 버튼을 누른다. 그런 후에 원이 그려질 위치로 라이트펜을 움직인 다음, ‘그리기’ 버튼을 누른다. 그런 후에 라이트펜을 움직이면 컴퍼스로 원을 그리듯이 선이 그려진다. 완전한 원을 그리려면 시작점까지 라이트펜을 이동시킨 후에 라이트펜을 확 들어 올린다. 라이트펜을 시작점까지 이동시키지 않고 펜을 확 들어 올리면 호arc가 그려진다.
- 복사하여 붙여넣기: 이미 그려진 도형을 복사하여 사용할 수 있다. 이때 새롭게 복사된 도형은 원본 도형에 종속된다. 즉, 원본 도형의 모양을 바꾸면, 복사되어 사용된 도형도 자동으로 모양이 바뀐다.
- 다중 화면: 여러 장의 종이를 사용하는 것처럼 여러 개의 화면을 사용할 수 있다. 다른 화면에서 그린 도형을 복사하여 붙여넣기 할 수 있다.
- 도형에 속성 지정하기: 선에 어떤 특정한 속성을 부여할 수 있다. 예를 들어 선을 그린 후에 그 선에 수직 혹은 수평의 속성을 지정하면 그에 따라 선의 모양이 바뀐다.
스케치패드의 기본 동작은 오늘날 그림 그리기 소프트웨어에서 쉽게 찾아볼 수 있는 것들이다. 라이트펜과 버튼 대신에 현재는 마우스, 키보드, 터치펜 등을 사용하는 차이가 있을 뿐이다. 이런 점에서 스케치패드는 대화형 컴퓨터 그래픽스의 시조라고 할 수 있다.
스케치패드 프로그램의 구성
스케치패드 프로그램은 TX-2용 어셈블리어 언어로 작성되었다. TX-2용 어셈블러 프로그램은 래리 로버트가 만든 것으로 매크로를 지원했다. 스케치패드 프로그램은 좌표 계산을 위해서 수치연산 작업을 많이 했는데 래리 로버트가 만든 SOLVE라는 매크로 패키지를 사용했다.2
스케치패드 프로그램은 크게 4가지 부분으로 나뉜다. 먼저 라이트펜 처리부가 있다. 라이트펜이 음극선관 화면에 가까이 다가오면 이를 감지하고 좌표를 알아내는 일을 한다. 또한, 해당 좌표에 이미 그려진 점이 있는지도 알아낸다. 이는 이미 그려진 도형을 이동시키거나 복사할 때 선을 찍어 선택할 수 있어야 하기 때문이다.
두 번째는 버튼이나 회전 손잡이 등으로 입력된 명령을 처리하는 부분이 있다. 예를 들어, ‘그리기’ 버튼을 눌렀다면 직선 혹은 원을 위한 자료구조를 생성한다. 만약 ‘복사’ 버튼을 눌렀다면 현재 라이트펜이 가리키고 있는 도형의 자료구조를 찾아서 복사본을 만들어야 한다.
세 번째는 화면에 찍힐 점의 좌표를 생성하는 부분이다. 각 도형에 해당하는 자료구조를 읽어서 그 도형에 해당하는 점들의 좌표값을 구한다. 스케치패드는 브라운관의 물리적인 좌표와 그림이 그려지는 도면의 논리적인 좌표가 별개로 존재한다. 브라운관은 512 x 512 의 크기를 가지지만 논리적인 도면의 크기는 훨씬 크다. 그래서 논리적인 도면이 모두 물리적인 화면에 나타나지 않는다. 이를 고려하여 점의 물리적 화면 좌표를 계산한다.
TX-2 컴퓨터의 음극선관 디스플레이 구조는 현재의 개인용 컴퓨터 디스플레이 구조와 다르다. 현재의 개인용 컴퓨터는 물리적 화면에 있는 점(픽셀)에 해당하는 값을 메모리에 저장한다. 따라서 512 x 512 크기의 화면이라면 ‘512 x 512 x 픽셀당 데이터’ 만큼의 메모리가 필요하다.¶개인용 컴퓨터의 디스플레이 컨트롤러는 이 메모리에서 픽셀값들을 읽어서 모니터에 전기신호를 보내준다. TX-2 컴퓨터에서는 점이 찍히는 좌표값을 그대로 저장한다. 그 이유는 메모리 값이 너무 비싸기 때문에 모든 픽셀을 저장할 수 없기 때문이었다. 하지만 만약 512 x 512 크기의 화면 전체에 점을 찍는다면 ‘512 x 512 x (x 좌표값 + y 좌표값)’만큼의 메모리 공간이 필요하므로 불합리해 보인다. 원래 TX-2의 디스플레이는 공군의 레이더 시스템에서 빌려왔음을 기억하자. 따라서 화면에 많은 점이 찍힐 상황은 희박했다.
마지막으로 쓰레기 수집부garbage collector가 있다. 스케치패드는 도형에 관한 정보를 관리하기 위해 링 구조ring structure를 사용했다. 각 도형마다 저장되는 정보의 양은 고정되어 있지 않았으며 서로 링크로 연결되어 있었기 때문에 도형이 지워지면 해당 도형의 자료구조가 메모리 상에서 다른 자료구조들 사이에 위치할 수 있었다. 그래서 도형 만들기와 지우기를 반복하다 보면 메모리 여기저기에 더 이상 사용되지 않는 자료구조가 불필요하게 자리를 차지하고 남아 있을 수 있게 된다. 그래서 주기적으로 쓰레기 수집부가 동작해서 자료구조들을 재배치한다.
스케치패드의 자료구조
스케치패드에서는 각 도형마다 생성되는 데이터 집합을 n-컴포넌트 엘리먼트component element라고 불렀다. 도형을 표현하기 위해서는 기본적으로 갖추어야 할 데이터들이 있다. 직선을 위해서는 시작점과 끝점 좌표가 필요하고 원을 위해서는 중심점과 반지름 값이 필요하다. 그런데 사각형은 어떻게 표현해야 할까? 사각형은 직선 4개가 필요하므로 직선 4개의 시작점과 끝점 좌표를 모두 저장하면 될 듯싶다. 그런데 그렇다면 이미 그려진 직선 4개의 n-컴포넌트 엘리먼트에 있는 것을 다시 중복해서 사각형 정보에 추가해야 할까? 그렇게 할 수도 있겠지만 스케치패드는 그렇게 하지 않았다. 대신에 사각형 n-컴포넌트 엘리먼트는 이미 만들어진 직선 n-컴포넌트 엘리먼트4개를 가리킨다. 또한 직선의 시작점과 끝점에도 각각 별도의 n-컴포넌트 엘리먼트가 만들어졌다. 그 이유는 이 점들도 라이트펜으로 이동이 가능하기 때문이었다.
스케치패드에서는 어떤 점을 선택해서 이동시키면 그 점에 연결된 모든 직선들이 함께 변형된다. 이렇게 하려면 어떤 점에 연결된 모든 직선들을 알아낼 수 있어야 한다. 이처럼 연관된 n-컴포넌트 엘리먼트들을 관리하기 위해 링 구조ring structure가 사용되었다. 점 n-컴포넌트 엘리먼트와 이 점에 연결된 선들의 n-컴포넌트 엘리먼트들은 포인터를 사용해서 링의 형태로 연결된다.
스케치패드에서는 어떤 도형이 복사되면 새로운 n-컴포넌트 엘리먼트를 생성하는데 이것을 인스턴스instance라는 이름으로 관리한다. 그리고 원본 n-컴포넌트 엘리먼트는 마스터master라고 불린다. 인스턴스는 위치에 대한 데이터만 가지고 도형의 형상에 관한 데이터는 따로 가지고 있지 않다. 그래서 이 인스턴스에 해당하는 화면 좌표를 계산하려면 마스터에 있는 데이터를 사용하게 된다.
이 구조는 매우 강력한 효과를 발휘한다. 마스터의 데이터 값을 바꾸면 자동으로 모든 인스턴스에 영향을 주게 된다. 예를 들어 마스터의 형태가 원래는 삼각형이었고 이를 여러 개 복사해서 사용했다고 했을 때, 마스터의 형태를 사각형으로 바꾸면 이미 복사된 도형들도 모두 사각형으로 바뀌게 된다.
이는 오늘날 객체 지향 프로그래밍object-oriented programming과 유사하다. 실제로 객체 지향 프로그래밍 언어인 스몰토크Smalltalk를 개발했던 앨런 케이는 스케치패드에서 객체 지향 프로그래밍이 처음 구현되었다고 언급하기도 했다.5 하지만 아이번 서덜랜드는 다음과 같이 겸손하게 반응했다.
아이고… 당연히 나는 아무 생각이 없었어요. 그저 재미난 것이 동작하게 만들려고 노력했을 뿐입니다.8
코헨-서덜랜드 알고리듬
1967년에 비행기 시뮬레이터를 만들면서 개발된, 선 자르기line-clipping 알고리듬이다. 2차원 평면에서 눈에 보이는 영역viewport이 주어졌을 때 그 영역 밖에 있는 선이나 선의 일부분을 제거하는 일을 한다.
답글 남기기