| OSXDEV.ORG Mac OS X °³¹ßÀÚ Æ÷·³ |
|
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-CObjective-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.htmlOpenStepÀÚü°¡ óÀ½ºÎÅÍ ±Ô¾àÀ̾ú±â ¶§¹®¿¡ ´Ù¾çÇÑ Ç÷§Æû¿¡¼ Áö¿øµÉ ¼ö ÀÖ°í (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++¿¡¼¿Í ¸¶Âù°¡Áö·Î ¸Þ¼Òµå´Â ±× ¿ÀºêÁ§Æ®ÀÇ ÀνºÅϽº º¯¼ö¸¦ ÀÚµ¿ÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¿ª½Ã ´Ù¸¥ °´Ã¼¿¡ ÀÖ´Â °ªÀÌ ÇÊ¿äÇÏ´Ù¸é ¸Þ¼ÒµåÀÇ ¸Å°³º¯¼ö·Î ¹Þ¾Æ¾ß ÇÑ´Ù. ¸Þ½ÃÁö¿¡ ´ëÇÑ ´õ »ó¼¼ÇÑ ³»¿ëÀº µÚ¿¡ ´Ù½Ã ´Ù·ç°Ô µÉ °ÍÀÌ´Ù. ?¸Þ½ÃÁö¿Í ¸Þ¼Òµå¶õ ¸»ÀÌ È¥¿ëµÇ¾î »ç¿ëµÇ¾ú´Ù. ÀÌ ºÎºÐ¿¡ ´ëÇØ¼´Â µÚ¿¡ ³ª¿À´Â ¼³¸íÀ» ÀÐ°í ³ª¸é Á» ´õ ÀÌÇØ°¡ µÉ °ÍÀÌ´Ù. °¡²ûÀº Á¤È®ÇÏ°Ô ÀÌ µÑÀ» ±¸ºÐÇϴ°ÍÀÌ ¹«ÀǹÌÇØÁú¶§µµ ÀÖÁö¸¸ ÇÊÀÚ°¡ ÀϺη¯ ¸Þ½ÃÁö¶õ°ÍÀ» °Á¶Çß´Ù. ¡Ü PolymorphismPolymorphism¿¡ ´ëÇØ À̾߱â Çϱâ Àü¿¡ ±âÁ¸ÀÇ 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¸¦ ±¸ÇöÇϰí ÀÖ¾î¾ß ÇÏÁö¸¸ ¸»ÀÌ´Ù. ´ç¿¬È÷ ƯÁ¤ °´Ã¼°¡ ƯÁ¤ ¸Þ¼Òµå¸¦ ±¸ÇöÇϰí ÀÖ´ÂÁö ·±Å¸Àӽÿ¡ È®ÀÎ ÇÒ ¼ö ÀÖ´Â ¹æ¹ýµµ Á¦°øÇÑ´Ù. ¾óÇÍ º¸¸é ÀÌ°Ô Â÷À̰¡ ¾ó¸¶³ª ³¯±î ½Í´Ù. ÇÏÁö¸¸ ¸¹Àº Â÷À̰¡ ³´Ù. ¡Ü ClassObjective-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) ´Ù¸¥ Ŭ·¡½ºÀÇ ÂüÁ¶
@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
Since 2001, OSXDEV.ORG |