ComputerProgrammingwithGNUSmalltalk:5.5

From 흡혈양파의 번역工房
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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

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

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