OSXDEV.ORG
Mac OS X °³¹ßÀÚ Æ÷·³
  [ FORUM ]   [ WIKI ] 
[ View ]  [ Edit ]  [ Attachments ]  [ History ]    [ Home ]  [ Changes ]  [ Search ]  [ Help ] 
ÆäÀÌÁö ÆíÁý ¾ÏÈ£´Â osx/cocoa ÀÔ´Ï´Ù 

Ä«Å×°í¸®¿Í ÇÁ·ÎÅäÄÝ

Áö³­ 6¿ù 23ÀÏ ºÎÅÍ 27ÀϱîÁö´Â Àü ¼¼°èÀÇ ¸Æ °³¹ßÀڵ鿡°Ô ÃàÁ¦±â°£À̾ú´Ù. WWDC(World Wide Developers Conference)°¡ ¿­¸°°ÍÀÌ´Ù.
»õ·Î¿î IDE¿Í Çâ»óµÈ ÄÄÆÄÀÏ, µð¹ö±ë±â´É, »õ·Î¿î ¹öÁ¯ÀÇ OS(Panther), »õ·Î¿î Çϵå¿þ¾î, »õ·Î¿î ÁÖº¯±â±â°¡ ½ñ¾ÆÁ® ³ª¿Â °ÍÀ̾ú´Ù.
»ç½Ç À̹ø WWDC±â°£¿¡ ¼¼¼Ç¿¡ Âü°¡Çؼ­µµ ¸¹Àº°É ¹è¿üÁö¸¸ ¸î¸î ¾ÖÇÿ¡ ±Ù¹«ÇÏ´Â °³¹ßÀÚµé°úÀÇ ¸¸³²ÀÌ ´õ¿í ÀÎ»ó¿¡ ³²¾Ò´Ù.
¾ÖÇÃÀÇ ¼ÒÇÁÆ®¿þ¾î °³¹ßÀÚ´Â 200¸í Á¤µµ¶ó°í ÇÑ´Ù! Á¤¸» ³î¶óÁö ¾ÊÀ» ¼ö ¾ø´Ù.
¾ÖÇÃÀÌ ½ñ¾Æ³»´Â Á¦Ç°µéÀ» º¸¸é °ú¿¬ 200¸íÀ¸·Î ±×°É ´Ù ÇÒ ¼ö ÀÖ´ÂÁö ÀǽÉÀÌ µéÁö ¾ÊÀ» ¼ö ¾ø´Ù. MacOS X, °³¹ßµµ±¸, ÄüŸÀÓ, iApplicationµé(iPhoto, iChat, iTunes, iDVD...), Ű³ëÆ®, ÆÄÀÌ³Î ÄÆ ½Ã¸®Áî, À¥¿ÀºêÁ§Æ®, ¾ÖÇÿ÷½º, »çÆÄ¸®, °¢Á¾ ¼­¹ö¿ë °ü¸®Åø µîµî.
¸¶ÀÌÅ©·Î¼ÒÇÁÆ®ÀÇ ¸ÆºñÁö´Ï½ºÀ¯´Ö(¸Æ °ü·Ã Á¦Ç°À» °³¹ßÇÏ´Â ºÎ¼­)ÀÇ ÃÑ¿øÀÌ ´ë·« 150¸í °¡·®µÈ´Ù. ¿©±â¼­ ¸¸µé¾î³»´Â Á¦Ç°ÀÌ ¿öµå, ¿¢¼¿, ÆÄ¿öÆ÷ÀÎÆ®, ¾ÓÆ®¶óÁê(¾Æ¿ô·è ÀͽºÇÁ·¹½º¿Í °°´Ù°í »ý°¢ÇÏ¸é µÈ´Ù.), MSN¸Þ½ÅÀú, ¹Ìµð¾î Ç÷¹À̾î, ÀÎÅͳÝÀͽºÇ÷η¯ÀÌ´Ù.
´ëÃæ ¾î¸²ÁüÀÛÇØµµ ¾ÖÇÃÁ÷¿ø 1¸í´ç ó¸®ÇÏ´Â ÀÏÀÌ °ÅÀÇ ¸¶ÀÌÅ©·Î¼ÒÇÁÆ® Á÷¿ø 10¸í ÀÌ»óÀÇ Àϲ¨¸®¶ó°í ºÁµµ µÉ°Í °°´Ù.
±×·±µ¥ ÇÊÀÚ°¡ ¾ÖÇà ÁÖÀ§¸¦ ¾î½½·· °Å·ÈÀ»¶§ ¾ÖÇÃÁ÷¿øµéÀÌ ¸Å¿ì ¿­½ÉÈ÷ ÀÏÇÏ´Â°Í °°¾Æº¸ÀÌÁö´Â ¾Ê¾Ò´Ù(¿ì¸® ³ª¶óÀÇ ±âÁØÀ¸·Î) ±×·¸´Ù°í ¾ÖÇà Á÷¿øµéÀÌ ¸¶ÀÌÅ©·Î¼ÒÇÁÆ® Á÷¿øµéº¸´Ù ´õ ¶Ù¾î³ª´Ù°í º¸±âµµ Èûµé°Í °°´Ù. (¸¶ÀÌÅ©·Î¼ÒÇÁÆ®´Â °¢ ´ëÇп¡¼­ ¶Ù¾î³­ ÀÎÀ縦 ¸¹ÀÌ ²ø¾î¸ðÀ¸±â·Î À¯¸íÇÏ´Ù.)
±×·¸´Ù¸é °ú¿¬ ÀÌ·± »ý»ê¼ºÀÇ Â÷ÀÌ´Â ¾îµð¼­ ¿À´Â°ÍÀϱî?
¹¹ »ç½Ç ¾ÖÇð³¹ßÀÚµéÀÌ È¤ÀÚ°¡ ¸»ÇÏ´Â ¾ÖÇà ±¤½Åµµ(?)À̱⠶§¹®¿¡ ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®ÀÇ °³¹ßÀÚ º¸´Ù Á¤½Å¹«ÀåÀÌ ´õ Àß µÇ¾îÀÖÀ» ¼öµµ ÀÖ´Ù°í »ý°¢ÇÒ ¼öµµ ÀÖ°ÚÁö¸¸ ÇÊÀÚ°¡ µè±â·Î´Â ¾ÖÇÿ¡¼­´Â ¾ÖÇñ¤½ÅµµµéÀ» »ÌÁö´Â ¾Ê´Â´Ù. ¿ÀÈ÷·Á °øÁ¤ÇÏ°Ô ¹Ù¶óº¸´Â ½Ã°¢ÀÌ ¾øÀ» ¼ö Àִٸ鼭 ²¨¸°´Ù°í ÇÑ´Ù.
ÇÊÀÚ´Â ¸Æ Ç÷§ÆûÀÇ ¼±ÁøÀûÀÎ °³¹ßȯ°æ°ú ¿ÀǼҽº Á¤Ã¥ÀÌ »ý»ê¼º¿¡ Å« µµ¿òÀÌ µÇ°í ÀÖ´Ù°í Á¶½É½º·´°Ô ÃßÃøÇØº»´Ù. ±× Á߽ɿ¡ ÄÚÄھư¡ ÀÖ´Â °ÍÀÌ´Ù. Àü¼¼°è¿¡¼­ ÄÚÄھƷΠ°¡Àå ¸¹Àº ÇÁ·ÎÁ§Æ®¸¦ ¼öÇàÇÏ´Â ¾ÖÇÿ¡¼­ ÄÚÄÚ¾ÆÀÇ °³¹ß ÆÛÆ÷¸Õ½º¿¡ ´ëÇØ¼­ °ø½ÄÀûÀÎ ¾ð±ÞÀº ¾ø¾úÁö¸¸ ¹Ì·ç¾î ÁüÀÛÇÒ ¼ö ÀÖ´Â ºÎºÐÀÌ´Ù.

Áö³­´Þ¿¡ À̾ À̹ø ´Þ¿¡´Â ¿ÀºêÁ§Æ¼ºê-CÀÇ Áß¿äÇÑ µÎ°¡Áö ±â´ÉÀÎ Ä«Å×°í¸®¿Í ÇÁ·ÎÅäÄÝ¿¡ ´ëÇØ¼­ ¾Ë¾Æº¼ °ÍÀÌ´Ù.
»ç½Ç Áö³­´Þ ¿¬Àçµµ ³Ê¹« µüµüÇÏ°Ô ÁøÇàµÈ°Í °°°í À̹ø´Þµµ ¹«Ã´ µüµüÇÒ°Í °°Àº ´À³¦ÀÌ ¹ú½á µç´Ù. ÇÏÁö¸¸ ÀÌ ºÎºÐµéÀ» Á¦´ë·Î ÀÌÇØÇØ¾ßÁö Á¦´ë·Î ÄÚÄÚ¾ÆÀÇ ÀåÁ¡µéÀ» »ì¸± ¼ö ÀÖÀ»°ÍÀ̶ó°í »ý°¢ÇÑ´Ù.
¸Å¿ì ¾î·ÆÁö´Â ¾ÊÀº ³»¿ëÀ̹ǷΠõõÈ÷ Àо¸é ÀÌÇØÇÏ±â ¾î·ÆÁö ¾ÊÀ»°ÍÀ̶ó »ý°¢ÇÏ°í ¶Ç ¼³·É Áö±Ý ÀÌÇØ°¡ ¾ÈµÇ¾ú´Ù ÇÏ´õ¶óµµ ÀÌ ±â´ÉµéÀ» Áö±Ý ´çÀå ´Ù »ç¿ëÇÏ´Â °ÍÀº ¾Æ´Ï±â ¶§¹®¿¡ µÚ¿¡ ÁøÇàµÇ´Â ¿¬À縦 º¸¸é¼­ ±â¾ïÀÌ ¾È³ª¸é ´Ù½Ã µ¹¾Æ¿Í¼­ ºÁµµ ÁÁÀ»°ÍÀÌ´Ù. Áö±Ý ´çÀåÀº ÀÌÇØ°¡ Àß ¾ÈµÇ¾îµµ ³ªÁß¿¡ ¿¹Á¦ Äڵ带 º¸¸é¼­ ´Ù½Ã º¸¸é ÈξÀ ½±°Ô ¿Í´êÀ» ¼ö ÀÖÀ»°Í °°±â ¶§¹®ÀÌ´Ù.

Categories

Ä«Å×°í¸®¿¡ ´ëÇØ¼­ ¼³¸íÀ» ÇÏÀÚ¸é °¡Àå °£´ÜÇÏ°Ô ¸»Çؼ­ ÇѰ³ÀÇ Å¬·¡½º ¾È¿¡¼­ ¿©·¯ ¸Þ½îµåµéÀ» Àû´çÇÑ ±âÁØÀ¸·Î ºÐ·ùÇØ¼­ Á¤¸®ÇØ ÁÙ ¼ö ÀÖ°Ô ÇØÁÖ´Â ±â´ÉÀÌ´Ù. ¹°·Ð À̰͸¸ Àִ°ÍÀº ¾Æ´Ï´Ù. ¿ÀºêÁ§Æ¼ºê-CÀÇ Ä«Å×°í¸®¸¦ Àß ÀÌ¿ëÇϸé C++°°Àº µ¥¼­´Â »ó»óÇÒ ¼öµµ ¾ø´Â ¸¶¼ú°°Àº ÀÏÀÌ °¡´ÉÇØÁö±âµµ ÇÑ´Ù. ¿¹¸¦ µé¸é Ŭ·¡½º¸¦ »ó¼ÓÇÏÁö ¾Ê°í ±âÁ¸ Ŭ·¡½º¸¦ È®Àå ÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀ» Á¦°øÇÑ´Ù. ºñ·Ï ±× Ŭ·¡½ºÀÇ ¼Ò½º°¡ ¾ø´Ù°í ÇÏ´õ¶óµµ ¸»ÀÌ´Ù.

Ä«Å×°í¸®ÀÇ »ç¿ë ¸ñÀûÀº ¾Æ·¡¿Í °°´Ù.

- Ŭ·¡½º¸¦ ¿¬°üµÈ ¸î°³ÀÇ ±×·ìÀ¸·Î ³ª´©¾î¼­ °ü¸®ÇÒ ¼ö ÀÖ°Ô ÇØÁØ´Ù. (Áï ÇϳªÀÇ Å¬·¡½º¸¦ ¸î°³·Î Á¶°¢³»¿¡¼­ °ü¸®ÇÒ ¼ö ÀÖ°Ô ÇØÁØ´Ù. ±¸Çö ÆÄÀÏÀÇ Å©±â°¡ Ä¿Áö°í ¸Þ½îµåµéÀÌ ¸¹¾ÆÁö¸é »ó´çÈ÷ À¯¿ëÇÏ´Ù. ¶ÇÇÑ °øµ¿ÀÛ¾÷À» ÇÏ°Ô µÉ¶§ °¢°¢ÀÇ °³¹ßÀÚµéÀÌ ÀÚ½ÅÀÇ ÀÛ¾÷ ¿µ¿ªÀ» °°Àº Ŭ·¡½º ³»¿¡¼­µµ ¸íÈ®ÇÏ°Ô ±¸ºÐ Áþ°Ô ÇÒ ¼ö ÀÖ´Ù.)
- ±âÁ¸ÀÇ Å¬·¡½º¸¦ »ó¼Ó ¹ÞÁö ¾Ê°í »õ·Î¿î ¸Þ½îµå¸¦ Ãß°¡ ÇÒ ¼ö ÀÖ°Ô ÇØÁØ´Ù.
- informal protoclÀ» ±¸ÇöÇÒ¶§ »ç¿ëµÈ´Ù.


Ŭ·¡½º¿¡ Ä«Å×°í¸® Ãß°¡ÇÏ´Â ¹æ¹ý


Ŭ·¡½º¿¡ Ä«Å×°í¸®¸¦ Ãß°¡ÇÏ´Â ¹æ¹ýÀº °£´ÜÇÏ´Ù. ÀÎÅÍÆäÀ̽º ÆÄÀÏ¿¡ Ä«Å×°í¸®·Î ºÐ·ùÇØ¼­ ¸Þ½îµå¸¦ Á¤ÀÇÇÑ ´ÙÀ½ Ä«Å×°í¸® À̸§°ú °°Àº ÆÄÀÏÀÇ ±¸ÇöÆÄÀÏÀ» ÀÛ¼ºÇÏ¸é µÈ´Ù. Ä«Å×°í¸®´Â »õ Ŭ·¡½º¸¦ ¸¸µå´Â°ÍÀÌ ¾Æ´Ï°í ±âÁ¸ Ŭ·¡½º¿¡ ¸Þ½îµå°¡ ´õ Ãß°¡µÇ´Â°ÍÀ» ¸»ÇÑ´Ù.
#import "ClassName.h"

@interface ClassName (CategoryName)
method declarations
@end


#import "CategoryName.h"

@implementation ClassName (CatrgoryName)
method definitions
@end

Ä«Å×°í¸®´Â À§¿Í °°Àº ¹æ¹ýÀ¸·Î »ç¿ëÇÏ¸é µÈ´Ù.

¿¹¸¦ µé¸é ¾ÖÇÿ¡¼­ Á¦°øÇÏ´Â ·¹ÆÛ·±½º¿¡¼­ NSStringŬ·¡½º¸¦ º¼ ¼ö Àִµ¥ ±×°Í°ú º°°³·Î NSString Additions¶ó°í µÈ ºÎºÐµµ º¼ ¼ö ÀÖ´Ù. À̰ÍÀº NSStringÀº ±âº» Ŭ·¡½ºÀ̰í NSString Additions´Â Ä«Å×°í¸®·Î ´õ Ãß°¡µÈ °æ¿ì¸¦ ¸»ÇÑ´Ù.
±×°÷¿¡´Â ¾Æ·¡¿Í °°Àº ¸Þ½îµåµµ µé¾îÀÖ´Ù.
- (void) drawAtPoint: (NSPoint )aPoint withAttributes: (NSDictionary *) attributes 

ÀÌ ¸Þ½îµå´Â À̸§¿¡¼­ ÁüÀÛ °¡´ÉÇϵíÀÌ È­¸é¿¡ ¹®ÀÚ¿­À» ±×·ÁÁÖ´Â ¿ªÇÒÀ» ÇÑ´Ù.
ÇÊÀÚ°¡ °¡Àå Àç¹ÌÀÖ°Ô »ý°¢ÇÏ´Â ºÎºÐÀ¸·Î ÄÚÄÚ¾Æ ÇÁ·¡ÀÓ¿÷Àº ±×·ÁÁú °´Ã¼¿¡ ±×·ÁÁÖ´Â ¸Þ½îµåµéÀÌ Á¸ÀçÇÑ´Ù. MFCÀÇ CString¿¡´Â ±×·± ºÎºÐÀÌ Á¸ÀçÇÏÁö ¾Ê´Â´Ù.
¾î´À°ÍÀÌ ´õ °´Ã¼ÁöÇâÀûÀÎÁö¿¡ ´ëÇÑ ³íÀǸ¦ Çϱâ Àü¿¡ ÀÌ ¸Þ½îµå¸¦ ¼Ò°³ÇÏ´Â ÀÌÀ¯´Â ÀÌ ¸Þ½îµå°¡ Ä«Å×°í¸®·Î ±¸ÇöµÇ¾ú±â ¶§¹®ÀÌ´Ù. Áï, NSString¿¡ ±âº»ÀûÀ¸·Î´Â µå·ÎÀ® ÇÏ´Â ¸Þ½îµå°¡ Á¸ÀçÇÏÁö ¾ÊÁö¸¸ Ä«Å×°í¸®¸¦ ÀÌ¿ëÇØ¼­ Ãß°¡ÇÏ°Ô µÈ °ÍÀÌ´Ù.
¿øÇÑ´Ù¸é Ä«Å×°í¸®·Î »õ·Î¿î ¸Þ½îµåµéÀ» ´õ Ãß°¡ÇÒ ¼ö ÀÖ´Ù. ¹°·Ð NSStringÀÇ ¼Ò½ºÄڵ嵵 ÇÊ¿ä¾ø´Ù.
¶ÇÇÑ Ä«Å×°í¸®·Î Ãß°¡µÈ ¸Þ½îµåµéÀº ÀϹÝÀûÀÎ ´Ù¸¥ ¸Þ½îµå ó·³ »ó¼ÓµÇ±âµµ ÇÑ´Ù.(ÀÌÁ¡Àº ¾ÆÁÖ Áß¿äÇÑ ¹®Á¦·Î »ö´Ù¸¥ ¹®Á¦¸¦ ¾ß±â½Ã۱⵵ ÇÑ´Ù.)

Ä«Å×°í¸® »ç¿ë¿¹


ÀÚ ±×·³ ½ÇÁ¦ Ä«Å×°í¸®¸¦ ¾î¶»°Ô ¾²´ÂÁö Çѹø º¸ÀÚ.
K&RÀÇ À¯¸íÇÑ The C Programming Language¶õ Ã¥¿£ ¼·¾¾, È­¾¾ ¿Âµµ¸¦ º¯È¯ÇÏ´Â ¿¹Á¦°¡ ÀÖ´Ù. À̰Ϳ¡¼­ ¿µ°¨À» ¹ÞÀº(?) ¿¹Á¦ÀÌ´Ù.(¿¹Á¦°¡ ½ä··ÇÏ´Ù°í ÇÊÀÚ¸¦ ¿åÇØµµ ¾î¿ ¼ö ¾ø´Ù. :( Àý´ë·Î ÀÌ·±µ¥ Ä«Å×°í¸®¸¦ ³²¿ëÇÏÁö ¸»°í ¶Ç Äڵ尡 ÀüÇô °´Ã¼ÁöÇâÀûÀÌÁö ¾Ê´Ù°Å³ª consistency°¡ ¾ø´Ù°í ºñÆÇÇÏÁö ¸»±â¹Ù¶õ´Ù. ªÀº ¿¹Á¦ ¸¸µå´À¶ó ´õ Èûµé¾ú´Ù.)
¸ÕÀú NSExampleÀ̶ó´Â Ŭ·¡½º¸¦ ¸¸µé¾î¼­ ÀÌ Å¬·¡½º°¡ °è»êÀ» ÇÏ°Ô ÇØº¸ÀÚ.
¸ÕÀú ÇÁ·ÎÁ§Æ® ºô´õ ¶Ç´Â Xcode¿¡¼­ »õ ÇÁ·ÎÁ§Æ®¸¦ ¼±ÅÃÇÑ´Ù. ±× ´ÙÀ½ ¾Æ·¡ÂÊ¿¡ ÀÖ´Â ÆÄ¿îµ¥ÀÌ¼Ç ÅøÀ» ¼±ÅÃÇØ¼­ ÇÁ·ÎÁ§Æ®¸¦ »ý¼º½ÃŲ´Ù. ÀϹÝÀûÀ¸·Î ÄÚÄÚ¾Æ ¾ÖÇø®ÄÉÀÌ¼Ç °°Àº°É »ç¿ëÇϰÚÁö¸¸ ÇöÀç´Â °£´ÜÇÑ ¿¹Á¦¸¦ ¸¸µé°ÍÀ̱⠶§¹®¿¡ UI¸¦ »ç¿ëÇÏÁö ¾Ê´Â ÆÄ¿îµ¥ÀÌ¼Ç ÅøÀ» ¼±ÅÃÇÑ °ÍÀÌ´Ù.

#import <Foundation/Foundation.h>
#import "NSExample.h"

int main (int argc, const char * argv[])
{
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    // insert code here...
    int ret;
    NSExample *example = [[NSExample alloc] init];
    
    [example setFahr:200];
    [example calc];
    ret = [example celsius];
    NSLog(@"%d\n", ret);
    
    [example release];

    [pool release];
    return 0;
}
<main.m>

¸ÞÀÎ ÇÁ·Î±×·¥Àº À§¿Í °°´Ù. ´Ü¼øÈ÷ È­¾¾ ¿Âµµ¸¦ ÀÔ·ÂÇÑ ÈÄ¿¡ °è»êÇ϶ó´Â ¸Þ½ÃÁö¸¦ ³¯¸®°í ¼·¾¾ ¿Âµµ¸¦ ¹Þ¾Æ¿À´Â°Ô ÀüºÎÀÌ´Ù. NSLog´Â printf¿Í ºñ½ÁÇѵ¥ NSString°ªÀ» ·Î±×âÀ¸·Î Ãâ·ÂÇØÁÖ´Â ¿ªÇÒÀ» ÇÑ´Ù. Àü¿¡µµ ¼³¸íÇßµíÀÌ @À» ºÙÀÎ ¹®ÀÚ¿­Àº NSStringÀ» ¸»ÇÑ´Ù.
NSAutoreleasePool°ú °´Ã¼ÀÇ »ý¼º°ú ¼Ò¸ê¿¡ ´ëÇØ¼­´Â µÚ¿¡ ¼³¸íÀÌ ÀÖÀ¸´Ï ÀÏ´Ü ³Ñ¾î°¡µµ·Ï ÇÏÀÚ.
#import <Foundation/Foundation.h>


@interface NSExample : NSObject {
@private
    int fahr, celsius;
}

- (int)fahr;
- (void)setFahr:(int) aFahr;
- (int)celsius;
- (void)setCelsius:(int) aCelsius;
- (void)calc;

@end
<NSExample.h>

Áö³­´Þ¿¡ ¼³¸íÇÑ ¹æ¹ý´ë·Î ÀϹÝÀûÀΠŬ·¡½º¸¦ ¼±¾ðÇß´Ù.
#import "NSExample.h"


@implementation NSExample

- (int)fahr
{
    return fahr;
}

- (void)setFahr:(int)aFahr
{
    fahr = aFahr;
}

- (int)celsius
{
    return celsius;
}

- (void)setCelsius:(int)aCelsius
{
    celsius = aCelsius;
}

- (void)calc
{
    celsius = 5 * (fahr - 32) / 9;
}

@end
<NSExample.m>

±¸Çö ¿ª½Ã ´Ü¼øÇÏ´Ù. ÀÚ ¿©±â±îÁö´Â º¹½ÀÀ̶ó°í »ý°¢ÇÏ°í ´ÙÀ½ ´Ü°è·Î ³Ñ¾î°¡º¸ÀÚ.
¿©±â¼­ calc¸¦ Á¦¿ÜÇÑ ´Ù¸¥ ¸Þ½îµåµéÀº accessor¶ó°í À̾߱âÇß¾ú´Ù. Áö±ÝÀº ¼Ò½ºÄڵ尡 ª¾Æ¼­ ±×·¸Áö¸¸ ¸¸ÀÏ ¼Ò½ºÄڵ尡 ¹«ÁøÀå ±æ¾îÁ³´Ù°í »ó»óÇÏ°í °á±¹ ÀÌ ºÎºÐÀ» µû·Î °ü¸®ÇÏ°í ½Í´Ù´Â »ý°¢À» ÇÏ°Ô µÇ¾ú´Ù°í ÇÏÀÚ.
ÀÌÁ¦ºÎÅÍ accessor¸Þ½îµå¸¦ µû·Î Ä«Å×°í¸®·Î ºÐ¸®½Ã۰ڴÙ. Çì´õÆÄÀÏÀ» ¾Æ·¡¿Í °°ÀÌ ¼öÁ¤Çß´Ù.
#import <Foundation/Foundation.h>

@interface NSExample : NSObject {
@private
    int fahr, celsius;
}

- (void)calc;

@end


@interface NSExample (Accessors)

- (int)fahr;
- (void)setFahr:(int) aFahr;
- (int)celsius;
- (void)setCelsius:(int) aCelsius;

@end
< NSExample.h>

±¸ÇöÆÄÀÏÀº ¾Æ·¡¿Í °°ÀÌ ¼öÁ¤Çß´Ù.
#import "NSExample.h"


@implementation NSExample

- (void)calc
{
    celsius = 5 * (fahr - 32) / 9;
}

@end


@implementation NSExample (Accessors)

- (int)fahr
{
    return fahr;
}

- (void)setFahr:(int)aFahr
{
    fahr = aFahr;
}

- (int)celsius
{
    return celsius;
}

- (void)setCelsius:(int)aCelsius
{
    celsius = aCelsius;
}

@end
<NSExample.m>

ÀÌ °£´ÜÇÑ ¿¹Á¦¿¡¼­ Ä«Å×°í¸® »ç¿ë¹ýÀº ´Ù ³¡³­°Å³ª ¸¶Âù°¡Áö´Ù. ½ÇÁ¦·Î ±âº» »ç¿ë¹ýÀº ¾Æ·¡¿Í °°´Ù. ¸¸ÀÏ ÇÊ¿äÇÏ´Ù¸é Ä«Å×°í¸® À̸§À¸·Î »õ·Î ÆÄÀÏÀ» ¸¸µé¾î¼­ ±¸Çö ÇÒ ¼öµµ ÀÖ´Ù.

ÀÚ ±×·³ ±âÁ¸ Ŭ·¡½º¿¡ »õ·Î¿î ±â´ÉÀ» Ãß°¡Çغ¸µµ·Ï ÇÏÀÚ. ÇöÀç NSExampleŬ·¡½º´Â ´Ü¼øÇÏ¸ç ½ÇÁ¦·Î K&R Ã¥ÀÇ ¿¹Á¦¿Í °°Áöµµ ¾Ê´Ù. K&RÃ¥ÀÇ ¿¹Á¦¿¡¼­´Â ·çÇÁ¸¦ µ¹¸®¸é¼­ ¿Âµµ¸¦ Âß Ãâ·ÂÇÏ´Â ±â´ÉÀÌ ÀÖ´Ù. ÀÌ ±â´ÉÀ» Ãß°¡Çϵµ·Ï ÇØº¸ÀÚ. ´Ü, ±âÁ¸ÀÇ NSExampleŬ·¡½º´Â ¼Õ´ëÁö ¾Ê°í ¸»ÀÌ´Ù.
Áï, NSExampleŬ·¡½º¸¦ º¥´õ¿¡¼­ Á¦°øÇÑ Å¬·¡½º¶ó°í »ý°¢Çϰí ÀÌÁ¦ °³¹ßÀÚ°¡ ±âÁ¸¿¡ Á¦°øµÈ Ŭ·¡½º¸¦ »ó¼Ó ¹ÞÁö ¾Ê°í ±â´ÉÀ» Ãß°¡ÇÏ´Â ÀÛ¾÷À» ÇÑ´Ù°í »ý°¢ÇÏÀÚ.
ÀÏ´Ü NSExampleÀº ´Ü ÇÑÁÙµµ ¾È°Çµå¸°´Ù°í ¾à¼ÓÇßÀ¸´Ï »õ·Î ÆÄÀÏÀ» ¸¸µéÀÚ. NSExampleAdditions.h¿Í NSExampleAdditions.mÀ» ¸¸µé¾ú´Ù.
#import <Foundation/Foundation.h>
#import "NSExample.h"

@interface NSExample (NSExampleAdditions)

- (void)loop;

@end
<NSExampleAdditions.h>

#import "NSExampleAdditions.h"


@implementation NSExample (NSExampleAdditions)

- (void)loop
{
    int lower, upper, step;
    
    lower = 0;
    upper = 300;
    step = 20;
    
    fahr = lower;
    while ( fahr <= upper ) {
        celsius = 5 * (fahr - 32) / 9;
        NSLog(@"%d\t%d\n", fahr, celsius);
        fahr = fahr + step;
    }
}

@end
<NSExampleAdditions.m>

±×¸®°í loop¶ó´Â ¸Þ½îµå¸¦ ¸¸µé¾î¼­ ±¸ÇöÇß´Ù. º¸¸é ¾Ë°ÚÁö¸¸ fahr¿Í celsiusº¯¼ö´Â NSExampleÀÇ °ÍÀ» ±×´ë·Î ÀÌ¿ëÇß´Ù.
#import <Foundation/Foundation.h>
#import "NSExample.h"
#import "NSExampleAdditions.h"

int main (int argc, const char * argv[])
{
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    // insert code here...
    NSExample *example = [[NSExample alloc] init];
    
    [example loop];
    
    [example release];

    [pool release];
    return 0;
}
<main.m>

main.mÀº À§¿Í °°ÀÌ ¹Ù²Ù¾ú´Ù.
ÀÚ, ÀÌÁ¦ Ä«Å×°í¸®ÀÇ °¡Àå Áß¿äÇÑ ±â´ÉÀÎ ÆÄƼ¼Ç ÇØÁÖ´Â ±â´É°ú »õ·Î¿î ¸Þ½îµå¸¦ Ãß°¡ÇØÁÖ´Â ±â´ÉÀ» È®ÀÎÇØº¸¾Ò´Ù.
¿©±â¼­ ¿¹Á¦¸¦ ¸¸µéÁö´Â ¾Ê¾ÒÁö¸¸ ¸¸ÀÏ ±âÁ¸ÀÇ ¸Þ½îµå¿Í °°Àº ¸Þ½îµå¸¦ Ä«Å×°í¸®·Î Ãß°¡ÇÏ°Ô µÇ¸é ±âÁ¸ÀÇ ¸Þ½îµå¸¦ °¡·Á¹ö¸®°Ô µÈ´Ù. Áï, »ó¼ÓÀ» ÇØµµ ±âÁ¸ÀÇ ¸Þ½îµå¸¦ »ç¿ëÇÒ ¹æ¹ýÀÌ ¾ø´Ù´Â°ÍÀÌ´Ù. ¸¸ÀÏ »ó¼ÓÀ» ¹Þ¾Ò´Ù¸é super¸¦ ÀÌ¿ëÇØ¼­ ±âÁ¸ÀÇ ¸Þ½îµå¿¡ Á¢±Ù ÇÒ ¹æ¹ýÀº ÀÖÁö¸¸ Ä«Å×°í¸®´Â ±×·¸Áö ¸øÇÏ´Ù. À̰ÍÀº Àß »ý°¢Çغ¸¸é Å« ¹®Á¦ÀÏ ¼öµµ ÀÖ´Ù.
ÁÖÀǸ¦ ÁÖÀÚ¸é Ä«Å×°í¸®´Â ¾î¶»°Ô »ç¿ëÇϳĿ¡ µû¶ó¼­ ¸Å¿ì À§ÇèÇÒ ¼öµµ ÀÖ´Ù. ÀÚÄ© À߸øÇϸé ÀüÇô ¾û¶×ÇÑ °á°ú¸¦ ³ºÀ»¼öµµ ÀÖ´Ù´Â °ÍÀÌ´Ù. ¸¸ÀÏ °ø¿ëÀ¸·Î »ç¿ëÇϴ ƯÁ¤ Ŭ·¡½ºÀÇ ¸Þ½îµå¸¦ Ä«Å×°í¸®·Î ¹Ù²ã¹ö¸®¸é ´Ù¸¥ ÀÛ¾÷ÀÚµéÀ̳ª ¼Ò½ºÀÇ ´Ù¸¥ ºÎºÐ¿¡¼­ ¹®Á¦¸¦ ÀÏÀ¸Å³ ¼ö ÀÖ´Ù.
Áï, ¸Þ½îµå¸¦ µ¤¾î¹ö¸®´Â Ä«Å×°í¸®ÀÇ ³²¹ßÀº »ó´çÈ÷ À§ÇèÇÏ¸ç ½ÅÁßÇØ¾ßÇÑ´Ù. ÇÏÁö¸¸ Ä«Å×°í¸®ÀÇ °¡Àå ¸ÚÁø ºÎºÐÀº ¿¹¸¦ µé¸é NSString¿¡¼­ ƯÁ¤ ÀÎÄÚµùÀ» Áö¿øÇؾßÇϴµ¥ NSString¿¡¼­´Â ±× ÀÎÄÚµùÀ» Áö¿øÇÏÁö ¾Ê´Â´Ù°í °¡Á¤ÇÏÀÚ. Ä«Å×°í¸®°¡ ¾øÀ¸¸é NSStringÀ» »ó¼Ó¹Þ¾Æ¼­ ±â´ÉÀ» Ãß°¡ÇÏ°í ±× Å¬·¡½º¸¦ ÀÌ¿ëÇØ¾ß ÇÒ °ÍÀÌ´Ù. À̰ÍÀº ÀǿܷΠ»ó´çÈ÷ ¹ø°Å·Î¿î ¹®Á¦¸¦ ¾ß±âÇÒ ¼öÀÖ´Ù. ¸¸ÀÏ ÀÌ¹Ì ¿Ï¼ºµÈ ¼ö¸¸¶óÀÎÀÇ Äڵ忡¼­ NSStringÀ» ¸ðµÎ ±³Ã¼Çϰí È®ÀÎÇÒ·Á¸é »ó´çÇÑ ºÎ´ãÀÌ µÉ°ÍÀÌ´Ù. ÇÏÁö¸¸ ÀÌ·± °æ¿ì Ä«Å×°í¸®´Â ¾ÆÁÖ ´Ü¼øÇÏ°í ¸íÈ®ÇÑ ¹æ¹ýÀ» Á¦½ÃÇØÁÙ ¼ö ÀÖ´Ù.

Ä«Å×°í¸®ÀÇ ¶Ç ´Ù¸¥ ±â´ÉÀº informal protocolÀº Ä«Å×°í¸®¿Í ÇÁ·ÎÅäÄÝ ¾çÂÊ¿¡ °ÉÃÄÀÖ´Â ºÎºÐÀÌ¶ó¼­ À̰Ϳ¡ ´ëÇØ¼­´Â µÚ¿¡ ÇÁ·ÎÅäÄÝÀ» ¼³¸íÇÒ¶§ °°ÀÌ ¼³¸íÇϵµ·Ï ÇϰڴÙ.


·çÆ® Ŭ·¡½ºÀÇ Ä«Å×°í¸®


Ä«Å×°í¸®´Â ¾î¶² Ŭ·¡½º¿¡µµ ¸Þ½îµå¸¦ Ãß°¡ÇÒ ¼ö Àִµ¥ ¸¸ÀÏ ·çÆ® Ŭ·¡½º¶ó¸é Á» Ưº°ÇØÁø´Ù. Áö³­´Þ¿¡ ¼³¸íÇßµíÀÌ ÄÚÄÚ¾ÆÀÇ ¸ðµç Ŭ·¡½ºÀÇ ·çÆ® Ŭ·¡½º´Â NSObjectÀ̹ǷΠNSObject¿¡ Ä«Å×°í¸®·Î Ãß°¡µÈ ¸Þ½îµå´Â ¸ðµç ¿ÀºêÁ§Æ®¿¡ °øÅëÀ¸·Î »ç¿ëµÇ°Ô µÈ´Ù. Áï, ÀÚÄ© ¸Å¿ì À§ÇèÇÑ Äڵ尡 µÉ ¼ö ÀÖ´Ù. »ó¼ÓµÈ ¸ðµç Ŭ·¡½º¿¡¼­ ¿¹»óÄ¡ ¸øÇÑ µ¿ÀÛÀ» ¾ß±âÇÒ¼öµµ ÀÖ´Ù. ±×·¡µµ ¸¸ÀÏ ²À ÇØ¾ßÇÏ´Â °æ¿ì¿£ ·çÆ® Ŭ·¡½ºÀÇ super´Â ¾øÀ¸¹Ç·Î super·Î ¸Þ½ÃÁö¸¦ º¸³»Áö ¸øÇϸç(ÄÄÆÄÀÏ·¯°¡ ¿¡·¯¸¦ ³½´Ù) Ŭ·¡½º ¿ÀºêÁ§Æ®°¡ ·çÆ® Ŭ·¡½ºÀÇ ÀνºÅϽº ¸Þ½îµå¸¦ ½ÇÇà ÇÒ ¼ö Àִٴµ¥ ÁÖÀÇ ÇØ¾ß ÇÑ´Ù.(ÀϹÝÀûÀ¸·Î ÀνºÅϽºÈ­ µÇÁö ¾ÊÀº Ŭ·¡½º ¿ÀºêÁ§Æ®¿¡¼­ ¹Ù·Î ÀνºÅϽº ¸Þ½îµå¸¦ È£ÃâÇÒ ¼ö ¾ø´Ù. ÇÏÁö¸¸ Ưº°È÷ ·çÆ® Ŭ·¡½ºÀÇ ÀνºÅϽº ¸Þ½îµå´Â »ó¼Ó¹ÞÀº ´Ù¸¥ Ŭ·¡½º ¿ÀºêÁ§Æ®¿¡¼­µµ »ç¿ë ÇÒ ¼ö ÀÖ´Ù. ¸¸ÀÏ NSObjectÀÇ ÀνºÅϽº ¸Þ½îµå¸¦ ¹Ø¿¡¼­ ¿À¹ö¶óÀ̵ù ÇØ¹ö¸®¸é ÀÌ·¯ÇÑ Æ¯Â¡Àº »ç¶óÁø´Ù.)


Protocols

ÇÁ·ÎÅäÄÝÀº Ŭ·¡½º »ó¼Ó¿¡¼­ ¶³¾îÁ® ÀÖ´Â ¸Þ½îµå Á¤ÀÇ ¸®½ºÆ®¶ó°í ¸»ÇÒ ¼ö ÀÖ´Ù. Áï Ŭ·¡½º »ó¼ÓÀÇ °ü°è¿Í ¹«°üÇÏ°Ô ¶Ç, ƯÁ¤ Ŭ·¡½º Á¤ÀÇ¿Í ¹«°üÇÏ°Ô Å¬·¡½ºµé °£ÀÇ °øÅëÀûÀÎ ¸Þ½îµå¸¦ Á¤¸®ÇÒ ¼ö ÀÖ´Â ¸Þ½îµå ¸®½ºÆ® ÀΰÍÀÌ´Ù.(ÀÚ¹ÙÀÇ ÀÎÅÍÆäÀ̽º¿Í À¯»çÇÏ´Ù)

ÇÁ·ÎÅäÄÝÀÇ ÁÖ¿ëµµ


Å©°Ô µÎ°¡Áö ¸ñÀû¿¡¼­ ÇÁ·ÎÅäÄÝÀ» ÁÖ·Î »ç¿ëÇϴµ¥,
Çϳª´Â Ŭ·¡½º¸¦ ¾Ë ¼ö ¾ø´Â ¾î¶² °´Ã¼¸¦ ¹Þ¾Æ¼­ ±× °´Ã¼ÀÇ »ç¿ë¿©ºÎ¸¦ ÆÇ´ÜÇÒ ¶§ÀÌ´Ù.
¿¹¸¦ µé¾î ºÐ»ê °´Ã¼ ȯ°æ°ú °°Àº °æ¿ì, ´Ù¸¥ È£½ºÆ®¿¡¼­ ¼±¾ðµÇ°í »ý¼ºµÈ ¾î¶² °´Ã¼¸¦ ³×Æ®¿÷À» ÅëÇØ Àü´Þ¹Þ¾Æ ÀÌ °´Ã¼¸¦ »ç¿ëÇÒ ¶§ ÇÊ¿äÇÑ ÇÁ·ÎÅäÄÝÀ» ¸¸Á·ÇÏ´ÂÁö conformsToProtocol:¸Þ½îµå¸¦ ÀÌ¿ëÇØ È®ÀÎÇÑ ÈÄ »ç¿ëÇÏ°Ô µÈ´Ù.
¶Ç ´Ù¸¥ ÁÖ¿äÇÑ ¿ëµµ·Î ¾î¶² ¸ñÀûÀ» À§ÇØ ¹Ýµå½Ã ±¸ÇöÇØ¾ßÇÏ´Â ¸Þ½îµå ÁýÇÕÀ» ¼±¾ðÇÒ ¶§ÀÌ´Ù.
¿¹¸¦ µé¾î ÄÚÄÚ¾ÆÀÇ NSCodingÇÁ·ÎÅäÄÝÀº ÄÚÄÚ¾Æ °´Ã¼ÀÇ archiving mechanismÀ¸·Î ÀÌ ÇÁ·ÎÅäÄÝÀÇ ¸Þ½îµå¸¦ ¸ðµÎ ±¸ÇöÇØ¾ß ºñ·Î¼Ò archive°¡´ÉÇÑ °´Ã¼°¡ µÈ´Ù.

ÇÁ·ÎÅäÄÝÀÇ »ç¿ë

ÇÁ·ÎÅäÄÝÀÇ Á¤ÀÇ´Â ´ÙÀ½°ú °°ÀÌ ÇÒ ¼ö ÀÖ´Ù.
@protocol ProtocolName
method declarations
@end

¸¸ÀÏ ¾î¶² Ŭ·¡½º¸¦ ¼±¾ðÇÒ¶§ ÇÁ·ÎÅäÄÝÀ» Ãß°¡ÇÒ·Á¸é ¾Æ·¡¿Í °°ÀÌ ÇÑ´Ù.
@interface ClassName : ItsSuperclass <protocol list>

¶ÇÇÑ Ä«Å×°í¸®¿¡ ÇÁ·ÎÅäÄÝÀ» Ãß°¡ÇÒ ¼ö Àִµ¥ ¾Æ·¡¿Í °°ÀÌ ÇÏ¸é µÈ´Ù.
@interface ClassName (CatergoryName) <protocol list>

¸¸ÀÏ µ¿½Ã¿¡ ¿©·¯°³ÀÇ ÇÁ·ÎÅäÄÝÀ» Áö¿øÇÏ°Ô ÇÒ·Á¸é ÄÞ¸¶(,)¸¦ ³Ö¾î¼­ Ãß°¡ÇÒ ¼ö ÀÖ´Ù.
@interface Formatter : NSObject < Formatting, Prettifying >


ProtocolÀ» µû¸£´ÂÁö È®ÀÎ


¼Ò½ºÄڵ忡¼­ @protocol() directive¸¦ ÀÌ¿ëÇϹǷνá ÇÁ·ÎÅäÄÝ ¿ÀºêÁ§Æ®¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
Protocol *myProtocol = @protocol(MyProtocol);

¸¸ÀÏ ¾î¶² ¿ÀºêÁ§Æ®°¡ ÁÖ¾îÁö¸é conformsToProtocol: ¸Þ½ÃÁö¸¦ ¿ÀºêÁ§Æ®¿¡ º¸³»¼­ ÇÁ·ÎÅäÄÝÀ» µû¸£´ÂÁö È®ÀÎÇÒ ¼ö ÀÖ´Ù. °á±¹ conformsToProtocol: ¸Þ½ÃÁö¸¦ ÀÌ¿ëÇØ¼­ ±× ¿ÀºêÁ§Æ®°¡ ƯÁ¤ ÇÁ·ÎÅäÄÝÀ» µû¸£´ÂÁö È®ÀÎÇÑ ÈÄ¿¡ »ç¿ë ÇÒ ¼ö ÀÖ´Ù.
if ( [receiver conformsToProtocol:@protocol(MyProtocol)] ) {
	[receiver myMethod];
}

ÇÁ·ÎÅäÄÝÀÇ Æ¯Â¡

ÇÁ·ÎÅäÄÝÀº »ó¼ÓÀ̳ª Áßø ¼±¾ðµÇÁö ¸øÇÏ¸ç ¼±¾ðµÈ ¸ðµç ¸Þ½îµå´Â ±¸ÇöµÇ¾î¾ß ÇÑ´Ù. ¸¸ÀÏ ¸Þ½îµåµéÀ» ºÎºÐÀûÀ¸·Î »ç¿ëÇØ¾ß ÇÒ ¶§¿¡´Â µÚ¿¡ ³ª¿À´Â ÀÎÆ÷¸Ö ÇÁ·ÎÅäÄÝÀ» ÀÌ¿ëÇØ¾ß ÇÑ´Ù.

ÇÁ·ÎÅäÄÝ »ç¿ë¿¹

Ä«Å×°í¸®¶§¿Í ¸¶Âù°¡Áö·Î ÆÄ¿îµ¥ÀÌ¼Ç Åø·Î °£´ÜÈ÷ ÇÁ·ÎÅäÄÝÀÇ ÀÛµ¿À» º¸ÀÌ´Â ¿¹Á¦¸¦ ¸¸µé¾î º¸ÀÚ.
¸ÕÀú MyProtocol.h¸¦ ´ÙÀ½°ú °°ÀÌ ¸¸µç´Ù.
@protocol MyProtocol

- (void)myMethod;

@end
<MyProtocol.h>

ÀÌ MyProtocolÀ» ÁؼöÇÏ´Â ¸ðµç ¿ÀºêÁ§Æ®´Â myMethod¸¦ ±¸ÇöÇØ¾ßÇÑ´Ù.

NSObject¸¦ »ó¼Ó¹ÞÀº MyObject¸¦ ¸¸µé Â÷·ÊÀÌ´Ù.
#import <Foundation/Foundation.h>
#import "MyProtocol.h"

@interface MyObject : NSObject <MyProtocol>
{

}

@end
<MyObject.h>

NSObject¸¦ »óȤ ¹ÞÀº ÈÄ ¾Æ¹« ³»¿ëÀ» Ãß°¡ÇÏÁö ¾Ê¾Ò´Ù. (½ÇÁ¦·Î´Â ÀÌ·¸°Ô ÇÏÁö´Â ¾ÊÀ»°ÍÀÌ´Ù.) ´ÜÁö Â÷À̰¡ ÀÖ´Ù¸é MyProtocolÀ» ÁؼöÇÒ°ÍÀ̶ó°í ¼±¾ðÇÑ°Í »ÓÀÌ´Ù.
#import "MyObject.h"


@implementation MyObject

- (void)myMethod
{
    NSLog(@"My Method");
}

@end
<MyObject.m>

±¸Çö¿¡¼­µµ ¿ª½Ã MyProtocol¿¡ Á¤ÀÇµÈ myMethod¸¸À» ±¸ÇöÇß´Ù.
¿©±â¼­ ÁÖÀÇ ÇÒÁ¡Àº ÇÁ·ÎÅäÄÝ¿¡ Á¤ÀÇµÈ ¸ðµç ¸Þ½îµå¸¦ ±¸ÇöÇÏÁö ¾ÊÀ¸¸é ½ÇÇà½Ã°£¿¡ ¾ø´Â ¸Þ½îµå¸¦ ã´Ù°¡ ÀͼÁ¼ÇÀ» ¹ß»ý½Ã۴µ¥ ÀÌ °æ¿ì ¸Þ½îµå ³»ÀÇ ³²Àº ºÎºÐÀ» ó¸®ÇÏÁö ¾Ê°í ºüÁ®³ª¿Í¼­ ¹ö±×¸¦ ¹ß»ý½Ãų ¼ö ÀÖÀ¸³ª -conformsToProtocol:¸Þ½ÃÁö¿¡ ÀÇÇØ ÇÁ·ÎÅäÄÝ °Ë»ç¸¦ ÇÒ¶§ ½ÇÆÐÇϱ⠶§¹®¿¡ ²À È®ÀÎÀ» ÇØÁÖ°í »ç¿ëÇÏ´Â°Ô ÁÁ´Ù.
ÀÌ °æ¿ì ÄÄÆÄÀÏ Å¸ÀÓ¿¡¼­´Â ¿ö´×À» ³»¹Ç·Î ²Ä²ÄÇÏ°Ô »ìÆìºÁ¾ß ÇÒ °ÍÀÌ´Ù.
#import <Foundation/Foundation.h>
#import "MyObject.h"

int main (int argc, const char * argv[])
{
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    id myObject = [[MyObject alloc] init];
    id nsObject = [[NSObject alloc] init];
    
    if ( [myObject conformsToProtocol:@protocol(MyProtocol)] ) {
        [myObject myMethod];
    }
    if ( [nsObject conformsToProtocol:@protocol(MyProtocol)] ) {
        [nsObject myMethod];
    }
    
    
    [myObject release];
    [nsObject release];
    [pool release];
    return 0;
}
<main.m>

¸¶Áö¸·À¸·Î main.mÀÇ ±¸ÇöÀÌ´Ù. ºñ±³¿¹¸¦ µé±â À§Çؼ­ MyObject(MyProtocol ÇÁ·ÎÅäÄÝ Áؼö)¿Í NSObject(MyProtocolÀ» ÁؼöÇÏÁö ¾ÊÀ½)¸¦ °°ÀÌ »ý¼ºÇÑ ´ÙÀ½ -conformsToProtocol: ¸Þ½ÃÁö¸¦ ÀÌ¿ëÇØ¼­ myMethod¸¦ ºÒ·¯ÁÖ°Ô Çß´Ù.
»ý¼ºµÈ °´Ã¼°¡ Á¤È®È÷ ¹ºÁö ¸ð¸¥´Ù´Â°ÍÀ» º¸À̱â À§Çؼ­ idŸÀÔÀ¸·Î ij½ºÆÃ Çß´Ù. ½ÇÇà°á°ú¸¦ º¸¸é myObjectÀÇ myMethod´Â ºÒ¸®Áö¸¸ nsObject¿¡¼­´Â myMethod¸¦ ºÎ¸£Áö ¾Ê´Â´Ù.
¸¸ÀÏ MyObject ÀÌ¿ÜÀÇ ¶Ç ´Ù¸¥ MyProtocolÀ» ÁؼöÇÏ´Â °´Ã¼¿¡ ´ëÇØ¼­´Â ¸Þ¼Òµå¸¦ È£Ãâ ÇÒ °ÍÀÌ´Ù.


Informal Protocols

ÇÁ·ÎÅäÄÝÀ» ÀÌ¿ëÇÏÁö ¾Ê°í Ä«Å×°í¸®¸¦ ¼±¾ðÇÏ°í ±¸ÇöÇÏÁö ¾Ê´Â ¹æ¹ýÀ¸·Î ÇÁ·ÎÅäÄݰú ºñ½ÁÇÑ ±â´ÉÀ» ±¸Çö ÇÒ ¼öµµ ÀÖ´Ù. À̰ÍÀ» ÀÎÆ÷¸Ö ÇÁ·ÎÅäÄÝÀ̶ó°í Çϴµ¥ ¸ðµç ¼­ºêŬ·¡½Ì µÈ Ŭ·¡½ºµé¿¡¼­ ±¸ÇöÇØµµ µÇ°í ÇÏÁö ¾Ê¾Æµµ µÉ ¸Þ½îµå ±×·ìÀ» Á¤ÀÇ Çϴµ¥ ÀÌ¿ëÇÑ´Ù.
ÀÎÆ÷¸Ö ÇÁ·ÎÅäÄÝÀº ÈçÈ÷ NSObjectÀÇ Ä«Å×°í¸®·Î ¼±¾ðµÇ´Âµ¥ NSObject¿¡¼­ »ó¼ÓµÈ ¸ðµç Ŭ·¡½º¿¡ ±¤¹üÀ§ÇÏ°Ô ¿µÇâÀ» ¹ÌÄ¡°Ô µÈ´Ù. ±×·¡¼­ ÀϹÝÀûÀÎ ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇϴµ¥¿¡ »ç¿ëÇϴ°ÍÀº ÇÇÇϴ°ÍÀÌ ÁÁ°í, ¸ðµç ¸Þ½îµåÀÇ ±¸ÇöÀ» ¼±ÅÃÀûÀ¸·Î ÇÒ ¼ö Àֱ⠶§¹®¿¡ µô¸®°ÔÀÌÆ® ó¸® °°Àº ºÎºÐ¿¡¼­ »ç¿ëµÈ´Ù.

¿¹µé µé¸é, ÄÚÄÚ¾ÆÀÇ NSTableDataSourceÇÁ·ÎÅäÄÝÀº informal protocolÀÌ´Ù. ÀÌ´Â ´ÙÀ½°ú °°ÀÌ ¼±¾ðµÇ¾îÀÖ´Ù.
@interface NSObject(NSTableDataSource)
- (int)numberOfRowsInTableView:(NSTableView *)tableView;
- (id)tableView:(NSTableView *)tableView 
   objectValueForTableColumn:(NSTableColumn *)tableColumn row:(int)row;
// optional
- (void)tableView:(NSTableView *)tableView setObjectValue:(id)object 
   forTableColumn:(NSTableColumn *)tableColumn row:(int)row;

// optional - drag and drop support
- (BOOL)tableView:(NSTableView *)tv writeRows:(NSArray*)rows 
   toPasteboard:(NSPasteboard*)pboard;
    // This method is called after it has been determined that a drag should begin, 
    // but before the drag has been started.  To refuse the drag, return NO.  
    // To start a drag, return YES and place the drag data onto the pasteboard 
    // (data, owner, etc...).  
    // The drag image and other drag related information will be set up and 
    // provided by the table view once this call returns with YES.  
    // The rows array is the list of row numbers that will be participating in the drag.

- (NSDragOperation)tableView:(NSTableView*)tv 
   validateDrop:(id <NSDraggingInfo>)info proposedRow:(int)row
   proposedDropOperation:(NSTableViewDropOperation)op;
    // This method is used by NSTableView to determine a valid drop target.  
    // Based on the mouse position, the table view will suggest a proposed drop location. 
    // This method must return a value that indicates which dragging operation 
    // the data source will perform.  
    // The data source may "re-target" a drop if desired by calling 
    // setDropRow:dropOperation: and returning something other than
    // NSDragOperationNone.  One may choose to re-target for various reasons 
    // (eg. for better visual feedback when inserting into a sorted position).

- (BOOL)tableView:(NSTableView)tv acceptDrop:(id <NSDraggingInfo>)info 
   row:(int)row dropOperation:(NSTableViewDropOperation)op;
    // This method is called when the mouse is released over an outline view that 
    // previously decided to allow a drop via the validateDrop method.  The data source 
    // should incorporate the data from the dragging pasteboard at this time.

@end

informal protocolÀÌ ·çƮŬ·¡½ºÀÎ NSObjectŬ·¡½º¿¡ Ä«Å×°í¸®·Î ºÙ¿©³õÀº ÀÌÀ¯´Â ¾î¶² Ŭ·¡½º¿¡¼­µµ ÀÌ Ä«Å×°í¸®ÀÇ ¸Þ½îµå¸¦ ±¸ÇöÇÒ ¼ö ÀÖµµ·Ï Çϱâ À§Çؼ­ÀÌ´Ù. ¸¸¾à MyDataSource¶ó´Â Ŭ·¡½º°¡ ÀÌ ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇÏ°í ½ÍÀ¸¸é ±×³É MyDataSourceŬ·¡½º¿¡ À§¿¡¼­ ¼±¾ðµÈ ¸Þ½îµåµéÀ» ±¸ÇöÇØÁֱ⸸ ÇÏ¸é µÈ´Ù.
ÀÌ NSTableDataSource informal protocolÀÇ °æ¿ì´Â ¼±¾ðµÈ ¸Þ½îµåµéÁß Ã³À½ÀÇ µÎ ¸Þ½îµå´Â ¹Ýµå½Ã ±¸ÇöÇØ¾ßÇÏÁö¸¸ ³ª¸ÓÁö ¸Þ½îµåµéÀ» Çʿ信 µû¶ó ±¸ÇöÇØ ÁÖ¸é µÈ´Ù. Áï, ¼¼¹øÂ° ¸Þ½îµå´Â Å×ÀÌºí µ¥ÀÌÅÍ °»½ÅÀÌ ÇÊ¿äÇÒ °æ¿ì¿¡¸¸ ±¸ÇöÇÏ¸é µÇ°í, ³ª¸ÓÁö ¼¼ ¸Þ½îµåµéÀº µå·¡±×¾Øµå·ÓÀÇ Áö¿ø¿©ºÎ¿¡ µû¶ó ±¸ÇöÇØÁÖ¸é µÈ´Ù.

Link to this Page

  • Objective-C last edited on 9 May 2006 at 1:40 pm by 210.217.95.227

Since 2001, OSXDEV.ORG