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

Objective-C ±âÃÊ

0. ½ÃÀÛÇϱâ Àü¿¡

1) MacOS X¿¡¼­ÀÇ °³¹ß¿¡ ´ëÇÑ °³¿ä

ÀÌ ¿¬Àç´Â ÁÖ·Î ÄÚÄھƿ¡ ´ëÇØ¼­ ´Ù·ê °ÍÀÌ´Ù. »ç¶÷µéÀÌ ³ó´ãó·³ ¸¶½Ã´Â ÄÚÄÚ¾Æ ¾Æ´Ï³Ä°í À̾߱â Çϱ⵵ ÇÏÁö¸¸ ±×°ÍÀ» ¸»Çϴ°ÍÀº ¾Æ´Ï´Ù.(Á¤È®ÇÑ ¹ßÀ½Àº "ÄÚÄÚ"¿¡ °¡±õ´Ù.) ÄÚÄھƴ MacOS XÀÇ ÇÙ½É ÇÁ·¡ÀÓ¿÷À» ¸»Çϸç ÄÚÄÚ¾ÆÀÇ À§Ä¡´Â MacOS X ȯ°æ¼Ó¿¡¼­ ¾Æ·¡ ±×¸²¿¡¼­ ã¾Æ º¼ ¼ö ÀÖ´Ù.


(±×¸² 1) Mac OS X ½Ã½ºÅÛ ·¹À̾î

Darwin, Áï Ä¿³ÎÀº ÇöÀç ¾ÖÇÿ¡¼­ ¿ÀǼҽº·Î ³»³õ¾ÒÀ¸¸ç ±×°Í¿¡ ´ëÇÑ ÀÚ·á´Â http://developer.apple.com/darwin/ ¿¡¼­ ã¾Æ º¼ ¼ö ÀÖ´Ù. À̰ÍÀº Mach 3.0À» ±â¹ÝÀ¸·Î ÇÑ BSDÀÇ ÇÑ Á¾·ù·Î¼­ FreeBSD¿¡ ±â¹ÝÀ» µÎ°í ÀÖÀ¸¸ç ¸ÅŲÅä½Ã »Ó¸¸ ¾Æ´Ï¶ó x86 Ç÷§Æû¿¡¼­µµ ÀÛµ¿ÇÑ´Ù. ¹°·Ð ±×·¸´Ù°í ÇØ¼­ MacOS XÀÌ x86Ç÷§Æû¿¡¼­µµ µ¹¾Æ°£´Ù´Â À̾߱â´Â ¾Æ´Ï´Ù. ´ÜÁö DarwinÀÌ ±×·¸´Ù´Â°ÍÀÌ´Ù. ´ÙÀ©Àº MacOS XÀÇ ÇÑ ºÎºÐÀÏ »ÓÀÌ´Ù.(Á¤È®ÇÏ°Ô ´ÙÀ©Àº Ä¿³Î°ú BSD·¹À̾ Æ÷ÇÔÇÑ °ÍÀ» ¸»ÇÑ´Ù. ÇÊ¿äÇÏ´Ù¸é XFree86À» ¼³Ä¡Çؼ­ »ç¿ë ÇÒ ¼ö ÀÖ´Ù.)
MacOS XÀº DarwinÀ§¿¡ ÄõÃ÷, ÄüŸÀÓ, Ä«º», ÄÚÄÚ¾Æ, ÀÚ¹ÙVM°ú °°Àº ¿ä¼ÒµéÀ» ¾ñ¾î ³õÀº°ÍÀ¸·Î MacOS XÀÇ °¡Àå ÇÙ½ÉÀûÀÎ °³¹ß ÇÁ·¡ÀÓ¿÷Àº Cocoa¿Í CarbonÀ¸·Î ³ª´©¾î Áø´Ù.
CarbonÀº ¿¹Àü Toolbox API¼ÂÀ¸·Î ºÎÅÍ ¹ßÀüÇÑ °ÍÀ¸·Î CÄÚµå·Î µÇ¾îÀÖÀ¸¸ç ¸ÅŲÅä½ÃÀÇ ·¹°Å½Ã ÄÚµåÀÇ ÀçȰ¿ëÀ» À§Çؼ­ ¸¸µé¾îÁø °ÍÀ̰í Cocoa´Â NeXTSTEPÀ¸·Î ºÎÅÍ ¿Â °ÍÀ¸·Î ´ëºÎºÐ °³¹ßÀڵ鿡°Ô´Â Á¶±Ý »ý¼ÒÇÑ Objective-C·Î ¸¸µé¾îÁø ÇÁ·¡ÀÓ¿÷ÀÌ´Ù.
ÀÌ¹Ì ¾Ë·ÁÁø ´ë·Î MacOS XÀº NeXTSTEP + MacOS·Î ÀÌ·ç¾îÁø OSÀÌ´Ù.
NeXTSTEPÀ¸·Î ºÎÅÍ ¿Â Ư¡µé·Î´Â Mach, BSD ·¹À̾î, Cocoa°°Àº °ÍµéÀ̰í MacOS·Î ºÎÅÍ ¿Â Ư¡µé·Î´Â QuickTime, Carbon°°Àº ºÎºÐµéÀÌ ÀÖ´Ù.
±× ¿Ü¿¡ Ä¿³Î ÀͽºÅÙ¼ÇÀ̳ª Quartz, Aqua, Java´Â »õ·Ó°Ô ÀçÀÛ¼ºµÈ ºÎºÐµéÀÌ´Ù.

ÀÌ·¸°Ô µÎ°íº¸¸é MacOS X¿¡¼­ °³¹ßÀ» ÁøÇàÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀÌ º¸ÀδÙ.

¨ç ¸ÕÀú BSD·¹À̾ ÀÌ¿ëÇÑ C/C++ÄÚµùÀÌ °¡´ÉÇÏ´Ù. À̰ÍÀº BSD¿¡¼­ ÇÁ·Î±×·¡¹ÖÀ» Çϴ°Ͱú °°Àº ȯ°æÀ» Á¦°øÇØÁØ´Ù. Áï, BSD ½Ã½ºÅÛ ÄÝÀ» ¶È°°ÀÌ Á¦°øÇØÁشٴ °ÍÀε¥ °³¹ß Åø·Î´Â gcc, gdb°¡ Á¦°øµÇ°í vi, emacs°°Àº ÆíÁýÅøµµ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

¨è ¶ÇÇÑ Java SE 1.4.1À» OS¿¡¼­ ±âº»ÀûÀ¸·Î Á¦°øÇÏ¹Ç·Î½á ±âÁ¸ÀÇ ÀÚ¹ÙÄڵ带 ¼öÁ¤¾øÀÌ ¹Ù·Î »ç¿ëÇÏ°Ô ÇØÁØ´Ù. À̰ÍÀº ³ªÁß¿¡ À̾߱â ÇÒ ÀÚ¹Ù-ºê¸´Áö¿Í´Â Á¶±Ý ´Ù¸£°Ô pure Java¸¦ ¸»ÇÑ´Ù.

¨é ±×¸®°í ±âÁ¸ÀÇ MacOS¿¡¼­ ÀÛ¼ºµÈ Äڵ带 Áö¿øÇϱâ À§Çؼ­ CarbonÀÌ Á¦°øµÈ´Ù. CarbonÀº C·Î ÀÌ·ç¾îÁø API·Î (°¡²û C++·Î µÇ¾îÀÖ´Ù°í ¾Ë·ÁÁö°í ÀÖÁö¸¸ À߸øµÈ À̾߱âÀÌ´Ù) À©µµ¿ìÀÇ Win32 API¿Í »ó´çÈ÷ À¯»çÇÏ´Ù. (MS-WindowsÀÇ API¼ÂÀº MacOS Toolbox API ¼ÂÀ» ¸¹ÀÌ Âü°íÇß´Ù.) À̰ÍÀ» »ç¿ëÇϱâ À§ÇØ »ç¿ë°¡´ÉÇÑ Åø·Î´Â ¾ÖÇÃÀÌ Á¦°øÇÏ´Â ÇÁ·ÎÁ§Æ® ºô´õ(¹«·áÀÌ´Ù!, Áö³­ 6¿ù ¸»¿¡ ÀÖ¾ú´ø WWDC¿¡¼­ ÇÁ·ÎÁ§Æ® ºô´õ´Â XCode¶ó´Â »õ·Î¿î À̸§À» °¡Áö°í ³ªÅ¸³µ´Ù. ÀÌ ¿ø°í°¡ WWDC ÀÌÀü¿¡ ¾²¿©Á® À־ ÀÏ´Ü ÇÁ·ÎÁ§Æ® ºô´õ¶õ ¸íĪÀ» »ç¿ëÇϰÚÁö¸¸ XCode¿Í °°´Ù°í »ý°¢ÇÏ¸é µÈ´Ù.)¿Í Metrowerks»ç°¡ ÆÇ¸ÅÇÏ´Â ÄÚµå¿ö¸®¾î(Code Warrior)¶ó´Â Á¦Ç°ÀÌ ÀÖ´Ù. °¢°¢Àº Àå´ÜÁ¡ÀÌ Àִµ¥ ÇÁ·ÎÁ§Æ® ºô´õ´Â ¹«·áÀÎÁ¡°ú ±ò²ûÇÑ ±¸¼º ±×¸®°í ¸®¼Ò½º(Á¤È®ÇϰԴ Nib)ÆíÁý¿¡ °­Á¡À» º¸ÀδÙ. ÄÚµå¿ö¸®¾î´Â ÆÄ¿öÇ÷£Æ®¶ó´Â C++ÇÁ·¡ÀÓ¿÷°ú (MFC¿Í °°Àº À§Ä¡¿¡ ÀÖ´Ù°í º¸¸é µÈ´Ù.) Classic(MacOS XÀÌÀüÀÇ MacOS)¿ë ¾ÖÇø®ÄÉÀÌ¼Ç °³¹ßÀ» Áö¿øÇÏ°í °¢Á¾ ÆíÀǸ¦ À§ÇÑ ±â´ÉµéÀÌ Á¦°øµÈ´Ù.
ÄÚµå¿ö¸®¾î´Â À©µµ¿ì¿Í ¸®´ª½º °³¹ßÀڵ鿡°Ô´Â Àͼ÷ÇÑ Á¦Ç°ÀÌ ¾Æ´ÏÁö¸¸ ÆÊÀ̳ª ¸Æ ¶Ç´Â ÀÓº£µðµå °³¹ßÀڵ鿡°Ô´Â »ó´çÈ÷ Àͼ÷ÇÑ Á¦Ç°ÀÌ´Ù.

¨ê ¸¶Áö¸·À¸·Î Cocoa, ÄÚÄھƴ NeXTSTEPÀ¸·Î ºÎÅÍ ¿Â °ÍÀ¸·Î Objective-C·Î µÇ¾îÀÖÀ¸¸ç ¿¹ÀüÀÇ NeXTSTEP API¸¦ »ó´çÈ÷ ±×´ë·Î º¸Á¸Çϰí ÀÖ´Ù. (ÇÊÀÚ´Â À̰ÍÀÌ ¼³°è°¡ ¾ó¸¶³ª Àß µÇ¾ú¾ú´ÂÁö¸¦ ¹ÝÁõÇÑ´Ù°í »ý°¢ÇÑ´Ù.) ÄÚÄھƷΠ°³¹ßÇϱâ À§Çؼ­´Â ÇÁ·ÎÁ§Æ® ºô´õ³ª ÄÚµå¿ö¸®¾î¸¦ »ç¿ëÇÒ ¼ö Àִµ¥ ÇÁ·ÎÁ§Æ® ºô´õ¸¦ »ç¿ëÇϱ⸦ ±ÇÇÑ´Ù. »ç½Ç ÄÚµå¿ö¸®¾îÀÇ ÀÚÀßÇÑ ºÎ°¡±â´Éµé, °³¹ßÀÚÀÇ °¡·Á¿î ºÎºÐÀ» ±Ü¾îÁÖ´ø ±× ±â´ÉµéÀÌ Objective-CÄڵ忡¼­´Â ÀÛµ¿ÇÏÁö ¾Ê´Â´Ù!

¿©±â¼­´Â ºüÁ®ÀÖÁö¸¸ Mach·¹º§ÀÇ Ä¿³ÎÀͽºÅÙ¼ÇÀ» ÀÛ¼ºÇϱâ À§Çؼ­´Â C++¸¦ »ç¿ëÇÑ´Ù. ÀÌ°Í ¿ª½Ã ÇÁ·ÎÁ§Æ® ºô´õ·Î °¡´ÉÇÏ´Ù.

±×·±µ¥ ¿Ö »ç¿ëÀÚµµ ÀûÀº MacOS¿¡¼­ ÁÖ·ù¾ð¾îµµ ¾Æ´Ñ Objective-C¸¦ ÀÌ¿ëÇÑ °³¹ß¿¡ ´ëÇØ¼­ À̾߱â ÇÒ±î? ¿Ö ±×°ÍÀ» ¹è¿ì´Â°ÍÀÌ ÁÁ´Ù°í À̾߱â Çϴ°ÍÀϱî? »ç½Ç À̺κп¡ ´ëÇÑ ³í¶õÀº ¸¹ÀÌ ÀÖ¾ú´Ù.
¸ÕÀú ÇÊÀÚ´Â ÄÚÄھƸ¦ ÇѹøÂëÀº °øºÎÇØµÎ¸é ÁÁÀ»°Í °°´Ù°í »ý°¢ÇÑ´Ù. ±âÁ¸ÀÇ ´Ù¸¥ ÇÁ·¡ÀÓ¿÷ º¸´Ù ÈξÀ Àß µÇ¾îÀÖÀ¸¹Ç·Î À̰ÍÀ» Çѹø º½À¸·Î½á ´Ù¸¥ ȯ°æ¿¡¼­µµ ´õ ÁÁÀº Äڵ带 ¸¸µé¾î ³¾ ¼ö ÀÖ´Ù°í »ý°¢Çϱ⠶§¹®ÀÌ´Ù.
¶Ç ÇѰ¡Áö ¿Ö C++/Java°¡ ¾Æ´Ñ Objective-CÀΰ¡? ÀÌ ºÎºÐ¿¡ ´ëÇØ¼­µµ ¸»µéÀÌ ¸¹¾ÒÁö¸¸ ÇÊÀÚÀÇ Ä£ÇÑ ÈĹèÀÇ ¸»À» ºô·Á ±× Ÿ´ç¼ºÀ» À̾߱â ÇÏ°í ½Í´Ù.
"ÆÛÆ÷¸Õ½º¸¦ ¸¹ÀÌ Èñ»ýÇÏÁö ¾ÊÀ¸¸é¼­µµ ´ÙÀ̳ª¹ÍÇÏ°í ½ÉÇÃÇÑ µðÀÚÀÎÀ» º°·Î ¾î·ÆÁö ¾Ê°Ô À¯ÁöÇÒ ¼ö Àֱ⠶§¹®"
¾Æ¸¶ ÀÌ ¸»ÀÌ Á¤´ä¿¡ °¡±î¿ïÁö ¸ð¸£°Ú´Ù.


2) Áø½Ç°ú °ÅÁþ¸»

¸¹Àº °³¹ßÀÚµéÀÌ µÉ ¼ö ÀÖÀ¸¸é ÆíÇÑ °³¹ßȯ°æÀ» ¿øÇϰí ÀÖ´Ù. ´Ù¸¥ °³¹ßÀÚµé°ú À̾߱âÇØº¸¸é ÃÖ´ëÇÑ ¸¹Àº Äڵ带 °³¹ßÅøÀÌ ÀÚµ¿À¸·Î »ý¼ºÇØÁֱ⸦ ¹Ù¶ó°í ÀÖ´Ù´Â °ÍÀ» ½±°Ô º¼ ¼ö ÀÖ´Ù.
±×·± °³¹ßÀڵ鿡°Ô ÇÁ·ÎÁ§Æ® ºô´õ¿Í ÀÎÅÍÆäÀ̽º ºô´õ·Î ´ëº¯µÇ´Â MacOS XÀÇ °³¹ßȯ°æÀ» º¸¿©ÁÖ¸é »ó´çÈ÷ °ü½ÉÀ» °¡Áø´Ù. ¸¶Ä¡ À̰ÍÀ¸·Î °³¹ßÀ» ÇϰԵǸé Äڵ带 °ÅÀÇ ¾µ ÀÏÀÌ ¾øÀ»°Í °°¾Æ º¸À̱⠶§¹®ÀÌ´Ù.
¹°·Ð À©µµ¿ì¿¡¼­ µ¹¾Æ°¡´Â ºñÁê¾ó º£ÀÌÁ÷À̳ª µ¨ÆÄÀÌ °°Àº Åøµéµµ ±×·± ȯ»óÀ» ½É¾î ÁØ ÀûÀÌ ÀÖ´Ù. ȯ»óÀº ȯ»óÀÏ»Ó!
¿ª½Ã ÄÚÄÚ¾Æ ÇÁ·¡ÀÓ¿÷À» ÀÌ¿ëÇÑ °³¹ß ¿ª½Ã ±×·¯ÇÏ´Ù. "Àú´Â Cµµ Àß ¸ð¸£´Âµ¥¿ä ÄÚÄھƷΠÇÁ·Î±×·¥À» ¸¸µé ¼ö ÀÖÀ»±î¿ä?" ÀÌ·± Áú¹®À» ÀÚÁÖ º¼ ¼ö ÀÖ´Ù. ´ë´äÀº ¹°·Ð ¸¸µé ¼ö ÀÖ´Ù. ÇÏÁö¸¸ ½Ç»ó ±×°ÍÀº ±× »ç¶÷ÀÌ ÀÛ¼ºÇÑ ÇÁ·Î±×·¥ÀÌ ¾Æ´Ï´Ù! ´ÜÁö ³²ÀÌ ¸¸µé¾î ³õÀº°ÍÀ» ±×³É ¾ÖÇø®ÄÉÀ̼ÇÀÇ ÇüÅ·ΠÆ÷ÀåÇÏ´Â°Í ¿Ü¿¡´Â ¾Æ¹«°Íµµ ¾Æ´Ï´Ù.
ÄÚÄھƸ¦ ¾²±â À§Çؼ­´Â ±âº»ÀûÀ¸·Î Objective-C¸¦ »ç¿ëÇÑ´Ù. Objective-C´Â CÀÇ super setÀ¸·Î Objective-C¸¦ »ç¿ëÇϱâ À§Çؼ­´Â C¸¦ ¾Ë¾Æ¾ß ÇÑ´Ù. ¼Õ¾È´ë°í ÄÚÇ®·Á°í ÇÏÁö ¸»ÀÚ!
±×·¸´Ù¸é ÄÚÄھƷΠ°³¹ßÀ» Çϴ°ÍÀÌ ÁøÂ¥ ½¬¿ï±î? õ¸¸¿¡, ±×°Ç Àý´ë ¾Æ´Ï´Ù.
±âÁ¸ÀÇ °³¹ßÀÚµéÀº Objective-C¿Í ÄÚÄھƿ¡ ´ëÇØ¼­ »ó´çÈ÷ ³­°¨ÇØÇÑ´Ù. ±×·¯³ª Àͼ÷ÇØÁö¸é ´Ù¸¥ ÇÁ·¡ÀÓ¿÷º¸´Ù ¶Ù¾î³­ °³¹ß ÆÛÆ÷¸Õ½º¸¦ Á¦°øÇØÁØ´Ù. ÄÚÄھƴ ³ë·ÂÇÑ ÀÚ¿¡°Ô¸¸ °á½ÇÀ» °¡Á®´Ù ÁØ´Ù!
¸¸ÀÏ ÄÚÄھƸ¦ óÀ½ Á¢ÇÑ °³¹ßÀÚ°¡ Smalltalk°³¹ßÀÚ¶ó¸é ±×¸®°í C¸¦ ¾î´ÀÁ¤µµ ¾Ë°í ÀÖ´Ù¸é ÈξÀ Á¢±ÙÇÏ±â ÆíÇÒ °ÍÀÌ´Ù. Objective-C´Â C¿¡´Ù°¡ Smalltalk¿¡¼­ ºô·Á¿Â °´Ã¼µé¿¡ ´ëÇÑ °³³äÀ» ³Ö¾îµÎ¾ú±â ¶§¹®ÀÌ´Ù. ±×·¡¼­ ½ÅÅØ½º°¡ ½º¸ôÅå°ú »ó´çÈ÷ À¯»çÇÏ´Ù.

3) Objective-C

Objective-C´Â Brad J. Cox°¡ SmalltalkÀÇ Æ¯Â¡µéÀ» C¿¡ Ãß°¡Çؼ­ ¸¸µç ¾ð¾îÀÌ´Ù. ¿ø·¡ StepStoneÀ̶õ ȸ»ç¸¦ Â÷·Á¼­ Objective-CÄÄÆÄÀÏ·¯¸¦ ¸¸µé¾úÁö¸¸ ±×°ÍÀ» NeXT»ç¿¡¼­ ¶óÀ̼¾½º¸¦ ¹Þ¾Æ NeXTSTEP¿¡ ³ÖÀ¸¹Ç·Î½á º»°ÝÀûÀ¸·Î »ç¿ëµÇ±â ½ÃÀÛÇß´Ù. ±×¸®°í ÈÄ¿¡ Dennis Glatting°ú Richard StallmanÀÌ GCC¿¡ Objective-C ·±Å¸ÀÓÀ» Ãß°¡ÇÏ°Ô µÈ´Ù. À̰ÍÀº ÇöÀç ¸®´ª½º¿¡ ±ò·ÁÀÖ´Â gcc¿¡¼­ »ç¿ëÀÌ °¡´ÉÇÏ´Ù. ±×¸®°í ¾ÖÇÿ¡¼­µµ ÀÌ gcc¸¦ MacOS X¿¡¼­ »ç¿ë ÁßÀÌ´Ù. ¹°·Ð ÇÁ·ÎÁ§Æ® ºô´õ¿¡¼­ »ç¿ëÇÏ´Â ÄÄÆÄÀÏ·¯µµ gccÀÌ´Ù.

4) °³¹ßȯ°æ ±¸Ãà

ÄÚÄÚ¾Æ ¶Ç´Â ³ÏÀº ¹üÀ§¿¡¼­ OpenStepÀÇ °³¹ß¿¡ ´ëÇØ °øºÎÇϱâ À§Çؼ­´Â °¡Àå ÁÁÀº ¹æ¹ýÀº ¸ÅŲÅä½Ã¿¡ MacOS XÀ» »ç¿ëÇϴ°ÍÀÌ´Ù. ±×·¯³ª ¸¸ÀÏ µ¶ÀÚ ¿©·¯ºÐÀÌ ºñ·Ï ¸ÅŲÅä½Ã¸¦ °¡Áö°í ÀÖÁö ¾Ê¾Æµµ ÄÚÄÚ¾Æ ¶Ç´Â Objective-C¿¡ ´ëÇØ °ü½ÉÀÌ ÀÖ´Ù¸é GNUstep À» ¹æ¹®Çغ¸±â¸¦ ¹Ù¶õ´Ù. GNUstepÀº ¿ÀǼҽº·Î OpenStepÀ» ±¸ÇöÇϰí ÀÖ´Ù. À̰ÍÀº ½ÇÁ¦ ÄÚÄÚ¾Æ¿Í °ÅÀÇ À¯»çÇÑ ÇüÅÂÀε¥ ¸®´ª½º¸¦ ±â¹ÝÀ¸·Î Çϱ⠶§¹®¿¡ x86¿¡¼­µµ ÃæºÐÈ÷ Å×½ºÆ® ÇØº¼ ¼ö ÀÖ´Ù. ¶ÇÇÑ GNUstepÀ¸·Î °³¹ßÇÑ ÇÁ·Î±×·¥Àº 80%ÀÌ»ó MacOS X¿¡¼­ ¼Ò½ºÄÚµå ·¹º§ÀÇ È£È¯¼ºÀ» Áö´Ñ´Ù. GNUstepÀº ´Ü¼øÈ÷ ÇÁ·¡ÀÓ¿÷À» Á¦°øÇÏ´Â ¼öÁØÀÌ ¾Æ´Ï¶ó ¾ÖÇÃÀÇ ÇÁ·ÎÁ§Æ® ºô´õ¿¡ ÇØ´çÇÏ´Â ProjectCenter¿Í ÀÎÅÍÆäÀ̽º ºô´õ¿¡ ÇØ´çÇÏ´Â Gorm Interface Builder¸¦ Á¦°øÇÑ´Ù. ÇöÀç ÀÛ¾÷ ¼öÁØÀº ¶óÀ̺귯¸®µé¿¡ ´ëÇØ¼­´Â À¯Àú ·¹º§±îÁö ÁøÇàµÇ¾ú°í °³¹ßÅøµéÀº º£Å¸¸±¸®Áî ±îÁö µÈ »óÅÂÀÌ´Ù. Âü°í : http://www.gnustep.org/information/progress.html
OpenStepÀÚü°¡ óÀ½ºÎÅÍ ±Ô¾àÀ̾ú±â ¶§¹®¿¡ ´Ù¾çÇÑ Ç÷§Æû¿¡¼­ Áö¿øµÉ ¼ö ÀÖ°í (OpenStepÀº ¸Æ°ú À©µµ¿ì, ¼Ö¶ó¸®½º¿¡¼­ ÀÛµ¿Çß´Ù) GNUstepÀº OpenStepÀÇ ±¸ÇöÀ̱⠶§¹®¿¡ ÀÌ ¿ª½Ã ´Ù¾çÇÑ Ç÷§ÆûÀ» Áö¿øÇÑ´Ù.
´ÙÀ©, µ¥ºñ¾È, FreeBSD, RedHat, Yellowdoc, LinuxPPC, Irix, MkLinkx, NetBSD, OpenBSD, Slackware, Solaris, Suse, Unixware, Windows with CYGWIN, Widnows with MinGWµîÀÌ ±×°ÍÀÌ´Ù.




1. Objective-C ÀÇ Æ¯Â¡


ÀÏ´Ü Objective-CÀÇ Áß¿äÇÑ Æ¯Â¡µé¿¡ ´ëÇØ¼­ ¸ÕÀú ¾Ë¾Æº¸µµ·ÏÇÏÀÚ.
¾Õ¿¡¼­µµ À̾߱â ÇßµíÀÌ ¿ÀºêÁ§Æ¼ºê-C´Â C++°ú´Â ´Þ¸® ÁøÁ¤ÇÑ ANSI CÀÇ ½´ÆÛ¼ÂÀÌ´Ù. C++ÀÇ °æ¿ì C¿¡¼­ µÇ´ø°Ô °©Àڱ⠾ȵǴ °æ¿ì°¡ Á¾Á¾ ÀÖ´Ù. :( ±×¸®°í Objective-C´Â C++º¸´Ù ÈξÀ ´ÙÀ̳ª¹ÍÇÏ´Ù. Á¾Á¾ ±×·¸±â ¶§¹®¿¡ ´õ ´À¸®´Ù°í ºñ³­ÀÇ ´ë»óÀÌ µÉ ¶§µµ ÀÖ±ä ÇÏ´Ù. ¶ÇÇÑ º¹ÀâÇÑ C++ÀÇ ¹®¹ý¿¡ ºñÇØ¼­ Objective-C´Â »ó´çÈ÷ °£¼ÒÇÑ ¹®¹ýÀ» °¡Áö°í ÀÖ´Ù. ±×¸®°í Objective-C´Â C++ º¸´Ù ½ê·ÃµÇ¾ú´Ù. ¸Þ½Ã¡ ½ÅÅØ½º°¡ ¸¶Ä¡ ½º¸ôÅå °°´Ù!
±×¸®°í °áÁ¤ÀûÀ¸·Î ¾Õ¿¡¼­ À̾߱âÇϱ⵵ ÇßÁö¸¸ ÀÌ·± ÀåÁ¡µé¿¡µµ ºÒ±¸ÇÏ°í »ý°¢º¸´Ù ´À¸®Áö´Â ¾Ê´Ù.
Objective-CÀÇ ¼Ò½ºÆÄÀÏÀº ".m"À¸·Î ³¡³­´Ù. gcc´Â .mÀ¸·Î ³¡³ª´Â ÆÄÀÏÀ» Objective-C¼Ò½º·Î ÆÇ´ÜÇϰí .mmÀ¸·Î ³¡³ª´Â ÆÄÀÏÀº Objective-C++·Î ÆÇ´ÜÇÑ´Ù. Objective-C++Àº Objective-CÄÚµå¿Í C++Äڵ带 µ¿½Ã¿¡ º´ÇàÇØ¼­ »ç¿ëÇÒ ¼ö ÀÖ°Ô ÇØÁÖ¸ç GCC 3.1 ÀÌÈÄ ºÎÅÍ Áö¿øµÈ´Ù. ¸¸ÀÏ µ¿ÀÏÇÑ ÇÁ·ÎÁ§Æ® ³»¿¡¼­ C·Î¸¸ ±¸ÇöÇØµÐ ÆÄÀÏÀÌ ÀÖ´Ù¸é È®ÀåÀÚ¸¦ c·Î C++·Î¸¸ ±¸ÇöµÈ ÆÄÀÏÀº cpp·Î ÇÏ¸é µÈ´Ù.

¡Ü Dynamic Typing

¾Õ¼­ À̾߱â ÇßµíÀÌ Objective-C´Â ´ÙÀ̳ª¹ÍÇÑ ¾ð¾îÀÌ´Ù. Objective-C¿¡¼­´Â ¿ÀºêÁ§Æ®´Â id¶ó´Â µ¥ÀÌŸ ŸÀÔÀ¸·Î Ç¥ÇöµÈ´Ù. id´Â ½ÇÁ¦·Î´Â ¿ÀºêÁ§Æ®ÀÇ Æ÷ÀÎÅÍÀÌ´Ù.
id¿¡ ´ëÇØ¼­ À̾߱â Çϸ鼭 Çϳª ´õ ¤°í ³Ñ¾î°¡¾ß ÇÒ ºÎºÐÀÌ ÀÖµ¥, C¿¡¼­´Â ¸®ÅϰªÀ» »ý·«Çϸé int°¡ ¸®ÅϵǴ°ÍÀ¸·Î Á¤ÀǵÇÁö¸¸ Objective-CÀÇ ¸Þ¼Òµå¿¡¼­´Â ¸®ÅϰªÀÌ »ý·«µÇ¸é id°¡ ¸®ÅϵȴÙ.
¶ÇÇÑ nil Ű¿öµå°¡ null ¿ÀºêÁ§Æ®·Î Á¤ÀÇ µÇ¾îÀÖ´Ù. À̰ÍÀº id°ªÀÌ 0ÀÓÀ» ¸»ÇÑ´Ù.
idŸÀÔÀº ±× ´ë»óÀÌ ¿ÀºêÁ§Æ®¶ó´Â °ÍÀ» Á¦¿ÜÇϰí´Â ¿ÀºêÁ§Æ®¿¡ ´ëÇÑ ¾î¶² Á¤º¸µµ Á¦°øÇÏÁö ¾ÊÀ¸¸ç ÀÌ·ÎÀÎÇØ »ó´çÈ÷ ´ÙÀ̴ϹÍÇÑ ¸ð½ÀÀ» º¸¿©ÁØ´Ù. ÄÄÆÄÀÏ ´Ü°è¿¡¼­´Â id¿¡ ¹«¾ùÀÌ µé¾î°¥Áö ¾Ë ¼ö ¾øÀ¸¸ç ½ÇÁ¦ ·±Å¸ÀÓ¿¡¼­¸¸ ¿ÀºêÁ§Æ®ÀÌ »ó¼¼Á¤º¸, Áï ÀνºÅϽº º¯¼ö¿Í ¸Þ¼Òµå¿¡ ´ëÇØ¼­ ¾Ë¾Æº¼ ¼ö ÀÖ´Ù.
¸ðµç »ç¿ë°¡´ÉÇÑ ¿ÀºêÁ§Æ®´Â isa¶ó´Â ÀνºÅϽº º¯¼ö¸¦ °¡Áö´Âµ¥ À̰ÍÀº ¿ÀºêÁ§Æ®ÀÇ Å¬·¡½º(Ŭ·¡½º ¿ÀºêÁ§Æ® ¶Ç´Â ±×³É Ŭ·¡½º¶ó°í ÁöĪÇÑ´Ù. - ¼Ò½ºÄڵ忡¼­ÀÇ Å¬·¡½º¸¦ ¸»ÇѴ°Ͱú´Â Á¶±Ý ´Ù¸£´Ù)¸¦ ¾Ë·ÁÁØ´Ù. À̰ÍÀº ·±Å¸ÀÓ ½Ã½ºÅÛ¿¡¼­ °¢°¢ÀÇ ¿ÀºêÁ§Æ®°¡ ¹«¾ùÀ¸·ÎºÎÅÍ ÀνºÅϽºÈ­ µÇ¾ú´ÂÁö ¾Ë·ÁÁÖ´Â ¿ªÇÒÀ» ÇÑ´Ù. À̰ÍÀ¸·Î ½ÇÇà½Ã°£¿¡ ´ÙÀ̳ª¹Í ŸÀÌÇÎÀ» Áö¿øÇÑ´Ù.

¡Ü Message ±â¹Ý

¿ÀºêÁ§Æ¼ºê C¿¡¼­´Â ¹Ù·Î ¸Þ¼Òµå¸¦ ã¾Æ¼­ ºÒ·¯ÁÖ´Â°Ô ¾Æ´Ï¶ó ¸®½Ã¹ö(¸Þ½ÃÁö¸¦ ¹ÞÀ» °´Ã¼)¿¡ ¸Þ½ÃÁö¸¦ º¸³»¸é ¸®½Ã¹ö°¡ ÀûÀýÇÑ ¸Þ¼Òµå¸¦ ã¾Æ¼­ ºÒ·¯ÁÖ´Â ±¸Á¶·Î µÇ¾îÀÖ´Ù.
¿ÀºêÁ§Æ®°¡ ¹«¾ùÀΰ¡ ÇϰÔÇϱâ À§Çؼ­ method·Î Á¤ÀǵǾî ÀÖ´Â ¸Þ½ÃÁö¸¦ º¸³»¸é µÈ´Ù. ¿ÀºêÁ§Æ¼ºê C¿¡¼­´Â ¾Æ·¡Ã³·³ ¸®½Ã¹ö¿Í ¸Þ¼¼Áö¸¦ ´ë°ýÈ£ ¾È¿¡ ³ÖÀ¸¸é µÈ´Ù.
	[receiver message]

receiver´Â ¿ÀºêÁ§Æ®ÀÌ¸ç ¸Þ½ÃÁö´Â ¹«¾ùÀ» ÇÒ°ÍÀÎÁö¸¦ ¸»ÇÑ´Ù. ¸Þ½ÃÁö´Â ¸Þ¼Òµå À̸§°ú Àü´ÞÇÒ ¸Å°³º¯¼ö·Î ±¸¼ºµÈ´Ù. ¸Þ½ÃÁö°¡ Àü´ÞµÇ¸é ·±Å¸ÀÓ ½Ã½ºÅÛÀº ¸®½Ã¹ö¿¡¼­ Àû´çÇÑ ¸Þ¼Òµå¸¦ ã¾Æ¼­ ½ÇÇàÇÑ´Ù.
¿¹¸¦ µé¾î myCircle¿ÀºêÁ§Æ®¿¡ display¶ó´Â ¸Þ½ÃÁö¸¦ º¸³»¸é ¿øÀÌ È­¸é¿¡ µð½ºÇ÷¹ÀÌ µÈ´Ù¸é ¾Æ·¡¿Í °°ÀÌ Ç¥ÇöÇÒ ¼ö ÀÖ´Ù.
	[myCircle display];

¸Þ½ÃÁö¿¡ ¸Å°³º¯¼ö¸¦ º¸³¾ ¼ö Àִµ¥ ¿¹¸¦ µé¸é ¾Æ·¡¿Í °°ÀÌ Ç¥ÇöµÈ´Ù.
	[myCircle setOrigin:30.0 :50.0];

setOrigin::Àº ¸Þ½ÃÁö À̸§ÀÌ¸ç µÎ°³ÀÇ ÄÝ·ÐÀ» °¡Áö´Âµ¥ °¢°¢ ÇϳªÀÇ ÆÄ¶ó¸ÞÅ͸¦ º¸³¾ ¼ö ÀÖ´Ù. ÈçÈ÷ ÄÝ·Ð ¾Õ¿¡ ¸Å°³º¯¼öÀÇ ¼³¸íÀ» ºÙÀ̴µ¥ ¿¹¸¦ µé¸é setWidth:height: ó·³ »ç¿ëÇÑ´Ù.
	[myRect setWidth:10.0 height:15.0];

¶ÇÇÑ ¸Þ½ÃÁö´Â °¡º¯ÀûÀÎ °¹¼öÀÇ ¸Å°³º¯¼ö¸¦ º¸³¾ ¼ö ÀÖÀ¸¸ç ¸Þ½ÃÁö À̸§ÀÇ ³¡¿¡ ÄÞ¸¶·Î ±¸ºÐÁþ´Â´Ù.
	[receiver makeGroup:group, memberOne, memberTwo, memberThree];

C¾ð¾î¿Í °°ÀÌ ¸Þ¼Òµå´Â ¸®ÅÏ °ªÀ» °¡Áø´Ù.
	BOOL isFilled;
	isFilled = [myRect isFilled];

±×¸®°í ÇϳªÀÇ ¸Þ½ÃÁö Àü¼ÛÀ» ´Ù¸¥ ¸Þ½ÃÁö Àü¼Û°ú °°Àº ÁÙ¿¡ Æ÷ÇÔ ½Ãų ¼ö ÀÖ´Ù. ÀÌ ÇüÅ´ ÀÚÁÖ º¸°Ô µÉ °ÍÀÌ´Ù.
	[myRect setPrimaryColor:[otherRect primaryColor]];

ÀÌ °æ¿ì otherRectÀÇ primaryColor¸Þ¼Òµå°¡ µ¹·ÁÁÖ´Â °´Ã¼¸¦ ´Ù½Ã myRectÀÇ setPrimaryColor¸Þ½ÃÁö¸¦ ºÒ·¯¼­ myRectÀÇ primaryColor·Î ¸¸µé¾îÁØ´Ù.
C++ÀÇ °æ¿ì
	myRect->setPrimaryColor(otherRect->primaryColor());

ÀÌ·¸°Ô »ç¿ëµÉ°ÍÀÌ´Ù.
¸¸ÀÏ ¿©±â¼­ primaryColor°¡ nilÀ̶ó¸é, ¿¹¸¦ µé¾î C++ÀÇ °æ¿ì
	myRect->primaryColor()->getRed();

ÀÌ·± Äڵ带 ÀÛ¼ºÇÏ°Ô µÈ´Ù¸é ÀÌ ÇÁ·Î±×·¥Àº NULL Æ÷ÀÎÅ͸¦ ÂüÁ¶Çؼ­ Å©·¡½¬ ÇÏ°Ô µÉ °ÍÀÌ´Ù.
ÇÏÁö¸¸ Objective-C¿¡¼­´Â °ÆÁ¤ ÇÏÁö ¾Ê¾Æµµ µÈ´Ù. nil¿¡°Ô º¸³»´Â ¸Þ½ÃÁöµµ °¡´ÉÇϱ⠶§¹®ÀÌ´Ù. nil¿¡°Ô ¸Þ½ÃÁö¸¦ º¸³»¸é nilÀÌ µ¹¾Æ¿Â´Ù.
	[[myRect primaryColor] red];

Áï ÀÌ·¯ÇÑ Äڵ带 ÀÛ¼ºÇصµ °©ÀÚ±â Å©·¡½¬ÇÏ´Â ÀÏÀº ¹ß»ýÇÏÁö ¾Ê´Â´Ù.
C++¿¡¼­¿Í ¸¶Âù°¡Áö·Î ¸Þ¼Òµå´Â ±× ¿ÀºêÁ§Æ®ÀÇ ÀνºÅϽº º¯¼ö¸¦ ÀÚµ¿ÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¿ª½Ã ´Ù¸¥ °´Ã¼¿¡ ÀÖ´Â °ªÀÌ ÇÊ¿äÇÏ´Ù¸é ¸Þ¼ÒµåÀÇ ¸Å°³º¯¼ö·Î ¹Þ¾Æ¾ß ÇÑ´Ù.
¸Þ½ÃÁö¿¡ ´ëÇÑ ´õ »ó¼¼ÇÑ ³»¿ëÀº µÚ¿¡ ´Ù½Ã ´Ù·ç°Ô µÉ °ÍÀÌ´Ù.
?¸Þ½ÃÁö¿Í ¸Þ¼Òµå¶õ ¸»ÀÌ È¥¿ëµÇ¾î »ç¿ëµÇ¾ú´Ù. ÀÌ ºÎºÐ¿¡ ´ëÇØ¼­´Â µÚ¿¡ ³ª¿À´Â ¼³¸íÀ» ÀÐ°í ³ª¸é Á» ´õ ÀÌÇØ°¡ µÉ °ÍÀÌ´Ù. °¡²ûÀº Á¤È®ÇÏ°Ô ÀÌ µÑÀ» ±¸ºÐÇϴ°ÍÀÌ ¹«ÀǹÌÇØÁú¶§µµ ÀÖÁö¸¸ ÇÊÀÚ°¡ ÀϺη¯ ¸Þ½ÃÁö¶õ°ÍÀ» °­Á¶Çß´Ù.

¡Ü Polymorphism

Polymorphism¿¡ ´ëÇØ À̾߱â Çϱâ Àü¿¡ ±âÁ¸ÀÇ C++°°Àº ¾ð¾î¿¡¼­ÀÇ polymorphism¿¡ ´ëÇØ¼­´Â Àá½Ã ÀؾîµÎµµ·ÏÇÏÀÚ. ¿ÀÈ÷·Á ´õ Çò±ò¸®°Ô ¸¸µé±â ¶§¹®ÀÌ´Ù. Objective-CÀÇ polymorphismÀº ´ÜÁö Objective-CÀÇ polymorphsimÀÌ´Ù. ÀÌ°Ô ¹«½¼ polymorphismÀÌ³Ä°í µûÁú ¸¸ÇÑ °¡Ä¡µµ ¾ø´Ù. À̰ÍÀº Objective-C°¡ ¸Þ¼Òµå¿Í ¸Þ½ÃÁö¸¦ ¾ö¹ÐÇÏ°Ô ¸»ÇÏ¸é ±¸ºÐ Áþ´Â´Ù´Â »ç½Ç¿¡ ¿°µÎÇÏ°í º¸±â¹Ù¶õ´Ù.
¸¸ÀÏ A¶ó´Â °´Ã¼¿Í B¶ó´Â °´Ã¼°¡ ÀÖ´Ù°í ÇÏÀÚ. ÀÌ °´Ã¼µéÀÌ setOriginÀ̶ó´Â ¸Þ½ÃÁö¸¦ ¹Þ´Â´Ù¸é ¾î¶»°Ô µÉ±î? ¸¸ÀÏ A¿Í B°¡ °°Àº Ŭ·¡½º·ÎºÎÅÍ ÆÄ»ýµÇ¾î¼­ ³ª¿Ô´Ù¸é °°Àº µ¿ÀÛÀ» ÇϰÚÁö¸¸ ¸¸ÀÏ ´Ù¸¥ Ŭ·¡½º·Î ºÎÅÍ ÆÄ»ýµÇ¾î ³ª¿Â °´Ã¼¶ó¸é ´Ù¸¥ µ¿ÀÛÀ» º¸ÀδÙ. À̰ÍÀÌ ¸Þ½ÃÁöÀÇ polymorphismÀÌ´Ù. ÀÌ·¸°Ô µ¿ÀÏÇÑ ¸Þ½ÃÁö°¡ °¢°¢ÀÇ °´Ã¼¿¡¼­ ´Ù¸£°Ô ÇØ¼®µÇ±â ¶§¹®¿¡ °³¹ßÀÚµéÀº ¸Þ½ÃÁöÀÇ À̸§À» Á¤Çϴµ¥ »ó´çÈ÷ ¿©À¯·Î¿ï ¼ö ÀÖ°í °øµ¿°³¹ßÀ» ÇÒ¶§µµ ¸Þ½ÃÁöÀÇ È¥µ¿À» ÁÙÀÏ ¼ö ÀÖ´Ù.
?¸Þ½ÃÁö¸¦ ºÎ¸£´Â ÀÏ·ÃÀÇ ÀÛ¾÷ÀÌ Æ¯Á¤ °´Ã¼ÀÇ ¸É¹öÆã¼ÇÀ» ¹Ù·Î È£ÃâÇÏ´Â C++ÀÇ ¹æ½Ä°ú ´Ù¸£´Ù´Â°ÍÀ» ¿°µÎÇØµÎ±â ¹Ù¶õ´Ù.

¡Ü Dynamic Binding

ÇÔ¼öÀÇ È£Ãâ°ú ¸Þ½ÃÁöÀÇ Àü´ÞÀÌ ±×·¯¸é ¹«¾ùÀÌ ´Ù¸£´Ù´Â °ÍÀΰ¡? ÇÔ¼öÀÇ È£ÃâÀº ÇÔ¼ö¿Í ±× ¸Å°³º¯¼öµéÀÌ ÄÄÆÄÀÏµÈ Äڵ忡 ¿ÏÀüÈ÷ ¹ÙÀεùµÇ¾î¹ö¸°´Ù. ±×·¸Áö¸¸ ¸Þ½ÃÁö¿Í ¸Þ½ÃÁö¸¦ ¹Þ´Â ¿ÀºêÁ§Æ®´Â ±×·¸Áö ¾Ê´Ù. ±×°ÍÀº ½ÇÇà½Ã°£¿¡ ¸Þ½ÃÁö¸¦ º¸³»±â Àü±îÁö ÀüÇô ¹ÙÀεùµÇÁö ¾Ê´Â´Ù.
¾î¶² ¸Þ¼Òµå¸¦ ½ÇÇàÇÒ°ÇÁö´Â ½ÇÇà½Ã°£¿¡ ¸Þ½ÃÁö¸¦ ¹ÞÀ¸¸é¼­ °áÁ¤³­´Ù. ÄÄÆÄÀÏ ÇÒ¶§´Â ¾Ë ¼ö ¾ø´Ù.
¸Þ½ÃÁö¿¡ ´ëÇØ¼­ ½ÇÇàµÇ´Â ¸Þ¼Òµå´Â ¸®½Ã¹ö¿¡ ÀÇÇØ °áÁ¤³­´Ù. ´Ù¸¥ ¸®½Ã¹ö¶ó¸é ´Ù¸¥ ¸Þ¼Òµå°¡ ½ÇÇàµÇ´Â°ÍÀÌ´Ù.(polymorphism¿¡¼­ ¼³¸íÇß´Ù) ÄÄÆÄÀÏ·¯°¡ ¸Þ½ÃÁö¿¡ ´ëÇØ¼­ Á¤È®ÇÑ ¸Þ¼Òµå ±¸ÇöÀ» ã°Ô Çϱâ À§Çؼ­ ¿ÀºêÁ§Æ®°¡ ¹«½¼ Ŭ·¡½º¿¡¼­ À¯·¡Çß´ÂÁö ¾Ë¾Æ¾ß ÇÑ´Ù. Objective-C¿¡¼­´Â ÀÌ·± Á¤º¸°¡ ¼Ò½ºÄڵ忡¼­ ÆÄ¾ÇÀÌ ºÒ°¡´ÉÇÏ¸ç ¸®½Ã¹ö°¡ ¸Þ½ÃÁö¸¦ ¹ÞÀº ½ÃÁ¡¿¡¼­ ¾Ë ¼ö ÀÖ´Ù. À̰ÍÀÌ Objective-C¿¡¼­ ±¸ÇöµÈ dynamic bindingÀÌ´Ù.
¾Õ¼­ ¼³¸íÇÑ polymorphism°ú ÇÔ²² »ý°¢Çغ¸¸é ÀÌÇØ°¡ ½¬¿ï°ÍÀÌ´Ù.
¸Þ½ÃÁö°¡ º¸³»Áö¸é ·±Å¸ÀÓ ¸Þ½Ã¡ ·çƾÀº ¸®½Ã¹öÀÇ ¸Þ¼Òµå ¸®½ºÆ®¿¡¼­ ¸Þ½ÃÁö¿Í °°Àº°ÍÀÌ ÀÖ´ÂÁö È®ÀÎÇØ¼­ ±× ¸Þ¼Òµå¸¦ È£ÃâÇÏ°í ¸®½Ã¹öÀÇ ÀνºÅϽº º¯¼öµéÀÇ Æ÷ÀÎÅ͸¦ ³Ñ±ä´Ù.
¸Þ½ÃÁö¾È¿¡ ÀÖ´Â ¸Þ¼Òµå À̸§Àº ½ÇÁ¦ ½ÇÇàµÉ ¸Þ¼Òµå¸¦ ã´Âµ¥ »ç¿ëµÇ¾î¼­ ¼¿·¢ÅͶó°í ºÎ¸¥´Ù.
ÀÌ·± dynamic bindingÀº polymorphism°ú ÇÔ²² À¯¿¬ÇÔ°ú ÈûÀ» Á¦°øÇÑ´Ù.
¿¹¸¦ µé¸é ¿öµåÇÁ·Î¼¼¼­¸¦ Çѹø »ý°¢Çغ¸ÀÚ. È­¸é¿¡ ¼±ÅÃµÈ ¿µ¿ªÀÌ ÀÖ´Ù. ÀÌ ¼±ÅÃµÈ ¿µ¿ªÀº ÅØ½ºÆ® Àϼöµµ ÀÖ°í, ·¹½ºÅÍÀ̹ÌÁö Àϼöµµ ÀÖ°í º¤ÅÍ À̹ÌÁö Àϼöµµ ÀÖ´Ù. ¾Æ´Ï¸é º¹ÇÕÀûÀÎ ÇüÅÂÀÇ Ç¥À̰ųª ´Ù¸¥ ÇüÅÂÀÇ µ¥ÀÌŸÀÇ Ç¥ÇöÀÏ ¼ö µµ ÀÖ´Ù. ´ÙÀ̳ª¹Í ¹ÙÀεùÀÌ Áö¿øµÇÁö ¾Ê´Â ¾ð¾î¶ó¸é ÀÌ·± °æ¿ì ¸Þ´º¿¡¼­ Copy¸¦ ¼±ÅÃÇÏ¸é ¾î¶² µ¿ÀÛÀ» ÇØ¾ßÇÒ±î?
¸ÕÀú ¼±ÅÃµÈ °ÍÀÌ ¹«¾ùÀÎÁö ºÎÅÍ ÆÇ´ÜÇØ¾ßÇÑ´Ù. °á°úÀûÀ¸·Î Äڵ尡 º¹ÀâÇØÁö´Â °ÍÀÌ´Ù.
¹Ý´ë·Î ´ÙÀ̳ª¹Í ¹ÙÀεù°ú Æú¸®¸ðÇÇÁòÀ» ÀÌ¿ëÇÑ ¿ÀºêÁ§Æ¼ºê CÀÇ °æ¿ì ¼±ÅÃµÈ °´Ã¼°¡ ¹«¾ùÀÎÁö ½Å°æ ¾²Áö ¾Ê¾Æµµ µÈ´Ù ´ÜÁö copy¸Þ½ÃÁö¸¸ º¸³»¸é µÈ´Ù. ´Ü, ¼±ÅÃµÈ °´Ã¼°¡ copy¸¦ ±¸ÇöÇϰí ÀÖ¾î¾ß ÇÏÁö¸¸ ¸»ÀÌ´Ù. ´ç¿¬È÷ ƯÁ¤ °´Ã¼°¡ ƯÁ¤ ¸Þ¼Òµå¸¦ ±¸ÇöÇϰí ÀÖ´ÂÁö ·±Å¸Àӽÿ¡ È®ÀÎ ÇÒ ¼ö ÀÖ´Â ¹æ¹ýµµ Á¦°øÇÑ´Ù.
¾óÇÍ º¸¸é ÀÌ°Ô Â÷À̰¡ ¾ó¸¶³ª ³¯±î ½Í´Ù. ÇÏÁö¸¸ ¸¹Àº Â÷À̰¡ ³­´Ù.

¡Ü Class

Objective-C¿¡¼­´Â C++°ú ¸¶Âù°¡Áö·Î ¿ÀºêÁ§Æ®¸¦ Á¤ÀÇÇϱâ À§Çؼ­ Ŭ·¡½º¸¦ Á¤ÀÇÇØ¾ß ÇÑ´Ù. ÀÌ Å¬·¡½º°¡ ¿ÀºêÁ§Æ®ÀÇ ÇÁ·ÎÅäŸÀÔÀÌ µÇ´Â °ÍÀÌ´Ù. Ŭ·¡½º´Â ÀνºÅϽº º¯¼ö¿Í ¸Þ¼Òµå·Î ÀÌ·ç¾îÁø´Ù.
ÄÄÆÄÀÏ·¯´Â °¢ Ŭ·¡½º´ç ´Ü ÇѰ³ÀÇ ¿ÀºêÁ§Æ®¸¦ »ý¼ºÇÑ´Ù. À̰ÇÀº ÈçÈ÷ ÆÑÅ丮 ¿ÀºêÁ§Æ® ¶Ç´Â Ŭ·¡½º ¿ÀºêÁ§Æ®¶ó°í ºÒ¸®´Â °ÍÀ¸·Î À̰ÍÀº ÇØ´ç Ŭ·¡½º¿¡ ÇØ´çÇÏ´Â ¿ÀºêÁ§Æ®¸¦ »ý¼ºÇÏ´Â ¿ªÇÒÀ» ÇÑ´Ù. Áï Ŭ·¡½º ¿ÀºêÁ§Æ®´Â Ŭ·¡½ºÀÇ ÄÄÆÄÀÏ µÈ ¹öÁ¯ÀÎ °ÍÀÌ´Ù. ½ÇÁ¦ ÇÁ·Î±×·¥¿¡¼­ ÀÛµ¿µÇ´Â Ŭ·¡½ºµéÀº ½ÇÇà½Ã°£ Áß¿¡ Ŭ·¡½º ¿ÀºêÁ§Æ®·Î ºÎÅÍ ¸¸µé¾îÁø °ÍÀÌ´Ù.
ÇϳªÀÇ Å¬·¡½º·Î ºÎÅÍ ¸¸µé¾îÁø ¸ðµç °´Ã¼µéÀº °°Àº(µ¿ÀÏÇÑ ¸Þ¸ð¸® À§Ä¡¿¡ Á¸ÀçÇÏ´Â, Áï °¢ ÀνºÅϽº¸¶´Ù º¹Á¦µÇÁö ¾ÊÀº) ¸Þ¼Òµå¸¦ ¾ï¼¼½º ÇÏÁö¸¸ ÀνºÅϽº º¯¼öµéÀº °¢°¢ °¡Áø´Ù.
Âü°í·Î Objective-CÀÇ ÀϹÝÀûÀÎ ÄÚµù ÄÁº¥¼ÇÀº Ŭ·¡½º À̸§Àº ´ë¹®ÀÚ·Î ÀνºÅϽºµéÀÇ À̸§Àº ¼Ò¹®ÀÚ·Î ½ÃÀÛÇÑ´Ù.

¡Ü Inheritance

Ŭ·¡½º´Â »ó¼ÓÀÌ °¡´ÉÇÏ´Ù. »õ·Î¿î ¸Þ¼Òµå¿Í º¯¼ö¸¦ Ãß°¡ ÇÒ ¼ö ÀÖÁö¸¸ ±âÁ¸ÀÇ ¸ðµç Äڵ带 ´Ù½Ã °¡Á®¿Í¼­ ±¸ÇöÇÒ Çʿ䰡 ¾ø´Ù. ÇÊ¿äÇÏ´Ù¸é Æ¯Á¤ ¸Þ¼Òµå¸¦ ¿À¹ö¶óÀ̵ù ÇÒ ¼ö ÀÖ´Ù.
¸ðµç Ŭ·¡½ºµéÀº ÇϳªÀÇ Å¬·¡½º·Î ºÎÅÍ »ó¼Ó µÇ¾î Àִµ¥ ±×°ÍÀº NSObjectÀÌ´Ù. rootŬ·¡½º¸¦ Á¦¿ÜÇÑ ¸ðµç Ŭ·¡½º´Â superclass¸¦ °¡Áö¸ç ¸ðµç Ŭ·¡½ºµéÀº superclass°¡ µÉ ¼ö ÀÖ´Ù.(»ç½Ç À̸»¿¡ ´ëÇØ¼­´Â ´Ù½Ã Á¶Á¤ÇÒ Çʿ䰡 ÀÖ´Ù.)
C++°ú ´Ù¸¥ Á¡ÀÌ ÀÖ´Ù¸é Objective-C´Â ´ÙÁß »ó¼ÓÀ» Áö¿øÇÏÁö ¾Ê´Â´Ù.

¡Ü ÀνºÅϽº º¯¼öÀÇ »ó¼Ó

Ŭ·¡½º ¿ÀºêÁ§Æ®°¡ »õ ÀνºÅϽº¸¦ ¸¸µé¸é ±× Ŭ·¡½º¿¡ Á¤ÀÇ µÈ ÀνºÅϽº º¯¼ö »Ó¸¸ ¾Æ´Ï¶ó ·çÆ®¿¡ À̸£±â ±îÁöÀÇ ¸ðµç superclassÀÇ º¯¼öµéµµ ¸ðµÎ ¸¸µé¾îÁø´Ù. ±×·¸°Ô µÇ¾î Àֱ⠶§¹®¿¡ NSObject¿¡ ÀÖ´Â isa°¡ ¸ðµç »ó¼ÓµÈ ¿ÀºêÁ§Æ®¿¡ Æ÷ÇÔµÇ¸ç ¿ÀºêÁ§Æ®ÀÇ Å¬·¡½º°¡ ¹ºÁö ¾Ë ¼ö ÀÖ´Ù.

¡Ü ¸Þ¼ÒµåÀÇ »ó¼Ó

ÀνºÅϽº º¯¼ö¿Í ¸¶Âù°¡Áö·Î ¸Þ¼Òµåµµ ÇöÀç Ŭ·¡½º¿¡¼­ ÀúÀåÇÑ °Í »Ó¸¸ ¾Æ´Ï¶ó °¢°¢ÀÇ superclass¸¦ °ÅÃÄ root Ŭ·¡½º¿¡ À̸£±â±îÁö ¸ðµç ¸Þ¼Òµåµé¿¡ Á¢±Ù ÇÒ ¼ö ÀÖ´Ù.
Ŭ·¡½º ¿ÀºêÁ§Æ® ¿ª½Ã hierarchy¿¡ µû¶ó »ó¼ÓµÇ¾îÀÖÁö¸¸ ÀνºÅϽº º¯¼ö¸¦ °¡ÁöÁö ¾Ê±â ¶§¹®¿¡ ¸Þ¼Òµå¸¸ »ó¼ÓÇÑ´Ù.

¡Ü ¸Þ¼ÒµåÀÇ overriding

»õ·Î¿î Ŭ·¡½º¸¦ Á¤ÀÇÇÒ¶§ ÀÌ¹Ì superclass¿¡ ÀÖ´ø ¸Þ¼Òµå¸¦ ´Ù½Ã ±¸ÇöÇÏ¸é »õ·Î ¸¸µé¾îÁø ¸Þ¼Òµå°¡ ¿ø·¡ÀÇ ¸Þ¼Òµå¸¦ ¿À¹ö¶óÀ̵ù ÇÑ´Ù. ±×·¸°Ô µÇ¸é ±× »õ·Î ¸¸µé¾îÁø Ŭ·¡½ºÀÇ ÀνºÅϽº´Â »õ·Î ¸¸µé¾îÁø ¸Þ¼Òµå¸¦ »ç¿ëÇϰí ÀÌ·Î ºÎÅÍ »ó¼Ó¹ÞÀº ¸ðµç ´Ù¸¥ Ŭ·¡½ºµéµµ »õ·Î ¸¸µé¾îÁø ¸Þ¼Òµå¸¦ »ç¿ëÇÑ´Ù.
ºñ·Ï ¿À¹ö¶óÀ̵ù µÈ ¸Þ¼Òµå°¡ ¿ø·¡ÀÇ ¸Þ¼Òµå¸¦ ¸·¾Æ¹ö·Áµµ »õ·Î Á¤ÀÇµÈ ¸Þ¼Òµå¸¦ ¹«½ÃÇÏ°í ¿ø·¡°ÍÀ» ãÀ» ¼ö ÀÖ´Â ¹æ¹ýÀÌ Á¦°ø µÇ´Âµ¥ super¿Í self¸¦ ÀÌ¿ëÇÑ´Ù. ÀÌ¿¡ ´ëÇØ¼­´Â µÚ¿¡¼­ ´Ù½Ã ´Ù·ê ¿¹Á¤ÀÌ´Ù.
¼­ºêŬ·¡½º°¡ »ó¼ÓµÈ ¸Þ¼Òµå¸¦ ¿À¹ö¶óÀ̵å ÇÒ ¼ö Àִ°Ϳ¡ ¹ÝÇØ »ó¼ÓµÈ ÀνºÅϽº º¯¼öµéÀ» ¿À¹ö¶óÀ̵ù ÇÒ ¼ö´Â ¾ø´Ù. ¸¸ÀÏ ÀÌ¹Ì Á¤ÀǵǾî Àִ°Ͱú °°Àº À̸§ÀÇ ÀνºÅϽº º¯¼ö¸¦ ¸¸µé¸é ÄÄÆÄÀϽà ¿ö´×(¿¡·¯)¸¦ ³¾ °ÍÀÌ´Ù.

¡Ü NSObject Class

¿©±â¼­ ·çÆ® Ŭ·¡½ºÀÎ NSObject¿¡ ´ëÇØ¼­ ¾Ë¾Æº¸°í ³Ñ¾î°¡µµ·Ï ÇÏÀÚ.
NSObject Ŭ·¡½º´Â ·çÆ® Ŭ·¡½º·Î ½´ÆÛŬ·¡½º¸¦ °¡ÁöÁö ¾Ê´Â´Ù. À̰Ϳ¡´Â Objective-C¸¦ À§ÇÑ ±âº»ÀûÀÎ ÇÁ·¡ÀÓ¿÷°ú ¿ÀºêÁ§Æ®ÀÇ »çÀÌ¿¡¼­ ¹ú¾îÁö´Â ÀÛµ¿ÀÌ Á¤ÀÇ µÇ¾îÀÖ´Ù. Áï ·±Å¸ÀÓ ½Ã½ºÅÛ°ú °°ÀÌ ¿òÁ÷ÀÏ ¼ö ÀÖ´Â ÃÖ¼ÒÇÑÀÇ °´Ã¼ÀÇ ÇüŸ¦ °¡Áö°í ÀÖ´Ù´Â ¸»ÀÌ´Ù. ±×·¡¼­ »õ·Î¿î ·çÆ® Ŭ·¡½º¸¦ ¸¸µå´Â°Í º¸´Ù NSObject¸¦ »ó¼Ó¹ÞÀ¸¹Ç·Î¼­ ¿ÀºêÁ§Æ®°¡ °¡Á®¾ß ÇÏ´Â ÃÖ¼ÒÇÑÀÇ ±â´ÉÀ» °¡Áö´Â ºÎºÐÀ» ´Ù½Ã ¸¸µéÁö ¾Ê¾Æµµ µÈ´Ù.
»õ·Î¿î ·çÆ® Ŭ·¡½º¸¦ ¸¸µå´Â ÀÛ¾÷Àº ¸Å¿ì ±î´Ù·Î¿ì¸ç ¸¹Àº À§ÇèÀ» ³»Æ÷Çϰí ÀÖ´Ù. NSObject°¡ ¿ÀºêÁ§Æ®¸¦ ÀνºÅϽºÈ­ ½ÃŲ´Ù´øÁö ±×°ÍÀ» Ŭ·¡½º¿Í ¿¬°áÇÏ´Â ÀÛ¾÷ ¶Ç ·±Å¸ÀÓ ½Ã½ºÅÛ¿¡ ¿ÀºêÁ§Æ®¸¦ È®ÀνÃŰ´Â(identify) ÀϵéÀ» ´Ù ó¸®ÇØÁֱ⠶§¹®¿¡ ÀÌ·± ºÎºÐµé¿¡ ´ëÇØ ¸ðµÎ ÀÛ¾÷À» ÇØ¾ßÇÑ´Ù. ¾ÖÇÿ¡¼­ Á¦°øÇÏ´Â ¹®¼­¿¡¼­´Â NSObject¸¦ »ó¼Ó¹Þµµ·Ï ±ÇÀåÇϰí ÀÖ´Ù.

¡Ü Abstract Classes

¾î¶² Ŭ·¡½ºµéÀº ´ÜÁö »ó¼ÓÇϱâ À§Çؼ­ µðÀÚÀÎ µÈ°ÍÀÌ ÀÖ´Ù. ÀÌ·± abstract classµéÀº ±× ÀÚü¸¸À¸·Î´Â ºÒ¿ÏÀüÇÏÁö¸¸ ±×°ÍÀ» »ó¼Ó¹Þ¾Æ¼­ ±¸ÇöÇÒ ¼ö ÀÖ´Ù.
NSObjectŬ·¡½º´Â °¡Àå Áß¿äÇÑ abstract classÀÌ´Ù. ´Ù¸¥ Ŭ·¡½º¸¦ ¸¸µé¶§ ÀÌ NSObjectŬ·¡½º¿¡¼­ »ó¼ÓÇÏ´Â °æ¿ìµµ ¸¹°í »ó¼ÓÇÑ Å¬·¡½ºÀÇ ÀνºÅϽº¸¦ »ç¿ëÇϱ⵵ ÇÏÁö¸¸ ¹Ù·Î NSObjectŬ·¡½º¸¦ ÀνºÅϽºÈ­ ½ÃÄѼ­ »ç¿ëÇÏÁö ¾Ê´Â´Ù.
NSObject´Â ÀϹÝÀûÀÎ ¿ÀºêÁ§Æ®ÀÇ ±â´ÉÀ» °¡Áö¸ç ¾î¶² ƯÁ¤ÇÑ ±â´ÉÀ» °¡ÁöÁö´Â ¾Ê´Â´Ù.
Abstract Class´Â °¡²û ¾ÖÇø®ÄÉÀ̼ÇÀÇ ±¸Á¶¸¦ Á¤ÀÇÇϴµ¥ µµ¿òÀÌ µÇ´Â Äڵ带 °¡Áö°í ÀÖ´Ù. ÀÌ Å¬·¡½ºµéÀÇ ¼­ºêŬ·¡½º¸¦ ¸¸µé¾úÀ»¶§ ÀÌ Å¬·¡½º´Â ÀÚµ¿ÀûÀ¸·Î ¾ÖÇø®ÄÉÀÌ¼Ç ±¸Á¶ ³»¿¡¼­ ´Ù¸¥ ¿ÀºêÁ§Æ®µé°ú Àß ¸Â¾Æ¼­ ÀÛµ¿µÈ´Ù. À̰ÍÀº abstract classµéÀÌ ¹Ýµå½Ã ¼­ºêŬ·¡½º¸¦ °¡Áö¸ç ±×°ÍµéÀº Á¾Á¾ abstract superclass¸¦ È£ÃâÇϱ⠶§¹®ÀÌ´Ù.

¡Ü Class Types

Ŭ·¡½ºÀÇ Á¤ÀÇ´Â ¾î¶² ƯÁ¤ Á¾·ùÀÇ ¿ÀºêÁ§Æ®¿¡ ´ëÇÑ ¸í¼¼»çÇ×ÀÌ´Ù. À̰ÍÀº µ¥ÀÌŸ ±¸Á¶¸¦ Á¤ÀÇÇϰí(instance variables) ±×°ÍÀÇ behavior¸¦ Á¤ÀÇÇÑ´Ù.(method)
Ŭ·¡½ºÀÇ À̸§Àº ¼Ò½ºÄÚµå ³»¿¡¼­ ŸÀÔ specifier·Î ³ªÅ¸³­´Ù. ´ÙÀ½ ¿¹Á¦¸¦ º¸ÀÚ
	int i = sizeof(Rectangle);

¿©±â¼­ RecangleÀº Ŭ·¡½º À̸§À̸ç sizeof¿¬»êÀÚ¸¦ ÀÌ¿ëÇØ¼­ ±× Å©±â¸¦ ¾Ë ¼ö ÀÖ´Ù.

¡Ü Static Typing

Ŭ·¡½º À̸§À» id ´ë½Å »ç¿ëÇØ¼­ ¿ÀºêÁ§Æ®ÀÇ Å¸ÀÔÀ» ³ªÅ¸³¾ ¼ö ÀÖ´Ù.
	Rectangle* rect;

ÀÌ·¸°Ô ÇÒ °æ¿ì ÄÄÆÄÀÏ·¯¿¡ ¿ÀºêÁ§Æ®ÀÌ Á¾·ù¿¡ ´ëÇÑ Á¤º¸¸¦ Áֱ⠶§¹®¿¡ ½ºÅÂÆ½ ŸÀÌÇÎÀÌ µÈ´Ù. id°¡ ¿ÀºêÁ§Æ®ÀÇ Æ÷ÀÎÅͰ¡ µÇ´Â°Í ó·³ Ŭ·¡½ºÀÇ Æ÷ÀÎÆ®·Î ½ºÅÂÆ½ ŸÀÌÇεǴ °ÍÀÌ´Ù. ½ºÅÂÆ½ ŸÀÌÇÎÀÌ Æ÷ÀÎÅ͸¦ Á¤È®È÷ ¸í½ÃÇÏ´Â ¹Ý¸é id´Â ¼û±â´Â °ÍÀÌ´Ù.
½ºÅÂÆ½ ŸÀÌÇÎÀº ÄÄÆÄÀÏ·¯·Î ÇÏ¿©±Ý ŸÀÔ Ã¤Å·À» ÇÏ°Ô ÇÑ´Ù. À̰ÍÀº ¸¸ÀÏ ¿ÀºêÁ§Æ®°¡ ó¸®ÇÒ ¼ö ¾ø´Â ¸Þ½ÃÁö¸¦ ¹Þ°Å³ª ´Ù¸¥ ÇüÅÂÀÇ ¿ÀºêÁ§Æ®ÀÌ Æ÷ÀÎÆ®¿¡ ´ëÀÔÀ» ÇÒ¶§ °æ°í¸¦ ³ª¿À°Ô ÇÑ´Ù.
¶ÇÇÑ À̰ÍÀº Äڵ带 Àд ´Ù¸¥»ç¶÷¿¡°Ô Àǹ̰¡ ´õ ¸íÈ®ÇÏ°Ô Àü´ÞµÇ°Ô ÇÏÁö¸¸ À̰ÍÀÌ ·±Å¸ÀÓ ½Ã¿¡ ´ÙÀ̳ª¹Í ¹ÙÀεùÀ̳ª ¸®½Ã¹öÀÇ Å¬·¡½º¸¦ ´ÙÀ̳ª¹ÍÇÏ°Ô Ã¼Å©Çϴµ¥ ¿µÇâÀ» ÁÖÁö´Â ¾Ê´Â´Ù.
¿ÀºêÁ§Æ®´Â ±× ÀÚüÀÇ Å¬·¡½º¿Í ±×°ÍÀÇ ºÎ¸ð Ŭ·¡½ºµé·Î ½ºÅÂÆ½ ŸÀÌÇ뵃 ¼ö ÀÖ´Ù. ¿¹¸¦ µé¸é RectangleÀÌ Graphic¿¡¼­ »ó¼Ó ¹Þ¾Ò´Ù¸é RectangleŬ·¡½º´Â GraphiccŬ·¡½º·Î ½ºÅÂÆ½ ŸÀÌÇÎ µÉ ¼ö ÀÖ´Ù.

¡Ü Type Introspection

ÀνºÅϽºÀÇ Å¸ÀÔÀ» ·±Å¸ÀÓ¿¡¼­µµ ¾Ë ¼ö ÀÖ´Ù. NSObject Ŭ·¡½º¿¡ Á¤ÀǵǾîÀÖ´Â isMemberOfClass: ¸Þ¼Òµå¸¦ ÀÌ¿ëÇÏ¸é ¸®½Ã¹ö°¡ ¾î¶² Ŭ·¡½ºÀÇ ÀνºÅϽºÀÎÁö È®ÀÎ °¡´ÉÇÏ´Ù. ¶ÇÇÑ isKindOfClass: ¸Þ¼Òµå¸¦ ÀÌ¿ëÇÏ¸é Æ¯Á¤ Ŭ·¡½ºÀÇ »ó¼Ó°èÅë¿¡ ÇØ´çÇÏ´Â ÀνºÅϽºÀÎÁö È®ÀÎ °¡´ÉÇÏ´Ù.

¡Ü Class Objects

¾Õ¿¡¼­ Ŭ·¡½º¸¦ ¼³¸íÇϸ鼭 Àá½Ã ³ª¿Ô´ø Ŭ·¡½º ¿ÀºêÁ§Æ®¿¡ ´ëÇØ¼­ Á» ´õ »ó¼¼ÇÏ°Ô À̾߱â ÇÒ Çʿ䰡 ÀÖÀ»°Í °°´Ù.
Ŭ·¡½º Á¤ÀÇ¿¡´Â ´Ù¾çÇÑ Á¤º¸µéÀÌ µé¾î°¡Àִµ¥ Ŭ·¡½ºÀÇ À̸§°ú ±×°ÍÀÇ ½´ÆÛŬ·¡½º, ÀνºÅϽº º¯¼öµé, ¸Þ¼Òµå À̸§°ú ¸®Åϰª°ú ¸Å°³º¯¼öµé ±×¸®°í ½ÇÁ¦ ¸Þ¼ÒµåÀÇ ±¸ÇöÀÌ Æ÷ÇԵȴÙ.
À̵é Á¤º¸´Â ·±Å¸ÀÓ ½Ã½ºÅÛ¿¡¼­ ¾Ë¾Æº¼ ¼ö ÀÖ´Â ÇüÅ·ΠÄÄÆÄÀÏ µÇ¾î¼­ ÀúÀåµÈ´Ù.ÄÄÆÄÀÏ·¯´Â ´Ü ÇѰ³ÀÇ ¿ÀºêÁ§Æ®¸¦ »ý¼ºÇϴµ¥ ±×°ÍÀÌ Å¬·¡½º ¿ÀºêÁ§Æ®ÀÌ´Ù. ÀÌ Å¬·¡½º ¿ÀºêÁ§Æ®´Â Ŭ·¡½º¿¡ ´ëÇÑ ¸ðµç Á¤º¸¿¡ ´ëÇØ Á¢±ÙÀÌ °¡´ÉÇÏ´Ù. ÀÌ Å¬·¡½º ¿ÀºêÁ§Æ®´Â »õ·Î¿î °´Ã¼ÀÇ »ý¼º¿¡ ´ëÇÑ ¿ä±¸°¡ µé¾î¿À¸é Ŭ·¡½ºÀÇ Á¤ÀÇ¿¡ µû¶ó »õ·Î¿î ¿ÀºêÁ§Æ®¸¦ ¸¸µå´Â ±â´ÉÀ» °¡Áö°í ÀÖ´Ù.
Á¤È®ÇÏ°Ô ¸»ÇÑ´Ù¸é Ŭ·¡½º ¿ÀºêÁ§Æ®´Â ¿ÀºêÁ§Æ®ÀÇ ÇÁ·ÎÅäŸÀÔÀ» °¡Áö°í ÀÖÁö¸¸ ÀÚüÀûÀÎ ÀνºÅϽº º¯¼ö¸¦ °¡ÁöÁö ¾Ê±â¶§¹®¿¡ ±× ÀÚü°¡ Ŭ·¡½ºÀÇ ÀνºÅϽº´Â ¾Æ´Ï´Ù.
Ŭ·¡½º ¿ÀºêÁ§Æ®´Â ÄÄÆÄÀÏ µÉ¶§ ÁغñµÇ¾ú´Ù°¡ Äڵ尡 ±× Ŭ·¡½º¸¦ »ç¿ëÇϱâ Àü¿¡ ÃʱâÈ­ µÈ´Ù.
Ŭ·¡½º ¿ÀºêÁ§Æ®¸¦ ¾ò¾î¿À±â À§Çؼ­ -class: ¸Þ¼Òµå¸¦ »ç¿ëÇϴµ¥ ¿¹¸¦ µé¸é ´ÙÀ½°ú °°´Ù.
	Circle* c = [Circle new];
	Class circleClass = [c class];

¿ÀºêÁ§Æ¼ºê C ·±Å¸ÀÓÀÇ ¸ðµç ¿ÀºêÁ§Æ®´Â isa Çʵå·Î ½ÃÀÛÇϴµ¥ ±×°ÍÀº ±× ¿ÀºêÁ§Æ®ÀÇ Å¬·¡½º ¿ÀºêÁ§Æ®ÀÇ Æ÷ÀÎÅ͸¦ °¡Áö´Â °ÍÀÌ´Ù. Ŭ·¡½º ¿ÀºêÁ§Æ®´Â ±× ¿ÀºêÁ§Æ®°¡ °¡Áö´Â ÀνºÅϽº ¸Þ¼ÒµåµéÀ» °¡Áö¸ç °¢ Ŭ·¡½º ¿ÀºêÁ§Æ®´Â super_class¶ó´Â ºÎ¸ð Ŭ·¡½º ¿ÀºêÁ§Æ®ÀÇ Æ÷ÀÎÅ͸¦ °¡Áö°íÀÖ´Ù. ¹°·Ð ·çÆ® Ŭ·¡½º´Â super_class°¡ nilÀÌ´Ù.
·±Å¸ÀÓ¿¡¼­ ¸Þ¼Òµå¸¦ ºÎ¸£´Â °úÁ¤Àº ´ÙÀ½°ú °°´Ù.

1. ¸®½Ã¹öÀÇ isa ¸â¹ö¸¦ ÀÌ¿ëÇØ¼­ Ŭ·¡½º ¿ÀºêÁ§Æ®¸¦ ã´Â´Ù.
2. Ŭ·¡½º ¿ÀºêÁ§Æ®ÀÇ ¸Þ¼Òµå ¸®½ºÆ®¿¡¼­ ¸Þ¼Òµå¸¦ ã´Â´Ù.
3. ¸¸ÀÏ ¸Þ¼Òµå¸¦ ãÀ» ¼ö ¾ø´Ù¸é super_class Æ÷ÀÎÅ͸¦ ÀÌ¿ëÇØ¼­ ºÎ¸ð Ŭ·¡½º ¿ÀºêÁ§Æ®¸¦ ã´Â´Ù.
4. 2-3¹øÀ» ¸Þ¼Òµå¸¦ ãÀ»¶§±îÁö ¹Ýº¹ÇÑ´Ù.
5. ¸¸ÀÏ ³¡±îÁö ãÁö ¸øÇÑ´Ù¸é -forward:: ¸Þ¼Òµå¸¦ È£ÃâÇÑ´Ù. -forward:: ¸Þ¼Òµå´Â NSObject¿¡ Á¤ÀǵǾî ÀÖÀ¸¸ç µðÆúÆ® ¿ªÇÒÀº ÇÁ·Î±×·¥À» Á¾·á½ÃŰ´Â °ÍÀÌ´Ù.
6. ¸¸ÀÏ ¿ÀºêÁ§Æ®°¡ forwarding ¸Þ¼Òµå¸¦ ãÁö ¸øÇϸé ÇÁ·Î±×·¥Àº ¿¡·¯¸¦ ³»¸é¼­ Á¾·áÇÑ´Ù.
Ŭ·¡½º ¿ÀºêÁ§Æ®´Â ÀÏ¹Ý ¿ÀºêÁ§Æ®¿Í °°ÀÌ idº¯¼ö¿¡ Æ÷ÀÎÅ͸¦ ³ÖÀ» ¼öµµ ÀÖ°í ¸Þ½ÃÁöµµ ¹ÞÀ» ¼ö ÀÖ´Ù.

¡Ü Metaclass Objects

¿ÀºêÁ§Æ¼ºê C¿¡¼­´Â Ŭ·¡½º ¿ÀºêÁ§Æ®¿Í °°ÀÌ ¸ÞŸŬ·¡½º ¿ÀºêÁ§Æ®µµ Çϳª¾¿ »ý¼ºµÈ´Ù.
ÀνºÅϽº ¸Þ¼Òµå°¡ Ŭ·¡½º ¿ÀºêÁ§Æ®¿¡ ÀúÀåµÇ¾î Àִ°Ͱú ´Þ¸® Ŭ·¡½º ¸Þ¼Òµå´Â ¸ÞŸŬ·¡½º ¿ÀºêÁ§Æ®¿¡ ÀúÀåµÇ¾îÀÖ´Ù.
ÀÌ °æ¿ì¿¡µµ Ŭ·¡½º ¿ÀºêÁ§Æ®ÀÇ isa¿¡´Â ¸ÞŸŬ·¡½º ¿ÀºêÁ§Æ®°¡ ÀúÀåµÇ¾îÀÖ´Ù. ¸ÞŸŬ·¡½º ¿ÀºêÁ§Æ®¿¡¼­ ÀνºÅϽº¸¦ ã¾Æ³ª°¡´Â ¹æ¹ýÀº Ŭ·¡½º ¿ÀºêÁ§Æ®¿¡¼­¿Í °°´Ù.
Ŭ·¡½º ¸Þ¼ÒµåÀÇ isa¿Í´Â ´Ù¸£°Ô ¸ÞŸŬ·¡½º isa´Â ·çÆ® ¸ÞŸŬ·¡½º¸¦ °¡¸£Å°°í ÀÖ°í ·çÆ® ¸ÞŸŬ·¡½ºÀÇ ½´ÆÛŬ·¡½º´Â ·çÆ® ¿ÀºêÁ§Æ® Ŭ·¡½º¸¦ °¡¸®Å°°í ÀÖ´Ù.
ÀÌ ¸ÞŸŬ·¡½º ¿ÀºêÁ§Æ®´Â °³¹ßÀÚ°¡ ¼Õ´î ÇÊ¿ä´Â ¾ø´Ù.

(±×¸² 2) ÀνºÅϽº, Ŭ·¡½º ¿ÀºêÁ§Æ®, ¸ÞŸŬ·¡½ºÀÇ °ü°è

¡Ü ÀνºÅϽº »ý¼º

¾Õ¿¡¼­ À̾߱â ÇßµíÀÌ Å¬·¡½º ¿ÀºêÁ§Æ®ÀÇ ÁÖµÈ ±â´ÉÀº »õ·Î¿î ÀνºÅϽº¸¦ ¸¸µå´Â ÀÏÀÌ´Ù. alloc¸Þ¼Òµå´Â µ¿ÀûÀ¸·Î »õ·Î¿î ¿ÀºêÁ§Æ®ÀÇ ÀνºÅϽº º¯¼ö¸¦ ¸¸µé°í À̰ÍÀ» ¸ðµÎ 0À¸·Î ¼¼ÆÃÇÑ´Ù. À̰Ϳ£ ¾Õ¼­ À̾߱â ÇßµíÀÌ isaÇʵ忡 ´ëÇØ¼­´Â ¿¹¿ÜÀûÀε¥ isa¿¡´Â Ŭ·¡½º ¿ÀºêÁ§Æ®ÀÇ Æ÷ÀÎÅ͸¦ °¡Áø´Ù.
	id myCircle;
	myCircle = [Circle alloc];

¿ÀºêÁ§Æ®°¡ »ç¿ëµÇ°Ô ÇÒ·Á¸é »ç¿ë¿¡ Àû´çÇÑ ÃʱâÈ­°¡ ÇÊ¿äÇѵ¥ À̶§´Â init ¸Þ¼Òµå¸¦ ÀÌ¿ëÇÑ´Ù.
	myCircle = [[Circle alloc] init];

alloc¸Þ¼Òµå°¡ »õ·Î ¸¸µç ÀνºÅϽº¸¦ ¸®ÅÏÇÏ¸ç ±×°ÍÀº init ¸Þ½ÃÁö¸¦ ¹ÞÀ» ¼ö ÀÖÀ¸¸ç init ¸Þ¼Òµå´Â ÃʱâÈ­µÈ ¿ÀºêÁ§Æ®¸¦ ³Ñ±ä´Ù.

¡Ü Ŭ·¡½º ¿ÀºêÁ§Æ®¸¦ ÀÌ¿ëÇÑ »ç¿ëÀÚÈ­

Ŭ·¡½º ¿ÀºêÁ§Æ®°¡ ¿ÀºêÁ§Æ® ó·³ ´Ù·ïÁö´Â°ÍÀº ¾Æ¹« »ý°¢¾øÀÌ ¸¸µé¾î Áø°ÍÀÌ ¾Æ´Ï´Ù. À̰ÍÀº Ŭ·¡½º¸¦ ÀÌ¿ëÇØ¼­ ¿ÀºêÁ§Æ®¸¦ Ä¿½ºÅ͸¶ÀÌ¡À» ÇÒ ¼ö ÀÖ°Ô ÇØÁØ´Ù.
¸¸ÀÏ Æ¯Á¤ Å©±âÀÇ NSMatrixÀÇ ÀνºÅϽº°¡ ÀÖ´Ù°í ÇÏÀÚ, ÀÌ°Ô ¾î¶² ÇüÅÂÀÇ µ¥ÀÌŸ·Î ÀÌ·ç¾î Áú ¼ö Àִµ¥ ÀÌ NSMatrixÀÇ ÀνºÅϽº¿¡ Ŭ·¡½º ¿ÀºêÁ§Æ®¸¦ ³Ñ±â¹Ç·Î½á À̰ÍÀÌ ¹«½¼ ÇüÅÂÀÇ ¸ÅÆ®¸¯½ºÀÎÁö µ¿ÀûÀ¸·Î °áÁ¤ ÇÒ ¼ö ÀÖ°Ô ÇÑ´Ù.

¡Ü º¯¼ö¿Í Ŭ·¡½º ¿ÀºêÁ§Æ®

¾Õ¼­ ¼³¸íÇßµíÀÌ Å¬·¡½º ¿ÀºêÁ§Æ®¿¡´Â ÀνºÅϽº º¯¼ö°¡ ¾ø´Ù. °¢°¢ÀÇ ÀνºÅϽºÈ­µÈ ¿ÀºêÁ§Æ®°¡ °¢°¢ÀÇ ÀνºÅϽº º¯¼ö¸¦ °¡Áö´Âµ¥ Ŭ·¡½º ¿ÀºêÁ§Æ®¿¡´Â º¯¼ö¸¦ ³ÖÀ» ¼ö ¾ø´Ù. À̸»ÀÎÁï, Ŭ·¡½º º¯¼ö°¡ ¾ø´Ù´Â ¸»ÀÌ´Ù. Ŭ·¡½º ¿ÀºêÁ§Æ®´Â ±×°ÍÀÇ ¿ÀºêÁ§Æ®µéÀÇ ÀνºÅϽº º¯¼öµéÀÇ º¹»çº»µµ °¡Áú ¼ö ¾ø°í Á¢±Ù ÇÒ ¹æ¹ý ¸¶Á® ¾ø´Ù.
±×·¯¹Ç·Î ¸ðµç ÀνºÅϽºÈ­µÈ ¿ÀºêÁ§Æ®µéÀÌ º¯¼ö¸¦ °øÀ¯ÇÒ ¹æ¹ýÀÌ ÀÖ¾î¾ß ÇÑ´Ù. ÀÌ·± °æ¿ì Ŭ·¡½º ¼±¾ð ¹Û¿¡¼­ staticÀ¸·Î º¯¼ö¸¦ ¼±¾ðÇÏ´Â ¹æ¹ý ¹Û¿¡ ¾ø´Âµ¥ À̰æ¿ì »ó¼Ó¿¡¼­´Â Á¦¿ÜµÈ´Ù.

¡Ü Ŭ·¡½º ¿ÀºêÁ§Æ®ÀÇ ÃʱâÈ­

¸¸À» Ŭ·¡½º ¿ÀºêÁ§Æ®°¡ »ç¿ëµÉ·Á¸é ÀÏ¹Ý ¿ÀºêÁ§Æ®ÀÇ ÀνºÅϽºÈ­¿¡¼­¿Í ¸¶Âù°¡Áö·Î ÃʱâÈ­ µÇ¾î¾ß ÇÑ´Ù. ÇÁ·Î±×·¥ÀÌ Å¬·¡½º ¿ÀºêÁ§Æ®¸¦ ¾ó·ÎÄÉÀÌ¼Ç Çϴ°ÍÀÌ ¾Æ´Ï±â ¶§¹®¿¡ ¿ÀºêÁ§Æ¼ºê C´Â ´Ù¸¥ ¹æ¹ýÀ¸·Î ÇÁ·Î±×·¥ÀÌ Å¬·¡½º ¿ÀºêÁ§Æ®¸¦ ÃʱâÈ­ ÇÒ ¼ö ÀÖ°Ô ÇÑ´Ù.
·±Å¸ÀÓ ½Ã½ºÅÛÀº ¸ðµç Ŭ·¡½º ¿ÀºêÁ§Æ®¿¡°Ô ±× Ŭ·¡½º°¡ »ç¿ëµÇ±âÀü¿¡ ÃʱâÈ­ ÇÒ ¼ö ÀÖ°Ô initialize ¸Þ½ÃÁö¸¦ º¸³½´Ù. ¸¸ÀÏ ÃʱâÈ­°¡ ÇÊ¿ä¾ø´Ù¸é initialize ¸Þ¼Òµå¸¦ ±¸Çö ÇÏÁö ¾ÊÀ¸¸éµÈ´Ù. initialize ¸Þ¼Òµå´Â NSObject¿¡ ¼±¾ðµÇ¾î ÀÖÁö¸¸ ¾Æ¹«°Íµµ ±¸ÇöµÇ¾î ÀÖÁö ¾ÊÀº »óÅ·ΠÀÖ´Ù.
¸¸ÀÏ Å¬·¡½º¿¡¼­ staticÀ̳ª ±Û·Î¹ú º¯¼ö¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù¸é initialize ¸Þ¼Òµå¿¡¼­ ÃʱâÈ­ Çϴ°ÍÀÌ ÁÁÀ» °ÍÀÌ´Ù.

¡Ü ¼Ò½ºÄڵ忡¼­ÀÇ Å¬·¡½º À̸§

¼Ò½ºÄÚµå ³»¿¡¼­ Ŭ·¡½º À̸§Àº ´Ù¸¥ µÎ°¡Áö ¿ëµµ·Î »ç¿ëµÈ´Ù. Çϳª´Â µ¥ÀÌŸ ŸÀÔÀ¸·Î¼­ »ç¿ëµÇ´Â °ÍÀ̰í Çϳª´Â ¿ÀºêÁ§Æ®·Î »ç¿ëµÇ´Â °ÍÀÌ´Ù.
	Circle *anObject;
	anObject = [[Circle alloc] init];

¿©±â¼­ CircleÀº ¿ÀºêÁ§Æ®ÀÇ Å¸ÀÔ À̸§À¸·Î »ç¿ëµÇ¾ú´Ù.
¸Þ½ÃÁö ÀͽºÇÁ·¹¼Ç ³»¿¡¼­ ¸®½Ã¹ö·Î »ç¿ëµÇ¾úÀ»¶§´Â Ŭ·¡½º ¿ÀºêÁ§Æ®¸¦ ¸»ÇÑ´Ù.
	if ( [anObject isKindOfClass:[Circle class]] )
			:

ÀÌ °æ¿ì CircleÀº ¸®½Ã¹ö·Î¼­ Ŭ·¡½º ¿ÀºêÁ§Æ®·Î »ç¿ëµÈ °æ¿ìÀÌ´Ù.
ÀÌ·¸°Ô »ç¿ëÇÒ¶§ ¸¸ÀÏ Å¬·¡½º ¿ÀºêÁ§Æ®ÀÇ À̸§À» ·±Å¸ÀÓ¿¡¼­¸¸ ¾Ë ¼ö Àִ°æ¿ì objc_lookUpClass()ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù.
Áï,
	char *aBuffer;
		:
	if ( [anObject isKindOf:objc_lookUpClass(aBuffer)] )
		:




2. Ŭ·¡½º Á¤ÀÇ


¿ÀºêÁ§Æ¼ºê C¿¡¼­ Ŭ·¡½º´Â µÎ ÆÄÆ®·Î ³ª´²¼­ Á¤ÀÇ µÈ´Ù.
Çϳª´Â interface·Î Ŭ·¡½º À̸§À» Á¤ÇÏ°í ½´ÆÛ Ŭ·¡½º¸¦ Á¤ÇØÁÖ¸ç ¸Þ¼Òµå¿Í ÀνºÅϽº º¯¼öµéÀ» ¼±¾ðÇϴµ¥ »ç¿ëµÈ´Ù.
´Ù¸¥ Çϳª´Â implementationÀ¸·Î ¸» ±×´ë·Î ½ÇÁ¦·Î Ŭ·¡½º¸¦ ±¸ÇöÇÏ´Â °ÍÀÌ´Ù.
½±°Ô ¾Ë ¼ö ÀÖµíÀÌ interface´Â .hÆÄÀÏ¿¡ implementationÀº .m ÆÄÀÏ¿¡ ³Ö¾îÁÖ¸é µÉ°ÍÀÌ´Ù.
¹°·Ð ÇϳªÀÇ ÆÄÀÏ¿¡ ´Ù ³Ö¾îµµ µÇ°í ÇϳªÀÇ ÆÄÀÏ¿¡ Çϳª ÀÌ»óÀÇ Å¬·¡½º¸¦ ³Ö´Â°Íµµ °¡´ÉÇÏÁö¸¸ ±ÇÇÏÁö ¾Ê´Â ¹æ¹ýÀÌ´Ù.
ÈçÈ÷ ÆÄÀÏ À̸§Àº Ŭ·¡½º À̸§À» µû¶ó ÁöÀ¸¸ç .h¿Í .mÆÄÀÏ·Î ±¸¼ºµÈ´Ù.


1) interface

ÀÎÅÍÆäÀ̽º´Â @interface ÄÄÆÄÀÏ·¯ Áö½ÃÀÚ¿Í @endÁö½ÃÀÚ »çÀÌ¿¡ ÀÛ¼ºÇÏ¸é µÈ´Ù.
@interface ClassName : ItsSuperClass
{
	instance variable declarations
}

methods declarations

@end

ùÁÙÀº Ŭ·¡½º À̸§°ú ½´ÆÛ Ŭ·¡½º¸¦ Á¤ÇØÁØ´Ù. ¸¸ÀÏ Äݷаú ½´ÆÛŬ·¡½ºÀÇ À̸§ÀÌ ºüÁö°Ô µÇ¸é ÀÌ Å¬·¡½º´Â ·çÆ® Ŭ·¡½º·Î ¸¸µé¾îÁø´Ù. ÇÏÁö¸¸ ÀÌ·¸°Ô »ç¿ëÇϴ°ÍÀ» ±ÇÇÏÁö ¾Ê´Â´Ù. ¹«Á¶°Ç NSObject¸¦ »ó¼Ó ¹Þµµ·Ï ÇÏÀÚ.
ÀνºÅϽº º¯¼ö ¼±¾ðÀº C¿¡¼­¿Í °°Àº ¹æ¹ýÀ¸·Î ÇÏ¸é µÈ´Ù.
¿¹¸¦ µé¸é ¾Æ·¡¿Í °°Àº ½ÄÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù.
	float xPosition;
	float yPosition;
	NSColor *color;

ÀνºÅϽº º¯¼öÀÇ ½ºÄÚÇÁ¸¦ Á¤ÇØÁÖ±â À§Çؼ­ Á¦°øµÇ´Â Áö½ÃÀÚ´Â @private, @protected ±×¸®°í @publicÀÌ Á¦°øµÈ´Ù.
°¢°¢Àº ´ÙÀ½°ú °°Àº ÀǹÌÀÌ´Ù.


¿¹¸¦ µé¸é ´ÙÀ½°ú °°ÀÌ »ç¿ëµÈ´Ù.
@interface Worker : NSObject
{
	char *name;
@private
	int age;
	char *evaluation;
@protected
	id job;
	float wage;
@public
	id boss;
}

¸Þ¼Òµå´Â Å©°Ô Ŭ·¡½º ¸Þ¼Òµå¿Í ÀνºÅϽº ¸Þ¼Òµå µÎ°¡Áö·Î ³ª´©¾îÁö´Âµ¥ Ŭ·¡½º ¸Þ¼Òµå´Â °´Ã¼¸¦ ÀνºÅϽºÈ­ ½ÃŰÁö ¾Ê¾Æµµ Ŭ·¡½º ¿ÀºêÁ§Æ®¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ´Â °ÍÀ̰í ÀνºÅϽº ¸Þ¼Òµå´Â ¹Ýµå½Ã ÀνºÅϽºÈ­ µÈ ¸Þ¼Òµå¿¡¼­ »ç¿ë°¡´ÉÇÏ´Ù.
Ŭ·¡½º ¸Þ¼Òµå´Â ¾Õ¿¡ +±âÈ£¸¦ ºÙÀ̸ç ÀνºÅϽº ¸Þ¼Òµå ¾Õ¿¡´Â -±âÈ£°¡ ºÙ´Â´Ù.
¾Æ·¡´Â µÎ ¸Þ¼Òµå ¼±¾ðÀÇ ÇüÅ ÀÌ´Ù.
+ alloc;
- (void)display;

ÈçÇÏÁö´Â ¾ÊÁö¸¸ µ¿ÀÏÇÑ À̸§ÀÇ Å¬·¡½º ¸Þ¼Òµå¿Í ÀνºÅϽº ¸Þ¼Òµå¸¦ ¸¸µé ¼ö ÀÖÀ¸¸ç ¹Ý¸é ÀνºÅϽº ¸Þ¼Òµå¿Í ÀνºÅϽº º¯¼ö¸¦ °°Àº À̸§À¸·Î ¾²´Â°ÍÀº ¿ÀºêÁ§Æ¼ºê C¿¡¼­´Â ¸Å¿ì ÈçÇÑ ÀϷμ­ accessor¸Þ¼Òµå¸¦ ±¸ÇöÇÒ¶§ ¸¹ÀÌ º¸ÀδÙ.
¿¹¸¦ µé¸é ¿ÀºêÁ§Æ®¿¡ count¶ó´Â ÀνºÅϽº º¯¼ö°¡ ÀÖ´Ù¸é count¶ó´Â ÀνºÅϽº ¸Þ¼Òµå¸¦ ¸¸µé¾î countÀÇ °ªÀ» °¡Á®¿À´Âµ¥ »ç¿ëÇÑ´Ù. int countÀÇ accessor ¸Þ¼Òµå´Â ´ÙÀ½°ú °°ÀÌ ¸¹ÀÌ ¾²´Âµ¥, ÀÚ¹Ù °°Àº ¾ð¾î¿Í ´Þ¸® ÈçÈ÷ get...À¸·Î ½ÃÀÛÇÏÁö ¾Ê°í ¹Ù·Î ±× º¯¼öÀ̸§°ú µ¿ÀÏÇÑ ¸Þ¼Òµå À̸§À» »ç¿ëÇÑ´Ù.
- (int)count;
- (void)setCount:(int)aCount;

¶ÇÇÑ ¸Þ¼ÒµåÀÇ À̸§Àº º¸Åë ù±ÛÀÚ¸¦ ¼Ò¹®ÀÚ·Î ½ÃÀÛÇϸç Áß°£¿¡ Àб⠽±°Ô ´ë¹®ÀÚ¸¦ ¼¯¾î ÁØ´Ù.
¸¸ÀÏ ¸Þ¼ÒµåÀÇ ¸®ÅÏ °ªÀÇ ÇüÀ» Á¤È®È÷ ¸í½ÃÇØ ÁÖÁö ¾ÊÀ¸¸é ±âº»ÀûÀ» id¸¦ ¸®ÅÏÇÏ°Ô µÇ¸ç Çϳª ÀÌ»óÀÇ ¸Å°³º¯¼ö°¡ ÀÖÀ»¶§´Â º¯¼öÀ̸§°ú ÄÝ·ÐÀ¸·Î ±¸ºÐÇÏ°í °¡º¯ °¹¼öÀÇ º¯¼ö¸¦ ³Ñ±æ¶§´Â ÄÞ¸¶¸¦ »ç¿ëÇÑ´Ù°í ¾Õ¿¡¼­ À̾߱âÇÑ ¹Ù ÀÖ´Ù.
¿ÀºêÁ§Æ¼ºê CÀÇ ³ëÅ×À̼ÇÀº óÀ½ º¸¸é »ý¼ÒÇϰí Àбâ ÈûµéÁö¸¸ »ó´çÈ÷ Àç¹ÌÀÖ´Â ºÎºÐÀ̸ç Àͼ÷ÇØÁö¸é ¿ÀÈ÷·Á Àб⠽±°Ô ´À²¸Áú ¼öµµ ÀÖ´Ù. ¿ÀºêÁ§Æ¼ºê CÀÇ ¸Þ¼Òµå´Â ¾Æ·¡¿Í °°Àº ±¸Á¶ÀÌ´Ù.

celsius = [converter convertTemp: fahrenheit];
¦¦¦¡¦¨¦¡¦¥ ¦¦¦¡¦¨¦¡¦¥¦¦¦¡¦¡¦¨¦¡¦¡¦¥¦¦¦¡¦¡¦¨¦¡¦¡¦¥
returned value receiver method name argument

range = [string rangeOfString: @"Cocoa" options: NSLiteralSearch];
¦¦¦¨¦¥ ¦¦¦¨¦¥ ¦¦¦¡¦¡¦¨¦¡¦¡¦¥ ¦¦¦¨¦¥ ¦¦¦¨¦¥ ¦¦¦¡¦¡¦¨¦¡¦¡¦¥
returned receiver first part first second second argument
value of method name argument part of
method name

¸Å°³º¯¼ö¸¦ ÄÝ·ÐÀ¸·Î ºÐ¸®Çϰí ÄÝ·Ð ¾Õ¿¡ ±× ¸Å°³º¯¼ö¿¡ ´ëÇÑ ¼³¸íÀ» ºÙÀÏ ¼ö ÀÖ°Ô µÇ¾îÀÖ¾î Á¤È®ÇÑ ÇÔ¼öÀÇ ÇÁ·ÎÅäŸÀÔÀ» ¸ô¶óµµ ÀÌÇØ°¡ µÇ´Â °æ¿ì°¡ ¸¹À» »Ó¸¸ ¾Æ´Ï¶ó »õ·Î¿î ¸Þ¼Òµå¸¦ ¼³°èÇÒ¶§µµ Àß »ý°¢Çغ¸¸é ¹«Ã´ Á÷°üÀûÀÎ ¼³°è°¡ °¡´ÉÇÏ´Ù.


2) importing the interface

Ŭ·¡½º ÀÎÅÍÆäÀ̽º°¡ ÇÊ¿äÇÑ ºÎºÐ¿¡ ÀÎÅÍÆäÀ̽º¸¦ Æ÷ÇÔ½Ã۱â À§Çؼ­ #import Áö½ÃÀÚ¸¦ ÀÌ¿ëÇÏ¸é µÈ´Ù. À̰ÍÀº »ç¿ë¹ýÀÌ CÀÇ #include¿Í °°Áö¸¸ °°Àº ÆÄÀÏÀÌ µÎ¹ø Æ÷ÇÔµÇÁö ¾Ê´Â´Ù´Â°ÍÀÌ ´Ù¸£´Ù.
±×·¯¸é ¾Æ·¡¿Í °°ÀÌ µÈ´Ù.
#import "ItsSuperClass.h"

@interface ClassName : ItsSuperClass
{
	instance variable declarations
}

methods declarations

@end

ÀÌ·¸°Ô ÇØÁÖ¸é °£Á¢ÀûÀ¸·Î ¸ðµç »ó¼ÓÀÇ °ü°è¿¡ Àִ Ŭ·¡½ºµéÀÇ ÀÎÅÍÆäÀ̽º ÆÄÀϵéÀÌ Æ÷ÇԵȴÙ.


3) ´Ù¸¥ Ŭ·¡½ºÀÇ ÂüÁ¶

  1. import Áö½ÃÀÚ¸¦ »ç¿ëÇϸé NSObjectºÎÅÍ ¿¬°üµÈ ¸ðµç ÀÎÅÍÆäÀ̽º ÆÄÀϵéÀÌ Æ÷ÇÔµÇ°Ô µÈ´Ù. ¸¸ÀÏ ÀÌ °èÅë¿¡ ÇØ´çµÇÁö ¾Ê´Â Ŭ·¡½º¸¦ »ç¿ëÇϰí ÀÖ´Ù¸é ÀÓÆ÷Æ®¸¦ ÇØÁְųª @class Áö½ÃÀÚ¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù.
	@class Rectangle, Circle;

ÀÌ Áö½ÃÀÚ´Â ´ÜÁö ÄÄÆÄÀÏ·¯¿¡°Ô Rectangle°ú CircleÀÌ Å¬·¡½º À̸§À̶õ °Í¸¸ ¾Ë·ÁÁØ´Ù. ±×°ÍµéÀÇ ÀÎÅÍÆäÀ̽º ÆÄÀÏÀ» ÀÓÆ÷Æ®Çϴ°ÍÀº ¾Æ´Ï´Ù.
¸¸ÀÏ ¾î¶² Ŭ·¡½º¸¦ »ç¿ëÇϴµ¥ À־ ±× Ŭ·¡½ºÀÇ ¸Þ¼Òµå³ª ±âŸ »ó¼¼ÇÑ Á¤º¸°¡ ÇÊ¿äÄ¡ ¾ÊÀº °æ¿ì @class Áö½ÃÀÚ·Î ÃæºÐÇÏ´Ù. ÇÏÁö¸¸ ÀνºÅϽº¸¦ ¸¸µé°Å³ª ¸Þ½ÃÁö¸¦ º¸³½´Ù¸é Ŭ·¡½º ÀÎÅÍÆäÀ̽º´Â ¹Ýµå½Ã ÀÓÆ÷Æ® µÇ¾î¾ß ÇÑ´Ù.
¸¸ÀÏ A¶ó´Â Ŭ·¡½º¿Í B¶ó´Â Ŭ·¡½º°¡ Àִµ¥ A¶ó´Â Ŭ·¡½º¿¡¼­ B¶ó´Â Ŭ·¡½º°¡ ½ºÅÂÆ½ ŸÀÌÇεǾî ÀνºÅϽº º¯¼ö·Î »ç¿ëµÇ°í B¶ó´Â Ŭ·¡½º¿¡ A Å©·¡½º°¡ ½ºÅÂÆ½ ŸÀÌÇεǾî ÀνºÅϽº º¯¼ö·Î »ç¿ëµÇ¸é ÀϹÝÀûÀÎ #import¸¦ »ç¿ëÇÏ°Ô µÇ¸é ¼­·Î »óÈ£ ÂüÁ¶ÇÏ°Ô µÇ´Â °æ¿ì°¡ ÀÖ´Ù. ÀÌ·± °æ¿ì @class Áö½ÃÀÚ¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù.


4) implementation

Ŭ·¡½ºÀÇ ±¸ÇöÀº ÀÎÅÍÆäÀ̽º¿Í ºñ½ÁÇÏ°Ô @implementation Áö½ÃÀÚ¿Í @end Áö½ÃÀÚ »çÀÌ¿¡¼­ ÀÌ·ç¾îÁø´Ù. Ŭ·¡½ºÀÇ ±¸ÇöÆÄÀÏ¿¡´Â ¹Ýµå½Ã ±× Ŭ·¡½ºÀÇ ÀÎÅÍÆäÀ̽º ÆÄÀÏÀÌ ÀÓÆ÷Æ® µÇ¾î¾ß ÇÑ´Ù.
±âº»ÀûÀÎ implementationÀÇ ±¸Á¶´Â ¾Æ·¡¿Í °°´Ù.
#import "ClassName.h"

@implementation ClassName
method definitions
@end

Ŭ·¡½ºÀÇ ¸Þ¼Òµå µéÀº C ó·³ { } ¾È¿¡ ±¸ÇöµÈ´Ù.
+ (id)alloc
{
	...
}

- (BOOL)isFilled
{
	...
}

- (void)setFilled:(BOOL)flag
{
	...
}

°¡º¯ °¹¼öÀÇ ¸Å°³º¯¼ö´Â ¾Æ·¡¿Í °°ÀÌ ¾µ ¼ö ÀÖ´Ù.
#import <stdarg.h>

...

- (id)getGroup:group, ...
{
	va_list ap;
	va_start(ap, group);
	...
}


5) ÀνºÅϽº º¯¼öÀÇ »ç¿ë

ÀνºÅϽº ¸Þ¼Òµå¿¡¼­´Â ´ÜÁö À̸§À» »ç¿ëÇÏ´Â °ÍÀ¸·Î¸¸À¸·Îµµ °´Ã¼³»ÀÇ ¸ðµç ÀνºÅϽº º¯¼ö¸¦ »ç¿ëÇÒ ¼ö ÀÖÁö¸¸ ´Ù¸¥ Ŭ·¡½ºÀÇ ÀνºÅϽº¿¡¼­´Â ±×·² ¼ö ¾ø´Ù. ÀÌ·±°æ¿ì ½ºÅÂÆ½ ŸÀÌÇÎµÈ ¿ÀºêÁ§Æ®¿¡ ´ëÇØ¼­´Â ½ºÆ®·°Ãç Æ÷ÀÎÅÍ ¿ÀÆÛ·¹ÀÌÅÍÀÎ "->"¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
ÇÊÀÚ´Â ÀνºÅϽº º¯¼ö¸¦ ÀÌ·¸°Ô ¹Ù·Î »ç¿ëÇϴ°ÍÀ» º°·Î ±ÇÇÏ°í ½ÍÁö ¾Ê´Ù. Ç×»ó accessor ¸Þ¼Òµå¸¦ ÀÌ¿ëÇϴ°ÍÀÌ ÁÁ´Ù°í »ý°¢ÇÑ´Ù.
ÀνºÅϽº º¯¼öÀÇ ½ºÄÚÇÁ¿¡ ´ëÇØ¼­´Â ¾Õ¼­ ¼³¸íÇÑ ºÎºÐÀ» Âü°íÇϱ⠹ٶõ´Ù.



3. ¸Þ½ÃÁöÀÇ ÀÛµ¿ ¹æ½Ä


¿ÀºêÁ§Æ¼ºê C¿¡¼­´Â ÄÄÆÄÀÏÇÒ¶§ ¹ÙÀεù µÇÁö¾Ê°í ½ÇÇà½Ã°£¿¡ ¹ÙÀεù µÈ´Ù°í À̾߱â Çß¾ú´Ù.
¸¸ÀÏ ´ÙÀ½°ú °°Àº ±¸¹®ÀÌ ÀÖ´Ù°í ÇÏÀÚ
	[receiver message]

ÀÌ ¸Þ½ÃÁö È£ÃâÀº objc_msgSend()¸Þ½Ã¡ ÇÔ¼ö·Î ¹Ù²î¾î ºÒ¸°´Ù. ÀÌ ÇÔ¼ö´Â ¸®¼­¹ö¿Í ¸Þ½ÃÁö¿¡ ³ª¿À´Â ¸Þ¼Òµå À̸§À» Áß¿äÇÑ µÎ°³ÀÇ ¸Å°³º¯¼ö·Î °¡Áø´Ù.
	objc_msgSend(receiver, selector)

¸Þ½ÃÁö¿¡ ³Ñ¾î°£ ¸Å°³º¯¼öµé ¿ª½Ã ÀÌ ÇÔ¼ö¸¦ ÅëÇØ¼­ ³Ñ¾î°£´Ù
	objc_msgSend(receiver, selector, arg1, arg2, ...)

ÀÌ ¸Þ½Ã¡ ÇÔ¼ö Çϳª·Î ´ÙÀ̳ª¹Í ¹ÙÀεùÀÌ ½ÇÇöµÈ´Ù.
ÀÌ ÇÔ¼ö´Â ¸ÕÀú ¼¿·ºÅͰ¡ °¡¸®Å°´Â ¸Þ¼Òµå¸¦ ã´Â´Ù. °°Àº ¸Þ¼ÒµåµéÀÌ ´Ù¸¥ Ŭ·¡½º¿¡ ±¸Çö µÉ ¼ö Àֱ⠶§¹®¿¡(Æú¸®¸ðÇÇÁò) ÇØ´ç Ŭ·¡½º(Ŭ·¡½º ¿ÀºêÁ§Æ®)¿¡¼­ ã°Ô µÇ´Â°ÍÀÌ´Ù.
±×¸®°í ³ª¼­ ±× ¸Þ¼Òµå¸¦ È£ÃâÇϸ鼭 ¸®½Ãºù ¿ÀºêÁ§Æ®¸¦ ³Ñ±â°í ¸Þ¼Òµå¿¡ ÇØ´çÇÏ´Â ¸Å°³º¯¼öµéµµ ÇÔ²² ³Ñ±ä´Ù.
±×¸®°í ±× ¸Þ¼Òµå°¡ Á¾·áµÇ¸é ¸®ÅÏ °ªÀ» ¹Þ¾Æ¼­ ³Ñ±ä´Ù.
ÀÌ ¸Þ½Ã¡ ÇÔ¼ö´Â ÄÄÆÄÀÏ·¯°¡ ¾Ë¾Æ¼­ ºÒ·¯ÁÖ¸ç °³¹ßÀÚ°¡ Á÷Á¢ ´Ù·êÀÏÀº Àý´ë ¾ø´Ù.
¸Þ½Ã¡ÀÇ Áß¿äÇÑ ÇÙ½ÉÀº °¢ Ŭ·¡½º¿Í ¿ÀºêÁ§Æ®¿¡ ´ëÇØ ÄÄÆÄÀÏ·¯°¡ ¸¸µç ±¸Á¶¼Ó¿¡ ÀÖ´Ù. ¸ðµç Ŭ·¡½º ±¸Á¶´Â µÎ°³ÀÇ Áß¿äÇÑ ¿ä¼Ò¸¦ °¡Áö°í Àִµ¥,
ù°´Â ½´ÆÛŬ·¡½º¿¡ ´ëÇÑ Æ÷ÀÎÅÍÀ̰í
µÎ¹øÂ°´Â Ŭ·¡½º dispatch tableÀÌ´Ù. ÀÌ Å×ÀÌºí¿¡´Â °¢ Ŭ·¡½º¿¡ ÇØ´çÇÏ´Â ¸Þ¼ÒµåµéÀÇ ¸Þ¼Òµå ¼¿·ºÅÍÀÇ ¿£Æ®¸®¸¦ °¡Áö°í ÀÖ´Ù. À̰ÍÀº ƯÁ¤ ¸Þ¼ÒµåÀÇ ÇØ´çÇÏ´Â ÇÔ¼öÀÇ ÁÖ¼Ò¸¦ °¡Áö°í ÀÖ´Ù.
¾Õ¼­ À̾߱âÇÑ isa´Â °¢ ÀνºÅϽº°¡ ¸¸µé¾îÁú¶§ ¸¸µé¾îÁö¸ç Ŭ·¡½º(Ŭ·¡½º ¿ÀºêÁ§Æ®)ÀÇ Æ÷ÀÎÅÍÀÌ´Ù. isa¸¦ ÅëÇØ¼­ ÀνºÅϽºÀÇ Å¬·¡½º ¿ÀºêÁ§Æ®¿¡ Á¢±ÙÇÏ¸ç ¶Ç ±× ¾È¿¡¼­ super_classº¯¼ö¸¦ ÀÌ¿ëÇØ¼­ ½´ÆÛŬ·¡½ºµéÀ» ã¾Æ º¼ ¼ö ÀÖ´Ù.
À̰Ϳ¡ ´ëÇÑ ±¸Á¶´Â ¾Æ·¡¿Í °°ÀÌ µµ½ÄÈ­ µÉ ¼ö ÀÖ´Ù.


(±×¸²3) super_classº¯¼ö¸¦ »ç¿ëÇÑ ¸Þ¼Òµå °Ë»ö

¸¸ÀÏ °´Ã¼¿¡ ¸Þ½ÃÁö°¡ º¸³»Áö¸é isa¸¦ ÅëÇØ¼­ Ŭ·¡½º¸¦ ã¾Æ°¡¸ç ±×°÷ÀÇ dispatch tableÀÇ ¼¿·ºÅÍ ¿£Æ®¸®¿¡¼­ ¿øÇÏ´Â ¸Þ¼Òµå°¡ ¾øÀ¸¸é ´Ù½Ã ½´ÆÛŬ·¡½º·Î °¡¼­Ã£´Â´Ù. ÀÌ·±½ÄÀ¸·Î ãÀ»¶§±îÁö °è¼Ó °Å½½·¯ ¿Ã¶ó°¡¸é¼­ ¸Þ¼Òµå¸¦ ã°Ô µÇ´Â °ÍÀÌ´Ù.
ÀÌ·± ±¸Á¶´Â ¼ÓµµÀúÇϸ¦ °¡Á® ¿Ã ¼öÀֱ⠶§¹®¿¡ ½ÇÁ¦ ±¸ÇöµÈ ·±Å¸ÀÓ ½Ã½ºÅÛÀº ¹Ù·Î dispatch table¿¡¼­ ¸Þ¼Òµå¸¦ µÚÁöÁö ¾Ê°í ij½¬¸¦ ¸¸µé¾î¼­ ±×°÷À» ¸ÕÀú µÚÁø´Ù. ´öºÐ¿¡ Å« ¼Óµµ ÀúÇÏ´Â ¹ß»ýÇÏÁö ¾Ê´Â´Ù.


1) Selectors

È¿À²¼º ¶§¹®¿¡ ½ÇÁ¦ ÄÄÆÄÀÏµÈ Äڵ忡¼­´Â ¸Þ¼Òµå À̸§ÀÌ ¾Æ½ºÅ° ¹®ÀÚ¿­·Î 󸮵ÇÁö ¾Ê´Â´Ù. ´ë½Å ÄÄÆÄÀÏ·¯´Â °¢ ¸Þ¼ÒµåµéÀÇ À̸§À» Å×ÀÌºí¿¡ ³Ö¾îµÎ°í °¢°¢ÀÇ °íÀ¯ÇÑ ¾ÆÀ̵𸦠¸¸µç´Ù. À̰ÍÀÌ ½ÇÁ¦ ·±Å¸ÀÓ¿¡¼­ ƯÁ¤ ¸Þ¼Òµå¸¦ ÁöĪÇÏ°Ô µÉ °ÍÀÌ´Ù. ÄÄÆÄÀÏ µÈ ¼¿·ºÅÍ´Â SELÀ̶ó´Â Ưº°ÇÑ ÇüÀ¸·Î 󸮵Ǵµ¥ »ç¿ë°¡´ÉÇÑ ¼¿·ºÅÍ´Â 0ÀÌ ¾Æ´Ñ °ªÀÌ´Ù.
	SEL setWidth;
	setWidth = @selector(setWidth:);

¸¸ÀÏ ½ºÆ®¸µÀ» ¼¿·ºÅÍ·Î ·±Å¸Àӽà ¹Ù²Ü Çʿ䰡 ÀÖ´Ù¸é sel_getUid()ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù
	setWidth = sel_getUid(aBuffer);

¹Ý´ë·Î ¼¿·ºÅÍ¿¡¼­ ¸Þ¼Òµå À̸§À» ¾Ë¾Æ³¾ ¼öµµ ÀÖ´Ù
	char *methodName;
	methodName = sel_getName(setWidth);

ÄÄÆÄÀÏµÈ ¼¿·ºÅÍ´Â ¸Þ¼ÒµåÀÇ À̸§¿¡ ´ëÇÑ °ÍÀÌÁö ¸Þ¼ÒµåÀÇ ±¸Çö¿¡ ´ëÇÑ °ÍÀº ¾Æ´Ï´Ù. Áï °°Àº À̸§ÀÇ ¸Þ¼Òµå°¡ ´Ù¸¥ Ŭ·¡½º¿¡ Á¸ÀçÇϰí ÀÖ´Ù¸é °°Àº ¼¿·ºÅ͸¦ °¡Áú °ÍÀÌ´Ù. À̰ÍÀº Æú·Î¸ðÇÇÁò°ú ´ÙÀ̳ª¹Í ¹ÙÀεù¿¡¼­ Áß¿äÇÑ ºÎºÐÀÌ´Ù. °°Àº ¼¿·ºÅÍ¶óµµ ¹Þ´Â ¸®½Ã¹ö¿¡ µû¶ó¼­ ´Ù¸£°Ô ÇØ¼®µÇ´Â °ÍÀÌ´Ù.


2) self, super

¿ÀºêÁ§Æ¼ºê C¿¡¼­´Â ¸Þ¼Òµå ¾È¿¡¼­ ¿ÀºêÁ§Æ®¸¦ ÂüÁ¶Çϱâ À§ÇØ »ç¿ëÇÒ ¼ö ÀÖ´Â µÎ°³ÀÇ ¾î±¸¸¦ Á¦°øÇÑ´Ù. ±×°ÍÀº self¿Í super·Î self´Â ¿ÀºêÁ§Æ® ÀÚ½ÅÀ» super´Â ½´ÆÛŬ·¡½º¸¦ ÁöĪÇÑ´Ù.
¿¹¸¦ µé¾î¼­ ¿ÀºêÁ§Æ® Àڽſ¡°Ô ¸Þ½ÃÁö¸¦ º¸³»±â À§Çؼ­ self¸¦ »ç¿ëÇÑ´Ù.
	[self setValue:10.0];

±×¸®°í ½´ÆÛŬ·¡½º¿¡ ¸Þ½ÃÁö¸¦ º¸³»±â À§Çؼ­ super¸¦ »ç¿ëÇÑ´Ù. À̰ÍÀº init¸Þ¼Òµå¸¦ ±¸ÇöÇÒ¶§ ÀÚÁÖ º¸ÀδÙ.
	- (id)initWithFrame:(NSRect)frameRect
	{
	    self = [super initWithFrame:frameRect];
	    if ( self ) {
		...
	    }
	    return self;
	}

ÀÌ ¸Þ¼Òµå´Â ¸ÕÀú ½´ÆÛŬ·¡½º¸¦ ÃʱâÈ­ ÇÏ°í ±×°ÍÀ» self¿¡ ¹Þ¾ÆµÎ°í ½´ÆÛŬ·¡½ºÀÇ initÀÌ Á¤»óÀûÀ¸·Î ÀÛµ¿µÇ¾úÀ¸¸é, Áï self°¡ nilÀÌ ¾Æ´Ï¸é ÀÚ½ÅÀ» ÃʱâÈ­ÇÑ´Ù.
self¿¡ ¸Þ½ÃÁö°¡ Àü´ÞµÇ¸é ÀϹÝÀûÀÎ °æ¿ì¿Í °°ÀÌ ¸ÕÀú ÀÚ½ÅÀÇ Å¬·¡½º ¿ÀºêÁ§Æ®¿¡¼­ ¸Þ¼Òµå¸¦ ã´Â ÀÛ¾÷À» ÇÏÁö¸¸ super¿¡ ¸Þ½ÃÁö°¡ Àü´ÞµÇ¸é ÀÚ½ÅÀÇ Å¬·¡½º ¿ÀºêÁ§Æ®°¡ ¾Æ´Ñ ½´ÆÛŬ·¡½ºÀÇ Å¬·¡½º ¿ÀºêÁ§Æ®¿¡¼­ ±× ¸Þ¼Òµå¸¦ ã±â ½ÃÀÛÇÑ´Ù. super´Â ´ÜÁö ÄÄÆÄÀÏ·¯¿¡°Ô ¸Þ¼Òµå¸¦ ã±â ½ÃÀÛÇÏ´Â À§Ä¡¸¦ ¾Ë·ÁÁÙ »ÓÀÌ´Ù.
¹Ý´ë·Î self´Â ´Ù¾çÇÑ ¹æ¹ýÀ¸·Î »ç¿ëµÇ¾î Áú ¼öÀÖ´Â º¯¼ö·Î »õ·Î¿î °ªÀ» ³ÖÀ» ¼öµµ ÀÖ´Ù.
Ŭ·¡½º ¸Þ¼Òµå¸¦ ºÎ¸£´Â ¸Þ½ÃÁö´Â Ŭ·¡½º ¿ÀºêÁ§Æ®¿¡¼­´Â ÀÛµ¿ÇÏÁö¸¸ Á¾Á¾ ÀνºÅϽº¿¡¼­´Â ÀÛµ¿ÇÏÁö ¾Ê´Â´Ù.
	+ (id)newRectOfColor:(NSColor *)aColor
	{
		self = [[self alloc] init];
		[self setPrimaryColor:aColor];
		return self;
	}

ÀÌ ¸Þ¼Òµå´Â Ŭ·¡½º ¸Þ¼ÒµåÀ̱⠶§¹®¿¡ ±âº»ÀûÀ¸·Î self´Â Ŭ·¡½º ¿ÀºêÁ§Æ®¸¦ °¡¸®Å²´Ù. Áï alloc ¸Þ½ÃÁö¸¦ ¹Þ´Â°ÍÀº Ŭ·¡½º ¿ÀºêÁ§Æ®ÀÌ´Ù. ±×·±µ¥ self´Â alloc ¸Þ½ÃÁö¸¦ ¹Þ¾Æ¼­ ÀνºÅϽºÈ­µÇ°í initÀ¸·Î ÃÖ±âÈ­µÈ µÚ ÀνºÅϽº·Î ÀçÁ¤ÀǵȴÙ.
±×·¡¼­ ±× »õ·Î¿î ÀνºÅϽº°¡ setPrimaryColor ¸Þ½ÃÁö¸¦ ¹Þ°Ô µÇ´Â°ÍÀÌ´Ù.
ÀÛµ¿Àº ÇϰÚÁö¸¸ À§ÀÇ ÄÚµå´Â ¾ÆÁÖ ÁÁÁö ¾ÊÀº ÄÚµåÀÌ´Ù. È¥µ¿À» ÇÇÇϱâ À§Çؼ­ À§ÀÇ ÄÚµå´Â ¾Æ·¡¿Í °°ÀÌ ¾²´Â°ÍÀÌ ÁÁ´Ù.
	+ (id)newRectOfColor:(NSColor *)aColor
	{
		id newInstance = [[self alloc] init];
		[newInstance setPrimaryColor:aColor];
		return newInstance;
	}

ÀÌ ¿¹¿¡¼­ Ŭ·¡½º ¸Þ¼Òµå¿¡¼­ ÀνºÅϽº¸¦ ÃʱâÈ­ Çϱâ À§ÇÑ ¸Þ½ÃÁö¸¦ º¸³½´Ù. ÇÏÁö¸¸ °ªÀ» ¼¼ÆÃÇϱâ À§ÇØ ÀνºÅϽº ¸Þ¼Òµå¿¡¼­ ó·³ ÀνºÅϽº º¯¼ö¿¡ ¹Ù·Î °ªÀ» ¾µ ¼ö´Â ¾ø´Ù. À̰ÍÀº Ŭ·¡½º ¸Þ¼ÒµåÀÇ ¸®½Ã¹ö(ÀÌ°Ô Å¬·¡½º ¿ÀºêÁ§Æ®ÀÌ´Ù.)°¡ ÀνºÅϽº º¯¼ö¸¦ °¡ÁöÁö ¾Ê±â ¶§¹®ÀÌ´Ù. ¸¸ÀÏ newInstanceº¯¼ö°¡ ½ºÅÂÆ½ ŸÀÌÇεǾú´Ù¸é ¾Æ·¡¿Í °°ÀÌ °ªÀ» ³ÖÀ» ¼ö ÀÖÀ»°ÍÀÌ´Ù.
	
         newInstance->value = aValue;



ÀÏ´Ü ¿ÀºêÁ§Æ¼ºê CÀÇ °¡Àå ±âº»ÀûÀÎ ºÎºÐµé¿¡ ´ëÇØ¼­ »ìÆìº¸¾Ò´Ù. À̰ÍÀÌ ¿ÀºêÁ§Æ¼ºê C¾ð¾îÀÇ ¸ðµç°ÍÀº ¾Æ´Ï´Ù. ´ÙÀ½´Þ¿¡´Â Ä«Å×°í¸®¿Í ÇÁ·ÎÅäÄÝ¿¡ ´ëÇØ¼­ ¾Ë¾Æº¼ °ÍÀÌ¸ç ·±Å¸ÀÓ ½Ã½ºÅÛ¿¡ ´ëÇØ¼­µµ Á¶±Ý ´õ º¸ÃæÀ» ÇÒ ³»¿ëÀÌ ÀÖ´Ù. ³»¿ëÀÌ Á» º¹ÀâÇÒÁöµµ ¸ð¸£°Ú´Ù. ÇÏÁö¸¸ C¾ð¾î¸¸ Àͼ÷ÇÏ´Ù¸é ÇöÀç±îÁöÀÇ ³»¿ëÀ» Àß µé¿©´Ù º»´Ù¸é ¿ÀºêÁ§Æ¼ºê C¾ð¾î°¡ ¾î¶»°Ô ±¸¼ºµÇ¾îÁ® ÀÖ´ÂÁö ±× ¼Ó»çÁ¤±îÁö Àß ¾Ë ¼ö ÀÖÀ»°ÍÀ̶ó°í »ý°¢ÇÑ´Ù.
¸¸ÀÏ ¿ÀºêÁ§Æ¼ºê C¿¡ ´ëÇØ¼­ ´õ ±Ã±ÝÇÏ°í ³»ºÎ¸¦ ´õ ÆÄ°í µé¾î°¡°í ½Í´Ù¸é ¼Ò½º°¡ °ø°³µÈ GNUstepÀ» Âü°íÇϴ°͵µ ÁÁÀ»°ÍÀÌ´Ù. ¹°·Ð ¿¬ÀçÀÇ Áß½ÉÀÌ µÇ´Â Mac OS X¿¡¼­ÀÇ ¿ÀºêÁ§Æ¼ºê C/ÄÚÄھư¡ GNUÀÇ ¿ÀºêÁ§Æ¼ºê C/GNUstep°ú Á¶±ÝÀº ´Ù¸¥ Á¡ÀÌ ÀÖ±â´Â ÇÏ´Ù. ±×·¸Áö¸¸ ±âº»ÀûÀÎ ¸Æ¶ô¿¡¼­´Â °°Àº°ÍÀ̱⠶§¹®¿¡ ÃæºÐÈ÷ µµ¿òÀÌ µÇ¸®¶ó°í »ý°¢ÇÑ´Ù.

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