VisualWorksIntroduction:Page07

From 흡혈양파의 번역工房
Revision as of 10:25, 13 December 2012 by Onionmixer (talk | contribs) (VisualWorksIntroduction page07 추가)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

cincom_tutorial_vwlogo
cincom_tutorial_cincomlogo


입문서 : 슈퍼 클래스(파트 1)

cincom_tutorial_stlogo

cincom_tutorial_openbook 스몰토크 언어에는 다섯가지 에약어가 있습니다. Super는 그중 하나입니다. 객체지향의 세계에 있어서 계층구조에 관계하고 있습니다.
cincom_tutorial_certificate 이 입문서에서는 객체지향 프로그래밍에 있어 예약어 super의 역할 및 배경정보를 토대로 설명하겠습니다.
cincom_tutorial_question "super"의 의미는 무엇인가요?


supersuperclass의 약자이며, 매우 단순한 형태입니다. 즉, "지금 사용하고 있는 객체의 상위 클래스"입니다. 아래의 계층을 예로 들겠습니다.

동물

포유동물
진돗개

클래스는 진돗개 클래스의 슈퍼 클래스입니다. 동물 클래스는 포유동물 클래스의 슈퍼 클래스입니다. 포유동물 클래스는 개 클래스의 슈퍼 클래스입니다. 이것으로 계층구조의 지식을 얻었습니다. 이 계층구조에 관련하여 또 한가지 용어를 설명하겠습니다. 그것은 서브 클래스입니다.

위의 예를 사용하여 설명하자면, 클래스는 포유동물 클래스의 서브 클래스입니다. 진돗개 클래스는 클래스의 서브 클래스입니다.

계층구조가 이렇게 심플한 이유는 실제 사회 자체가 계층구조로 되어있기 때문입니다. 실제 사회에서 차용해온 이 계층구조는 객체지향의 세계에 숨겨진 또 하나의 원칙, 상속이라 불리우는 암묵의 특성을 지니고 있습니다. 이것이 컴퓨터 언어에 있어서 무엇을 의미하는 것일까요?

아래의 코드로 예를 들어보겠습니다.

4 squared

아직 이 구문의 설명을 읽지 않으셨다면 여기서 설명을 읽어주십시오.

4는 숫자입니다. 좀 더 구체적으로 말하면, Integer(정수)라 불리우는 수입니다. 비주얼웍스에서 정수는 SmallIntegerLargeInteger로 나뉩니다. 객체지향 용어에서 4는 객체입니다. 그리고 SmallInteger는 그 클래스입니다. 다른 말로 "4는 SmallInteger 클래스의 인스턴스입니다"가 됩니다. "연어는 생선입니다"를 바꿔 말하면 "연어는 생선 클래스의 인스턴스입니다"가 됩니다.
비주얼웍스는 거대한 클래스 라이브러리를 제공하고 있습니다. 이 라이브러리에는 클래스에 속하는 코드(메서드)가 포함되어 있습니다. 이것들의 메서드는 컴퓨터(컴퓨터 언어)에 처리를 요구하는 기능을 가지고 있습니다. 예를들어 수치가 왔을 경우 더하기, 빼기, 곱하기, 나누기를 컴퓨터에 요구합니다. 또한 "squared"(제곱)을 계산하기 위해서는 더욱 고도의 수학적 기능을 실행하도록 요구할 것입니다.
위의 식에서는 4(SmallInteger 클래스의 인스턴스)에 squared 메시지가 송신되어 있습니다.

계층구조라는 점에서 무언가와 닮았습니다.

Number

Integer
SmallInteger


여기서 질문이 있습니다 : 스몰토크 클래스 라이브러리에서 squared 메서드를 찾는거죠? SmallInteger 클래스인가요? Integer 클래스인가요? Number 클래스인가요?


squared 메서드가 SmallInteger 클래스에 속해있다고 가정합시다. 스몰토크는 여기서 메서드를 발견했다고 합시다. 그것은 작은 정수에 squared 메시지를 송신 할 수 있다는 의미를 지닙니다. "squared"는 그 수치 자신을 곱하는 것을 의미하기에, 작은 정수에 대해서만 기능제한을 하는 것은 좋지 않습니다. 그러면 한 단계 위에 있는 Integer 클래스로 메서드를 이행합시다. 이것은 정수(분수나 소수점은 포함되지 않음)에 squared 메시지를 송신할 수 있다는 의미를 지닙니다. 이것 또한 좋지 않습니다. 한 단계 더 위에 있는 Number 클래스로 이행합시다. 이것으로 모든 수치에 대해 squared 메시지를 송신할 수 있습니다.

여기서 그 대답을 찾아봅시다. Smallinteger 클래스는 Integer보다 위에 있는 모든 메서드를 상속합니다. Integer 클래스는 Number보다 위의 메서드를 상속합니다. 특정 클래스의 서브 클래스로서 클래스를 작성했을 때, 다른 클래스나 그 슈퍼 클래스의 모든 메서드를 사용할 수 있습니다.

아래의 코드예제로 동작을 확인해보겠습니다.

^super new initialize

우선 맨 처음 캐롯(^)입니다. 스몰토크의 메서드는 다른 언어의 서브 루틴이나 함수와 닮았습니다. COBOL 언어에서는 "Procedure" 라 불리우며, BASIC에서는 주로 "SUB"라 불리웁니다. 하지만 "function"은 일반적으로, 일련의 흐름이 있는 값을 반환하거나 돌려줄 때 사용합니다. 스몰토크에서는 무언가를 "돌려주고"싶을 때 캐럿(^) 기호를 사용합니다.

^ return을 사용한 식이 있을 경우엔 항상 맨 처음에 모든 식을 평가합니다. 실제로 "돌려주는" 작업은 맨 마지막에 일어난 것이 됩니다. 스몰토크는 왼쪽에서 오른쪽으로 처리하기 때문에 아래와 같이 됩니다.

^super new initialize

이것은 다음과 같이 해석됩니다. "어떠한 클래스이건, 그 상위 클래스로 옮겨가 new 메서드를 실행한다". 상속하기 때문에 상위 클래스에 new 메서드가 없는 경우 한 단계 상위 클래스에 가서 new 메서드를 찾습니다. 또한, 상위 클래스에 new 메서드가 없는 경우 한 단계 위 클래스로 가서 new 메서드를 찾습니다. 이것은 "상위 계층 클래스 검색"이라고 하며, new 메서드를 찾거나, 최상위 클래스에 도달할 때 까지 반복됩니다.(최상위 클래스에서도 찾지 못할 경우, "메시지를 확인할 수 없습니다"라는 메시지가 돌아옵니다.)

이 예문에서는, new 메서드는 현재 클래스의 인스턴스를 작성합니다. 코드를 쓸 필요는 없습니다. 아래와 같이 하면 됩니다.

(클래스의 인스턴스) initialize

Super new는 스몰토크가 클래스의 객체를 생성합니다. 지금 initialize 메시지를 객체에 전송합니다. 스몰토크는 initialize를 인스턴스 메서드 가운데서 찾습니다. 만일 찾지 못한다면 슈퍼 클래스를 찾습니다.

cincom_tutorial_certificate 정리

super new initialize의 식은 유저가 클래스를 정의할 때 항상 보는 메서드 중 하나입니다. 모든 객체는 new 메서드를 필요로합니다. 하지만 new 메서드가 이미 적혀있는데 왜 적는 것일까요?


| 이전으로 돌아가기 |