<?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=GnuSmalltalkUsersGuide%3ABaseChapter_035</id>
	<title>GnuSmalltalkUsersGuide:BaseChapter 035 - 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=GnuSmalltalkUsersGuide%3ABaseChapter_035"/>
	<link rel="alternate" type="text/html" href="https://trans.onionmixer.net/wiki/index.php?title=GnuSmalltalkUsersGuide:BaseChapter_035&amp;action=history"/>
	<updated>2026-05-01T14:29:11Z</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=GnuSmalltalkUsersGuide:BaseChapter_035&amp;diff=4022&amp;oldid=prev</id>
		<title>Onionmixer: GSUG CObject 페이지 추가</title>
		<link rel="alternate" type="text/html" href="https://trans.onionmixer.net/wiki/index.php?title=GnuSmalltalkUsersGuide:BaseChapter_035&amp;diff=4022&amp;oldid=prev"/>
		<updated>2014-01-23T09:46:32Z</updated>

		<summary type="html">&lt;p&gt;GSUG CObject 페이지 추가&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;;CObject&lt;br /&gt;
&lt;br /&gt;
==CObject==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;네임스페이스 Smalltalk에 정의됨&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;수퍼클래스: Object&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;범주: 언어-C 인터페이스&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:나는 표준 스몰토크 커널 클래스 계층구조에 속하지 않는다. 나의 인스턴스들은 스몰토크 시스템이 해석 가능한 값을 포함한다; 주로 스몰토크 환경 외부의 데이터에 대한 &amp;quot;포인터&amp;quot;를 보관한다. C callout 메커니즘은 나의 인스턴스들을 그에 상응하는 C 값으로 변환되어 외부 루틴에서 사용할 수 있도록 해준다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CObject 클래스: 변환===&lt;br /&gt;
&lt;br /&gt;
====type====&lt;br /&gt;
&lt;br /&gt;
기본 사례에서 특별한 것은 없다 - 수신자에 대해 CType를 응답하라.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====CObject 클래스: 인스턴스 생성====&lt;br /&gt;
&lt;br /&gt;
====address: anInteger====&lt;br /&gt;
&lt;br /&gt;
전달된 어드레스, anInteger를 가리키는 새 객체를 응답하라. &lt;br /&gt;
&lt;br /&gt;
====alloc: nBytes====&lt;br /&gt;
&lt;br /&gt;
nBytes 바이트를 할당하고 수신자의 인스턴스를 리턴하라.&lt;br /&gt;
&lt;br /&gt;
====gcAlloc: nBytes====&lt;br /&gt;
&lt;br /&gt;
nBytes 바이트를 할당하고 수신자의 인스턴스를 리턴하라.&lt;br /&gt;
&lt;br /&gt;
====gcNew: nBytes====&lt;br /&gt;
&lt;br /&gt;
nBytes 바이트를 할당하고 수신자의 인스턴스를 리턴하라.&lt;br /&gt;
&lt;br /&gt;
====new====&lt;br /&gt;
&lt;br /&gt;
NULL을 가리키는 새 객체를 응답하라. &lt;br /&gt;
&lt;br /&gt;
====new: nBytes====&lt;br /&gt;
&lt;br /&gt;
nBytes 바이트를 할당하고 수신자의 인스턴스를 리턴하라.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CObject 클래스: 선점 할당(primitive allocation)===&lt;br /&gt;
&lt;br /&gt;
====alloc: nBytes type: cTypeObject====&lt;br /&gt;
&lt;br /&gt;
nBytes 바이트를 할당하고 주어진 타입의 CObject 를 리턴하라.&lt;br /&gt;
&lt;br /&gt;
====gcAlloc: nBytes type: cTypeObject====&lt;br /&gt;
&lt;br /&gt;
nBytes 바이트를 할당하고 주어진 타입의 CObject 를 리턴하라.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CObject 클래스: 서브클래싱하기===&lt;br /&gt;
&lt;br /&gt;
====subclass: aSymbol====&lt;br /&gt;
&lt;br /&gt;
주어진 이름으로 된 서브클래스를 생성하라.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CObject: 접근하기===&lt;br /&gt;
&lt;br /&gt;
====address====&lt;br /&gt;
&lt;br /&gt;
수신자가 가리키는 어드레스를 응답하라. 저장공간이 nil인 경우 절대 어드레스가 가능하고, 그렇지 않은 경우 #storage에서 스몰토크 객체에 따라 상대적이다. 이런 경우 0의 어드레스는 첫 번째 인스턴스 변수에 해당한다. &lt;br /&gt;
&lt;br /&gt;
====address: anInteger====&lt;br /&gt;
&lt;br /&gt;
수신자가 전달된 어드레스, anInteger를 가리키도록 설정하라.&lt;br /&gt;
&lt;br /&gt;
====isAbsolute====&lt;br /&gt;
&lt;br /&gt;
객체가 쓰레기 수집된 스몰토크 저장공간을 가리키는지, 아니면 절대 어드레스인지 응답하라.&lt;br /&gt;
&lt;br /&gt;
====printOn: aStream====&lt;br /&gt;
&lt;br /&gt;
수신자의 표현을 인쇄하라.&lt;br /&gt;
&lt;br /&gt;
====storage====&lt;br /&gt;
&lt;br /&gt;
수신자가 가리키는 저장공간을 응답하고, 절대 어드레스인 경우 nil을 응답하라. &lt;br /&gt;
&lt;br /&gt;
====storage: anObject====&lt;br /&gt;
&lt;br /&gt;
수신자가 anObject의 저장공간을 가리키도록 변경하라. &lt;br /&gt;
&lt;br /&gt;
====type: aCType====&lt;br /&gt;
&lt;br /&gt;
수신자의 타입을 aCType으로 설정하라.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CObject: 기본===&lt;br /&gt;
&lt;br /&gt;
==== = anObject====&lt;br /&gt;
&lt;br /&gt;
수신자와 aCObject가 같을 경우 true를 리턴하라. &lt;br /&gt;
&lt;br /&gt;
====hash====&lt;br /&gt;
&lt;br /&gt;
anObject에 대한 해시값을 리턴하라. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CObject: C 데이터 접근===&lt;br /&gt;
&lt;br /&gt;
====at: byteOffset put: aValue type: aType====&lt;br /&gt;
&lt;br /&gt;
aValue를 byteOffset 바이트로부터 주어진 타입의 데이터로서 보관하되 수신자에 보관된 포인터 다음에 보관하라.&lt;br /&gt;
&lt;br /&gt;
====at: byteOffset type: aType====&lt;br /&gt;
&lt;br /&gt;
frombyteOffset 바이트로부터 주어진 타입의 데이터 일부를 수신자에 보관된 포인터 다음에 응답하라. &lt;br /&gt;
&lt;br /&gt;
====free====&lt;br /&gt;
&lt;br /&gt;
수신자의 포인터를 해제하고 null로 설정하라. 수신자가 malloc-ed된 영역의 베이스(base)를 가리키지 않을 경우 큰 문제가 발생할 것이다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CObject: 변환===&lt;br /&gt;
&lt;br /&gt;
====castTo: aType====&lt;br /&gt;
&lt;br /&gt;
수신자와 동일한 어드레스를 가리키지만 aType CType에 속하는 다른 CObject를 응답하라. &lt;br /&gt;
&lt;br /&gt;
====narrow====&lt;br /&gt;
&lt;br /&gt;
해당 메서드는 리턴 타입이 CType으로 명시된 C call-out에 의해 CObjects 상에서 호출된다; 대부분의 경우 리턴된 CObject의 클래스를 변경하도록 해준다. 기본적으로는 아무 일도 하지 않기 때문에 리턴 타입을 명시하는 데 #cObject가 사용될 경우 호출되지 않는다. &lt;br /&gt;
&lt;br /&gt;
====type====&lt;br /&gt;
&lt;br /&gt;
수신자에 대한 CType을 응답하라. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CObject: finalization===&lt;br /&gt;
&lt;br /&gt;
====finalize====&lt;br /&gt;
&lt;br /&gt;
VM이 이를 호출하도록 만들기 위해서는 #addToBeFinalized를 사용하라. 이는 CObject가 가리키는 메모리는 자동으로 해제한다. #free를 사용하여 수신자가 malloc-ed 영역의 베이스를 가리키지 않을 경우 큰 문제가 발생하므로 해당 기능은 자동으로 활성화된다. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CObject: 포인터와 같은 행위 ===&lt;br /&gt;
&lt;br /&gt;
====+ anInteger====&lt;br /&gt;
&lt;br /&gt;
&amp;amp;receiver[anInteger] 를 가리키는 수신자 클래스의 또 다른 인스턴스를 리턴하라 (아니면 C에서 &amp;#039;receiver + anInteger&amp;#039;의 결과를 선호한다면 이를 리턴해도 좋다)&lt;br /&gt;
&lt;br /&gt;
====- intOrPtr====&lt;br /&gt;
&lt;br /&gt;
intOrPtr 가 정수일 경우 at &amp;amp;receiver[-anInteger]를 가리키는 수신자 클래스의 또 다른 인스턴스를 리턴하라 (아니면 C에서 &amp;#039;receiver - anInteger&amp;#039;의 결과를 선호한다면 이를 리턴해도 좋다). 수신자와 동일한 클래스일 경우 chars의 차이를 리턴하면 되는데, 두 개의 가리킨 어드레스 간 바이트를 예로 들 수 있겠다 (또는 C에서 &amp;#039;receiver -anotherCharPtr&amp;#039;의 결과를 선호한다면 이를 리턴해도 좋다).&lt;br /&gt;
&lt;br /&gt;
====addressAt: anIndex====&lt;br /&gt;
&lt;br /&gt;
수신자를 지나서 anIndex가 가리키는 객체에 상응하는 요소 타입의 새 CObject를 리턴하라 (CObjects는 포인터를 표현하고 C 포인터는 배열과 같이 행동함을 기억하라). anIndex는 다른 C 스타일의 접근과 마찬가지로 0부터 시작한다. &lt;br /&gt;
&lt;br /&gt;
====at: anIndex====&lt;br /&gt;
&lt;br /&gt;
수신자를 지나서 anIndex가 가리키는 포인터를 역참조하라 (CObjects는 포인터를 표현하고 C 포인터는 배열과 같이 행동함을 기억하라). anIndex는 다른 C 스타일의 접근과 마찬가지로 0부터 시작한다. &lt;br /&gt;
&lt;br /&gt;
====at: anIndex put: aValue====&lt;br /&gt;
&lt;br /&gt;
수신자를 지나서 anIndex가 가리키는 전달된 스몰토크 객체 또는 CObject &amp;#039;aValue&amp;#039;를 보관한다; 역참조된 대상이 CObject인 경우: 즉, 해당 메서드는 cobj[anIndex]=aValue 또는 or cobj[anIndex]=*aValue와 같다. anIndex는 다른 C 스타일의 접근과 마찬가지로 0부터 시작한다. &lt;br /&gt;
두 경우 모두 aValue는 요소 타입의 것이거나 그에 상응하는 스몰토크 타입의 것이어야만 (즉, CStrings의 배열에 String이 괜찮다) C의 타입이 정해지지 않아(untyped) 시그널링 되지 않는 타이핑 문제를 피할 수 있다. &lt;br /&gt;
&lt;br /&gt;
====decr====&lt;br /&gt;
&lt;br /&gt;
포인터를 sizeof(dereferencedType) 바이트 하향(byte down)에 따라 조정하라 (예: -receiver)&lt;br /&gt;
&lt;br /&gt;
====decrBy: anInteger====&lt;br /&gt;
&lt;br /&gt;
포인터를 anInteger 요소 하향(elements down)에 따라 조정하라 (예: receiver -=anInteger)&lt;br /&gt;
&lt;br /&gt;
====incr====&lt;br /&gt;
&lt;br /&gt;
포인터를 sizeof(dereferencedType) 바이트 상향에 따라 조정하라 (예: ++receiver)&lt;br /&gt;
&lt;br /&gt;
====incrBy: anInteger====&lt;br /&gt;
&lt;br /&gt;
포인터를 anInteger 요소 상향에 따라 조정하라 (예: receiver += anInteger)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CObject: 검사하기===&lt;br /&gt;
&lt;br /&gt;
====isNull====&lt;br /&gt;
&lt;br /&gt;
수신자가 NULL을 가리키는 경우 true를 리턴하라. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CObject: 기능 검사하기===&lt;br /&gt;
&lt;br /&gt;
====isCObject====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;true&amp;#039;를 응답하라. &lt;br /&gt;
&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:GnuSmalltalkUsersGuide]]&lt;/div&gt;</summary>
		<author><name>Onionmixer</name></author>
	</entry>
</feed>