<?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=ProgrammingInObjectiveC%3AAppendix_C</id>
	<title>ProgrammingInObjectiveC:Appendix C - 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=ProgrammingInObjectiveC%3AAppendix_C"/>
	<link rel="alternate" type="text/html" href="https://trans.onionmixer.net/wiki/index.php?title=ProgrammingInObjectiveC:Appendix_C&amp;action=history"/>
	<updated>2026-05-01T17:05:33Z</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=ProgrammingInObjectiveC:Appendix_C&amp;diff=3700&amp;oldid=prev</id>
		<title>Onionmixer: OC2 부록 C :: Address Book 소스코드 페이지 추가</title>
		<link rel="alternate" type="text/html" href="https://trans.onionmixer.net/wiki/index.php?title=ProgrammingInObjectiveC:Appendix_C&amp;diff=3700&amp;oldid=prev"/>
		<updated>2013-08-01T06:25:05Z</updated>

		<summary type="html">&lt;p&gt;OC2 부록 C :: Address Book 소스코드 페이지 추가&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;;부록 C : Address Book 소스코드&lt;br /&gt;
&lt;br /&gt;
==부록 C :: Address Book 소스코드==&lt;br /&gt;
&lt;br /&gt;
2부 「Foundation 프레임워크」에서 작업했던 주소록 예제의 인터페이스 파일과 구현 파일을 편하게 참고하도록 소스코드 전체를 이곳에 싣는다. AddressCard, AddressBook 클래스 정의가 포함된다. 이들 클래스를 여러분 시스템에 구현하고, 확장해서 더 강력하고 실용적인 프로그램을 작성해 보자. 그 과정에서 Objective-C 언어를 학습하고, 프로그램 생성하기, 클래스 및 객체 다루기, Foundation 프레임워크 작업하기 등의 작업에 친숙해질 것이다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===AddressCard 인터페이스 파일===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;objc&amp;quot;&amp;gt;&lt;br /&gt;
#import &amp;lt;Foundation/Foundation.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@interface AddressCard : NSObject &amp;lt;NSCopying, NSCoding&amp;gt; {&lt;br /&gt;
  NSString *name;&lt;br /&gt;
  NSString *email;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@property (nonatomic, copy) NSString *name, *email;&lt;br /&gt;
&lt;br /&gt;
-(void) setName: (NSString *) theName andEmail: (NSString *) theEmail;&lt;br /&gt;
-(void) retainName: (NSString *) theName andEmail: (NSString *) theEmail;&lt;br /&gt;
-(NSComparisonResult) compareNames: (id) element;&lt;br /&gt;
&lt;br /&gt;
-(void) print;&lt;br /&gt;
&lt;br /&gt;
@end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===AddressBook 인터페이스 파일===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;objc&amp;quot;&amp;gt;&lt;br /&gt;
#import &amp;lt;Foundation/Foundation.h&amp;gt;&lt;br /&gt;
#import &amp;quot;AddressCard.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@interface AddressBook: NSObject &amp;lt;NSCopying, NSCoding&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  NSString *bookName;&lt;br /&gt;
  NSMutableArray *book;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@property (nonatomic, copy) NSString *bookName;&lt;br /&gt;
@property (nonatomic, copy) NSMutableArray *book;&lt;br /&gt;
&lt;br /&gt;
-(id) initWithName: (NSString *) name;&lt;br /&gt;
-(void) sort;&lt;br /&gt;
-(void) addCard: (AddressCard *) theCard;&lt;br /&gt;
-(void) removeCard: (AddressCard *) theCard;&lt;br /&gt;
-(int) entries;&lt;br /&gt;
-(void) list;&lt;br /&gt;
-(AddressCard *) lookup: (NSString *) theName;&lt;br /&gt;
&lt;br /&gt;
-(void) dealloc;&lt;br /&gt;
&lt;br /&gt;
@end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===AddressCard 구현 파일===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;objc&amp;quot;&amp;gt;&lt;br /&gt;
#import &amp;quot;AddressCard.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@implementation AddressCard&lt;br /&gt;
&lt;br /&gt;
@synthesize name, email;&lt;br /&gt;
&lt;br /&gt;
-(void) setName: (NSString *) theName andEmail: (NSString *) theEmail&lt;br /&gt;
{&lt;br /&gt;
  [self setName: theName];&lt;br /&gt;
  [self setEmail: theEmail];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// 지정한 주소 카드의 이름을 비교한다.&lt;br /&gt;
&lt;br /&gt;
-(NSComparisonResult) compareNames: (id) element&lt;br /&gt;
{&lt;br /&gt;
  return [name compare: [element name]];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) print&lt;br /&gt;
{&lt;br /&gt;
  NSLog (@&amp;quot;====================================&amp;quot;);&lt;br /&gt;
  NSLog (@&amp;quot;|                                  |&amp;quot;);&lt;br /&gt;
  NSLog (@&amp;quot;|  %-31s   |&amp;quot;, [name UTF8String]);&lt;br /&gt;
  NSLog (@&amp;quot;|  %-31s   |&amp;quot;, [email UTF8String]);&lt;br /&gt;
  NSLog (@&amp;quot;|                                  |&amp;quot;);&lt;br /&gt;
  NSLog (@&amp;quot;|                                  |&amp;quot;);&lt;br /&gt;
  NSLog (@&amp;quot;|                                  |&amp;quot;);&lt;br /&gt;
  NSLog (@&amp;quot;|          0                0      |&amp;quot;);&lt;br /&gt;
  NSLog (@&amp;quot;====================================&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(AddressCard *) copyWithZone: (NSZone *) zone&lt;br /&gt;
{&lt;br /&gt;
  AddressCard *newCard = [[AddressCard allocWithZone: zone] init];&lt;br /&gt;
&lt;br /&gt;
  [newCard retainName: name andEmail: email];&lt;br /&gt;
  return newCard;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) retainName: (NSString *) theName andEmail: (NSString *) theEmail&lt;br /&gt;
{&lt;br /&gt;
  name = [theName retain];&lt;br /&gt;
  email = [theEmail retain];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) encodeWithCoder: (NSCoder *) encoder&lt;br /&gt;
{&lt;br /&gt;
  [encoder encodeObject: name forKey: @&amp;quot;AddressCardName&amp;quot;];&lt;br /&gt;
  [encoder encodeObject: email forKey: @&amp;quot;AddressCardEmail&amp;quot;];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(id) initWithCoder: (NSCoder *) decoder&lt;br /&gt;
{&lt;br /&gt;
  name = [[decoder decodeObjectForKey: @&amp;quot;AddressCardName&amp;quot;] retain];&lt;br /&gt;
  email = [[decoder decodeObjectForKey: @&amp;quot;AddressCardEmail&amp;quot;] retain];&lt;br /&gt;
&lt;br /&gt;
  return self;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) dealloc&lt;br /&gt;
{&lt;br /&gt;
  [name release];&lt;br /&gt;
  [email release];&lt;br /&gt;
  [super dealloc];&lt;br /&gt;
}&lt;br /&gt;
@end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===AddressBook 구현 파일===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;objc&amp;quot;&amp;gt;&lt;br /&gt;
#import &amp;quot;AddressBook.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@implementation AddressBook&lt;br /&gt;
&lt;br /&gt;
@synthesize book, bookName;&lt;br /&gt;
&lt;br /&gt;
// 빈 주소록을 생성하고 이름을 설정한다.&lt;br /&gt;
&lt;br /&gt;
-(id) initWithName: (NSString *) name{&lt;br /&gt;
  self = [super init];&lt;br /&gt;
&lt;br /&gt;
  if (self) {&lt;br /&gt;
    bookName = [[NSString alloc] initWithString: name];&lt;br /&gt;
    ok = [NSMutableArray alloc] init];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
return self;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) sort&lt;br /&gt;
{&lt;br /&gt;
  [book sortUsingSelector: @selector(compareNames:)];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) addCard: (AddressCard *) theCard&lt;br /&gt;
{&lt;br /&gt;
  [book addObject: theCard];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) removeCard: (AddressCard *) theCard&lt;br /&gt;
{&lt;br /&gt;
  [book removeObjectIdenticalTo: theCard];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(int) entries&lt;br /&gt;
{&lt;br /&gt;
  return [book count];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) list&lt;br /&gt;
{&lt;br /&gt;
  NSLog (@&amp;quot;======== Contents of: %@ =========&amp;quot;, bookName);&lt;br /&gt;
&lt;br /&gt;
  for ( AddressCard *theCard in book )&lt;br /&gt;
    NSLog (@&amp;quot;%-20s %-32s&amp;quot;, [theCard.name UTF8String],&lt;br /&gt;
	   [theCard.email UTF8String]);&lt;br /&gt;
  NSLog (@&amp;quot;====================================&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// 이름으로 주소록 검색. 정확히 일치하는 이름을 찾는다.&lt;br /&gt;
&lt;br /&gt;
-(AddressCard *) lookup: (NSString *) theName&lt;br /&gt;
{&lt;br /&gt;
  for ( AddressCard *nextCard in book )&lt;br /&gt;
    if ( [[nextCard name] caseInsensitiveCompare: theName] == NSOrderedSame )&lt;br /&gt;
      return nextCard;&lt;br /&gt;
&lt;br /&gt;
  return nil;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) dealloc&lt;br /&gt;
{&lt;br /&gt;
  [bookName release];&lt;br /&gt;
  [book release];&lt;br /&gt;
  [super dealloc];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) encodeWithCoder: (NSCoder *) encoder&lt;br /&gt;
{&lt;br /&gt;
  [encoder encodeObject:bookName forKey: @&amp;quot;AddressBookBookName&amp;quot;];&lt;br /&gt;
  encoder encodeObject:book forKey: @&amp;quot;AddressBookBook&amp;quot;];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(id) initWithCoder: (NSCoder *) decoder&lt;br /&gt;
{&lt;br /&gt;
  bookName = [[decoder decodeObjectForKey: @&amp;quot;AddressBookBookName&amp;quot;] retain];&lt;br /&gt;
  book = [[decoder decodeObjectForKey: @&amp;quot;AddressBookBook&amp;quot;] retain];&lt;br /&gt;
&lt;br /&gt;
  return self;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// NSCopying 프로토콜의 메서드&lt;br /&gt;
&lt;br /&gt;
-(id) copyWithZone: (NSZone *) zone&lt;br /&gt;
{&lt;br /&gt;
  AddressBook *newBook = [[self class] allocWithZone: zone];&lt;br /&gt;
&lt;br /&gt;
  [newBook initWithName: bookName];&lt;br /&gt;
  [newBook setBook: book];&lt;br /&gt;
&lt;br /&gt;
  return newBook;&lt;br /&gt;
}&lt;br /&gt;
@end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&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:ProgrammingInObjectiveC]]&lt;/div&gt;</summary>
		<author><name>Onionmixer</name></author>
	</entry>
</feed>