<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://trans.onionmixer.net/wiki/index.php?action=history&amp;feed=atom&amp;title=ComputerProgrammingwithGNUSmalltalk%3A5.6</id>
	<title>ComputerProgrammingwithGNUSmalltalk:5.6 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://trans.onionmixer.net/wiki/index.php?action=history&amp;feed=atom&amp;title=ComputerProgrammingwithGNUSmalltalk%3A5.6"/>
	<link rel="alternate" type="text/html" href="https://trans.onionmixer.net/wiki/index.php?title=ComputerProgrammingwithGNUSmalltalk:5.6&amp;action=history"/>
	<updated>2026-04-16T20:09:03Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.3</generator>
	<entry>
		<id>https://trans.onionmixer.net/wiki/index.php?title=ComputerProgrammingwithGNUSmalltalk:5.6&amp;diff=2528&amp;oldid=prev</id>
		<title>Onionmixer: 메소드 &gt; 메서드 수정</title>
		<link rel="alternate" type="text/html" href="https://trans.onionmixer.net/wiki/index.php?title=ComputerProgrammingwithGNUSmalltalk:5.6&amp;diff=2528&amp;oldid=prev"/>
		<updated>2013-01-10T02:29:57Z</updated>

		<summary type="html">&lt;p&gt;메소드 &amp;gt; 메서드 수정&lt;/p&gt;
&lt;a href=&quot;https://trans.onionmixer.net/wiki/index.php?title=ComputerProgrammingwithGNUSmalltalk:5.6&amp;amp;diff=2528&amp;amp;oldid=2527&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Onionmixer</name></author>
	</entry>
	<entry>
		<id>https://trans.onionmixer.net/wiki/index.php?title=ComputerProgrammingwithGNUSmalltalk:5.6&amp;diff=2527&amp;oldid=prev</id>
		<title>Onionmixer: CPGS 예</title>
		<link rel="alternate" type="text/html" href="https://trans.onionmixer.net/wiki/index.php?title=ComputerProgrammingwithGNUSmalltalk:5.6&amp;diff=2527&amp;oldid=prev"/>
		<updated>2012-10-17T08:33:24Z</updated>

		<summary type="html">&lt;p&gt;CPGS 예&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==예제==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
이제 실제 예제를 이용하여 우리가 배운 개념을 모두 설명해보겠습니다. 이 예제에서 우리는 동물들에 대한 클래스를 만들 것입니다. Animal이란 이름의 클래스는 모든 동물에 대한 정보를 가지고 있으며, 특별한 클래스 Dog과 Cat은 각 종류의 특별한 정보를 갖고 Animal 객체로부터 도출하였습니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;animal.st&amp;quot; &lt;br /&gt;
&amp;quot;객체지향 개념을 보기 위해 동물 클래스를 만드는 프로그램.&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Object subclass: Animal [ &lt;br /&gt;
	| name | &lt;br /&gt;
&lt;br /&gt;
	animalNumber := 0. &lt;br /&gt;
&lt;br /&gt;
	&amp;lt;comment: &amp;#039;동물을 정의하는 클래스&amp;#039;&amp;gt; &lt;br /&gt;
&lt;br /&gt;
	Animal class &amp;gt;&amp;gt; setAnimalNumber: number [ &lt;br /&gt;
		&amp;quot;동물이 몇 마리 있는지 지정하는 클래스 메소드&amp;quot; &lt;br /&gt;
		&amp;lt;category: &amp;#039;accessing&amp;#039;&amp;gt; &lt;br /&gt;
&lt;br /&gt;
		animalNumber := number. &lt;br /&gt;
&lt;br /&gt;
		^animalNumber &lt;br /&gt;
	] &lt;br /&gt;
&lt;br /&gt;
	Animal class &amp;gt;&amp;gt; getAnimalNumber [ &lt;br /&gt;
		&amp;quot;동물이 몇 마리 있는지 가져오는 클래스 메소드&amp;quot; &lt;br /&gt;
		&amp;lt;category: &amp;#039;accessing&amp;#039;&amp;gt; &lt;br /&gt;
&lt;br /&gt;
		^animalNumber &lt;br /&gt;
	] &lt;br /&gt;
&lt;br /&gt;
	setName: newName [ &lt;br /&gt;
		&amp;quot;동물의 이름을 정하는 인스턴스 메소드&amp;quot; &lt;br /&gt;
		&amp;lt;category: &amp;#039;accessing&amp;#039;&amp;gt; &lt;br /&gt;
&lt;br /&gt;
		name := newName. &lt;br /&gt;
	] &lt;br /&gt;
&lt;br /&gt;
	getName [ &lt;br /&gt;
		&amp;quot;동물의 이름을 가져오는 인스턴스 메소드&amp;quot; &lt;br /&gt;
		&amp;lt;category: &amp;#039;accessing&amp;#039;&amp;gt; &lt;br /&gt;
&lt;br /&gt;
		^name &lt;br /&gt;
	] &lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
Animal subclass: Dog [ &lt;br /&gt;
	&amp;lt;comment: &amp;#039;개 클래스&amp;#039;&amp;gt; &lt;br /&gt;
&lt;br /&gt;
	makeNoise [ &lt;br /&gt;
		&amp;quot;개의 울음소리를 가져오는 인스턴스 메소드&amp;quot; &lt;br /&gt;
		&amp;lt;category: &amp;#039;accessing&amp;#039;&amp;gt; &lt;br /&gt;
&lt;br /&gt;
		&amp;#039;Woof!&amp;#039; printNl. &lt;br /&gt;
	] &lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
Animal subclass: Cat [ &lt;br /&gt;
	&amp;lt;comment: &amp;#039;A cat class.&amp;#039;&amp;gt; &lt;br /&gt;
&lt;br /&gt;
	makeNoise [ &lt;br /&gt;
		&amp;quot;고양이의 울음소리를 가져오는 인스턴스 메소드&amp;quot; &lt;br /&gt;
		&amp;lt;category: &amp;#039;accessing&amp;#039;&amp;gt; &lt;br /&gt;
&lt;br /&gt;
		&amp;#039;Miaow!&amp;#039; printNl. &lt;br /&gt;
	] &lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
dog := Dog new. &lt;br /&gt;
Animal setAnimalNumber: 1.&lt;br /&gt;
dog setName: &amp;#039;Karabash&amp;#039;. &lt;br /&gt;
dog getName printNl. &lt;br /&gt;
dog makeNoise. &lt;br /&gt;
&lt;br /&gt;
cat := Cat new. &lt;br /&gt;
Animal setAnimalNumber: 2.&lt;br /&gt;
cat setName: &amp;#039;Minnosh&amp;#039;. &lt;br /&gt;
cat getName printNl. &lt;br /&gt;
cat makeNoise.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{HighlightPurple|&lt;br /&gt;
&amp;#039;Karabash&amp;#039;&amp;lt;BR&amp;gt; &lt;br /&gt;
&amp;#039;Woof!&amp;#039;&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;#039;Minnosh&amp;#039;&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;#039;Miaow!&amp;#039;&amp;lt;BR&amp;gt;&lt;br /&gt;
2&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
이제 이 프로그램을 한 줄씩 설명해보겠습니다. 먼저 모든 클래스의 조상격인 특수 객체 Object를 상속하여 클래스부터 만듭니다. 여기에는 new와 같이 미리 정의된 유용한 메소드도 따라옵니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;br /&gt;
Object subclass: Animal [&lt;br /&gt;
	...&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
다음으로 name이라 이름붙인 인스턴스 변수와 animalNumber라는 이름의 클래스 변수를 선언합니다. 동물에 대한 이름과 동물의 개체수를 클래스 변수에 담아둘 것입니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;	| name |&lt;br /&gt;
&lt;br /&gt;
	animalNumber := 0. &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
클래스에 주석을 쓰는 것은 문서를 남기기 위한 목적입니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;comment: &amp;#039;A class for defining animals.&amp;#039;&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
이제 클래스의 동작을 제공할 메소드를 정의해봅시다. 먼저 동물의 개체수를 지정할 수 있는 클래스 메소드를 만듭니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;	Animal class &amp;gt;&amp;gt; setAnimalNumber: number [ &lt;br /&gt;
		...&lt;br /&gt;
	] &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
그리고 동물의 개체수를 얻기 위한 메소드도 만듭니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;	Animal class &amp;gt;&amp;gt; getAnimalNumber [ &lt;br /&gt;
		...&lt;br /&gt;
	] &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
프로그래밍 하는 동안 set-get 과 같은 종류의 쌍을 자주 볼 것입니다. 나중에 그것들을 획득자 getter 와 지정자 setter , 혹은 접근자 accessor 라고 부릅니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
다음으로 동물의 이름을 지정하고 얻기 위한 접근자를 만듭시다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;	setName: newName [ &lt;br /&gt;
		...&lt;br /&gt;
	] &lt;br /&gt;
&lt;br /&gt;
	getName [ &lt;br /&gt;
		...&lt;br /&gt;
	] &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
이제 첫번째 클래스 작성을 완료하였습니다. 이 클래스로부터 Dog과 Cat, 두 개의 클래스들을 도출해낼 것입니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;br /&gt;
Animal subclass: Dog [ &lt;br /&gt;
	...&lt;br /&gt;
] &lt;br /&gt;
&lt;br /&gt;
Animal subclass: Cat [ &lt;br /&gt;
	...&lt;br /&gt;
] &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
각 클래스는 Animal 클래스로부터 상속하였기 때문에, 이미 setName:과 getName 메소드를 가지고 있습니다. 일부러 다시 작성할 필요가 없습니다. 대신 각 클래스에 makeNoise 메소드를 추가 했습니다. 이러한 방식을 선택한 이유는 각각의 클래스가 고유의 소리를 내기 때문입니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
코드의 나머지 부분은 시험을 할 목적으로 있는 것입니다. 두 개의 객체를 만들었고, 적절한 메시지를 전달하는 것으로 메소드를 시험합니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;br /&gt;
dog := Dog new. &lt;br /&gt;
Animal setAnimalNumber: 1.&lt;br /&gt;
dog setName: &amp;#039;Karabash&amp;#039;. &lt;br /&gt;
dog getName printNl. &lt;br /&gt;
dog makeNoise. &lt;br /&gt;
&lt;br /&gt;
cat := Cat new. &lt;br /&gt;
Animal setAnimalNumber: 2.&lt;br /&gt;
cat setName: &amp;#039;Minnosh&amp;#039;. &lt;br /&gt;
cat getName printNl. &lt;br /&gt;
cat makeNoise. &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
먼저 Dog 객체를 만들고 동물 개체수를 1로 설정한 다음 개의 이름을 ‘Karabash’로 지정합니다. 그리고 개의 이름을 출력하고 짖게 만듭니다.&lt;br /&gt;
다음으로 Cat 객체를 만들어서 Dog과 같은 과정을 적용합니다. 이번에는 이름을 ‘Minnosh’로 정하고, 동물 개체수를 2로 설정합니다. 왜냐하면 동물이 두 마리이기 때문입니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
프로그래밍 유경험자들에게:&lt;br /&gt;
실제로 현재와 같은 상속 트리의 디자인이나 동물 개체수를 직접 설정하는 것은 실제 응용프로그램에서는 물론 나쁜 형태입니다만, 예제를 간단히 유지하기 위해 사용하였습니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
마지막 명령문은 Animal 클래스 안에 유지하고 있는 동물 개체수를 출력하는 것입니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;br /&gt;
Animal getAnimalNumber printNl.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
이 예제에서 접근자 메소드들을 상속하는 것을 보았습니다. 접근자 메소드는 클래스 변수와 인스턴스 변수로 구성된 객체의 내부와 소통할 수 있도록 해주었습니다. 우리는 makeNoise를 통해서 다형성( 메시지를 받은 객체가 자신의 클래스에 따라 다르게 행동하는 것)을 살펴 보았습니다. 그리고 Animal 클래스로부터 상속된 모든 클래스에 setName:과 getName 메소드가 있다는 것을 확인함으로써 상속 개념도 볼 수 있었습니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:ComputerProgrammingwithGNUSmalltalk]]&lt;/div&gt;</summary>
		<author><name>Onionmixer</name></author>
	</entry>
</feed>