ComputerProgrammingwithGNUSmalltalk:5.5: Difference between revisions
Onionmixer (talk | contribs) (CPGS 클래스로부터객체생성하기 페이지 추가) |
Onionmixer (talk | contribs) (메소드 > 메서드 수정) |
||
Line 9: | Line 9: | ||
우리는 SubclassName으로부터 객체를 생성하기 위해 new 메시지를 보냈습니다. 그러나, 잠시만! 우리는 new | 우리는 SubclassName으로부터 객체를 생성하기 위해 new 메시지를 보냈습니다. 그러나, 잠시만! 우리는 new 메서드를 정의한 적이 없습니다. 그렇다면 어떻게 new 메서드를 사용할 수 있을 까요? 이것은 상속의 개념과 관련이 있습니다. 모든 클래스, 객체들은 기본으로 정의한 메서드들을 가지고 있는데, new 메서드 또한 그 중 하나입니다. 이 메서드는 클래스로부터 객체를 만드는 방법으로 제공하는데, 상속을 하기 때문에 매번 다시 정의할 필요는 없습니다. | ||
Line 20: | Line 20: | ||
먼저 변수의 이름과 전달할 메시지의 이름을 씁니다. 이 표현은 objectToReturn을 반환할 것입니다. | 먼저 변수의 이름과 전달할 메시지의 이름을 씁니다. 이 표현은 objectToReturn을 반환할 것입니다. | ||
인스턴스 | 인스턴스 메서드를 어떻게 사용하는지는 배웠지만, 클래스 메서드는 어떻게 사용하는지 배운 적은 없습니다. 아래의 문장을 실행하면 에러가 날 것입니다. | ||
<syntaxhighlight lang="smalltalk"> | <syntaxhighlight lang="smalltalk"> | ||
Line 27: | Line 27: | ||
aClassMethod는 인스턴스가 아니라 클래스를 위한 것입니다. 다음과 같이 클래스를 위한 | aClassMethod는 인스턴스가 아니라 클래스를 위한 것입니다. 다음과 같이 클래스를 위한 메서드를 수행할 수 있습니다. | ||
<syntaxhighlight lang="smalltalk"> | <syntaxhighlight lang="smalltalk"> | ||
Line 34: | Line 34: | ||
혹은 객체의 클래스에 도달하기 위해 (new에서 그랬던 것처럼) 상속받은 | 혹은 객체의 클래스에 도달하기 위해 (new에서 그랬던 것처럼) 상속받은 메서드 class로부터 도움을 얻을 수 있습니다. 그리고 다음과 같이 메시지를 전달할 수 있습니다. | ||
<syntaxhighlight lang="smalltalk"> | <syntaxhighlight lang="smalltalk"> |
Latest revision as of 02:29, 10 January 2013
클래스로부터 객체 생성하기
클래스를 만든 후, 아래 코드의 형식처럼 사용하여 객체를 생성할 수 있습니다.
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