VisualWorksIntroduction:Page01

From 흡혈양파의 번역工房
Jump to navigation Jump to search

cincom_tutorial_vwlogo
cincom_tutorial_cincomlogo


입문서 : 객체지향의 원리(파트1)

cincom_tutorial_stlogo

cincom_tutorial_openbook 이 튜토리얼만으로 객체지향의 모든 범위를 포괄하는 것은 불가능합니다. 객체지향은 광범위한 내용과 더불어 수많은 추상적인 이론을 포함하고 있습니다. 스몰토크는 현 시점에서도 구체적인 객체지향 프로그래밍 이론의 예를 제공하고 있기 때문에, 많은 대학의 컴퓨터 공학과(그와 동등한 학과, 학교)에서 객체지향을 가르치기 위해 사용되고 있습니다.
cincom_tutorial_certificate 이 입문서에서는 객체지향 프로그래밍에 필요한 전문용어, 그것을 이해하기 위한 정보를 제공합니다. 스몰토크에서 객체지향 학습을 통해 다른 언어를 통해 학습하는 것 보다도 이해도가 향상되고, 더욱 더 깊이 이해하고 인식할 수 있게 됩니다. 때때로 불만이 쌓일 지도 모릅니다 객체지향 프로그래밍은 사고방식입니다. 떄로는 보다 간단하게 문제를 해결하기 위해 종전과는 전혀 다른 새로운 사고방식을 필요로 합니다.
cincom_tutorial_question 객체는 무엇인가요?

매우 일반적인 객체의 정의는 "객체는 클래스의 인스턴스"라는 겁니다. 그러면 다음 질문을 쉽게 상상할 수 있습니다. "클래스는 무엇인가요?" 클래스는 정의입니다. 또는 객체의 특징을 기술한 모형(템플릿)입니다. 예를들어 Integer는 수치 1이 Integer 클래스의 인스턴스이기 때문에 클래스로 간주합니다. 사람에 따라서는 "객체공장"으로서 클래스를 표현합니다. 클래스(공장)은 객체를 작성하는 방법을 알고 있습니다. 비슷한 예로 도장과 청사진이 있습니다. 여기서 공장이라는 예를 사용하여 생각해보면 – 차를 만드는 공장은 차가 아닙니다. 클래스는 설계도입니다. 객체는 공장, 설계도, 청사진에서 지시를 받고 작성된 것입니다.


객체의 두 가지 주된 특징

  • 속성(property)
  • 메서드(method)


차의 속성은 색, 에어백, 엔진, 오일용량 등입니다. 차의 메서드는 가속한다, 브레이크, 커브 등입니다. 객체지향의 장점은 클래스는 추상적이지만 객체 자체는 실제와 같다는 것입니다. 그러므로 실제 사회에 있는 것들과 관련짓기 쉽습니다. 다른 예로 설명해보겠습니다. 언어를 말하거나 쓰거나 하는 경우를 생각해봅시다. 속성은 명사고 메서드는 동사입니다.


스몰토크의 세계에서는 다음과 같이 칭합니다. "모든 것은 객체이다". 이 문장은 진실입니다. 스몰토크에서 무언가를 하기 위한 유일한 방법은 메서드를 움직이는 객체에 메시지를 보내는 것 뿐입니다. 이 이론을 근거로 스몰토크 언어에 적용시켜 봅시다.


노란색으로 강조되어 있는 문이 스몰토크"문", 혹은 "식"(좋을대로 부르시면 됩니다.)입니다. 스몰토크문 해설은, 동시에 객체지향의 설명도 됩니다. 설명을 이해하는 것이 무엇보다 중요합니다. 설명이 약간 깁니다만 철저하게 설명하고 있으니 끈기있게 독파해주시기 바랍니다.

cincom_tutorial_merge
4 squared

4는 숫자입니다. 좀 더 구체적으로 말하면, Integer(정수)라 불리우는 수입니다. 비주얼웍스에서 정수는 SmallIntegerLargeInteger로 나뉩니다. 객체지향 용어에서 4는 객체입니다. 그리고 SmallInteger는 그 클래스입니다. 다른 말로 "4는 SmallInteger 클래스의 인스턴스입니다"가 됩니다. "연어는 생선입니다"를 바꿔 말하면 "연어는 생선 클래스의 인스턴스입니다"가 됩니다.


VisualWorks는 거대한 클래스 라이브러리를 제공하고 있습니다. 이 라이브러리에는 클래스에 속하는 코드(메서드)가 포함되어 있습니다. 이것들의 메서드는 컴퓨터(컴퓨터 언어)에 처리를 요구하는 기능을 가지고 있습니다. 예를들어 수치가 왔을 경우 더하기, 빼기, 곱하기, 나누기를 컴퓨터에 요구합니다. 또한 “squared”(제곱)을 계산하기 위해서는 더욱 고도의 수학적 기능을 실행하도록 요구할 것입니다.


위의 식에서는 4(SmallInteger 클래스의 인스턴스)에 squared 메시지가 송신되어 있습니다.


이해되셨나요? 다음 예시에서 좀 더 자세하게 알아보도록 합시다.


'pots' reverse

"pots"는 single quotes(')에 둘러싸여 있습니다. Smalltalk에서는 이것을 연속문자로 인식합니다. 다른 말로 표현하자면, String(문자열)로 유명합니다. String은 클래스입니다. "pots"는 String 클래스의 인스턴스입니다. 스몰토크에 있어서 "pots"는 "단어"로서 인식되지 않습니다. 영어를 구사하는 사람들에게 있어서는 단어일지도 모르겠지만, 스몰토크 입장에서는 연속되는 문자일 뿐입니다. 스몰토크에서는 단어를 single quotes로 둘러쌈으로서 String이 됩니다. String은 클래스이며, "pots"는 String 클래스의 인스턴스입니다.


앞서 서술한 것과 같이, 비주얼웍스는 거대한 클래스 라이브러리를 제공하고 있으며, 그 라이브러리는 클래스에 속하는 코드(메서드)를 포함하고 있습니다. 이것들의 메서드는 컴퓨터(컴퓨터 언어)가 기대하는 기능을 실행합니다. 예를 들어서 문자열의 경우, 문자열의 수를 카운트하는 방법이나 문자의 분할방법을 요구하거나 합니다. reverse 메서드는 문자열 조작을 행합니다. 이것은 스몰토크에 문자 순서를 거꾸로 하라는 지시를 내립니다.


워크스페이스에서 위에서 적은 문을 반전하고 <오퍼레이트 클릭>해서 프린트를 선택해 주십시오. 스몰토크는 'stop'을 표시합니다.


이제는 제법 이해를 하셨으리라 생각합니다. 전부를 이해하는 것은 어렵지만 조금이나마 이해가 되었을지도 모릅니다. 좀 더 해봅시다.


3 + 4

3과 4는 객체에서 SmallInteger 클래스의 인스턴스입니다. 여기까진 아시겠지요. 모든 Smalltalk 식은 최소한 객체와 메시지를 포함해야 합니다. 따라서 플러스 기호는 메시지여야 합니다. 그리고 Smalltalk에서 모든 식은 오브젝트 - 메서드라는 형태로 분해되어야 합니다. 이 메시지는 이항 메시지라 합니다. 왜냐하면 두 개의 객체를 동반하고 있기 때문입니다. 만약 이해가 되지 않더라도 나중에 설명할 것이니 일단 진행하도록 합시다. 3은 SmallInteger 클래스의 인스턴스입니다.(플러스 메시지의 리시버를 호출하고 있음) 스몰토크는 SmallInteger 클래스에 대응해 플러스 메서드를 찾습니다. 찾아서 메서드를 실행하고 객체를 돌려놓습니다. 이 경우에는 7의 SmallInteger 인스턴스가 돌아옵니다.

여기서 살짝 의문이 들지도 모르겠네요. 일반 사회에서 플러스 기호는 수학적 계산을 하는 것으로 인식되어 있습니다. 다른 프로그래밍 언어에서는 이 플러스 기호를 명령 혹은 삽입되어있는 기능으로서 취급합니다. Smalltalk에서는 플러스 기호는 메시지입니다. 이러한 사고방식은 점점 익숙해질 것입니다.

cincom_tutorial_check 처음 위에 제시한 두 가지 예는 스몰토크 언어의 기본구성입니다. 일본어처럼, 더 단순한 문법은 두 개의 단어 뿐입니다. 그것은 명사와 동사입니다.("그는 날았다"나 "그녀는 울었다") 스몰토크 식도 비슷합니다. 스몰토크 식은 객체와 메서드를 포함합니다.(4 squared) 한 개의 객체, 한 개의 메서드를 포함하고 있기에 단항 메시지라고도 합니다. 스몰토크에서는 그 외에 두 가지 형태의 식이 있습니다.(다음 입문서에서 설명하겠습니다) 하지만 이러한 형태도 최종적으로는 단항 메시지로 분해됩니다.
cincom_tutorial_question 메시지 대 메서드. 뭐가 다른거죠?

위 설명을 자세히 살펴보면 "메시지""메서드"를 교환할 수 있다는 것을 눈치채셨을겁니다. 정말 같은 것일까요? 하지만 실제로 같지는 않습니다. 같지 않다는 것을 이해하는 게 중요합니다. 예를 들어 설명하겠습니다.

'pots' dirty

Smalltalk에 있어서 "pots"라는 단어는 "단어"가 아닙니다. 영어를 구사하는 사람에게 있어서는 단어입니다만, 스몰토크 입장에서는 String이라 불리우는 스몰토크의 연속된 문자일 뿐입니다. String은 클래스입니다. "pots"는 String 클래스의 인스턴스입니다.


하지만 dirtyString 클래스가 이해할 수 없는(존재하지 않는) 메서드이기 때문에 아무것도 일어나지 않습니다. dirty라는 메시지는 틀렸습니다. 프로그래머는 dirty 메시지를 사용할 때 스몰토크가 String 객체에서 무엇이 가능한지를 알아야 합니다. 그렇기 때문에, 스몰토크 인터프리터(interpreter)는 String 클래스에게 가서('pots'가 String 클래스의 인스턴스이기 때문에) 묻습니다. "String 클래스의 dirty 메서드를 주세요" 라고 말이죠. 하지만 스몰토크는 String 클래스로부터 dirty 메서드를 찾아낼 수 없었습니다. 그리고, "메서드를 확인할 수 없습니다." 라는 메시지를 전하는 다이얼로그 박스를 돌려줍니다. 이 예문에서는 dirty는 메시지이지만 메서드는 아니였습니다.


실생활에 빗댄 예시입니다. 피아노 연주를 요청할 수 있는 나이트클럽에 들어갔다 가정합시다. 연주자에게 "Far Far Away"연주를 요청합니다. 연주자는 "그 곡을 모릅니다"라고 대답했습니다. 연주자에게 "Mack the Knife"연주를 요청했습니다. 연주자는 "OK"라고 대답하고 피아노 연주를 했습니다. 피아노 연주자(NightClubPianoPlayer 클래스의 인스턴스)는 그 요청(메시지)을 모를 경우, "저는 그 곡을 모릅니다" 라고 대답합니다. 이것은 요청곡(메시지)이 연주자가 아는 곡(메서드)의 라이브러리에 없었던 것을 의미합니다. 피아노 연주자가 그 요청곡(메시지)을 알고 있는 경우에는, "그 곡을 연주하겠습니다"라고 대답하고 그 곡을 연주합니다. 이것은, 요청곡(메시지)이 연주자가 알고 있는 곡(메서드) 라이브러리에 있었다는 것을 의미합니다.

cincom_tutorial_certificate 정리

본 입문서의 설명과 예를 통해, 객체라는 것을 인식하기 시작하셨는지요. 이러한 사고방식을 가지고 튜토리얼 레슨으로 돌아가시기 바랍니다.


| 학습으로 돌아가기 |