ComputerProgrammingwithGNUSmalltalk:5.5

From 흡혈양파의 번역工房
Revision as of 07:39, 17 October 2012 by Onionmixer (talk | contribs) (CPGS 클래스로부터객체생성하기 페이지 추가)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

클래스로부터 객체 생성하기

클래스를 만든 후, 아래 코드의 형식처럼 사용하여 객체를 생성할 수 있습니다.

ourObjectName := SubclassName new


우리는 SubclassName으로부터 객체를 생성하기 위해 new 메시지를 보냈습니다. 그러나, 잠시만! 우리는 new 메소드를 정의한 적이 없습니다. 그렇다면 어떻게 new 메소드를 사용할 수 있을 까요? 이것은 상속의 개념과 관련이 있습니다. 모든 클래스, 객체들은 기본으로 정의한 메소드들을 가지고 있는데, new 메소드 또한 그 중 하나입니다. 이 메소드는 클래스로부터 객체를 만드는 방법으로 제공하는데, 상속을 하기 때문에 매번 다시 정의할 필요는 없습니다.


ourObjectName은 새로 생성한 객체를 참조할 이름입니다. 이는 변수variable라고 불리기도 합니다. 이제 프로그램에 ourObjectName을 쓸 때, 인터프리터는 우리가 말하는 객체가 무엇인지 알 것입니다. 예를 들어, 객체에서 사용하기 위해 anInstanceMethod를 선언하였던 것을 기억하실 것입니다. 우린 다음과 같은 표현을 사용하여 객체에 이 메시지를 전달할 수 있습니다.

ourObjectName anInstanceMethod


먼저 변수의 이름과 전달할 메시지의 이름을 씁니다. 이 표현은 objectToReturn을 반환할 것입니다. 인스턴스 메소드를 어떻게 사용하는지는 배웠지만, 클래스 메소드는 어떻게 사용하는지 배운 적은 없습니다. 아래의 문장을 실행하면 에러가 날 것입니다.

ourObjectName aClassMethod


aClassMethod는 인스턴스가 아니라 클래스를 위한 것입니다. 다음과 같이 클래스를 위한 메소드를 수행할 수 있습니다.

SubclassName aClassMethod


혹은 객체의 클래스에 도달하기 위해 (new에서 그랬던 것처럼) 상속받은 메소드 class로부터 도움을 얻을 수 있습니다. 그리고 다음과 같이 메시지를 전달할 수 있습니다.

ourObjectName class aClassMethod


여기서 연쇄 메시지 개념을 사용하였습니다. 메시지가 왼쪽에서부터 오른쪽으로 판단되기 때문에, 우리의 표현은 다음의 표현으로 먼저 전환합니다.

SubclassName aClassMethod

Notes