lecture Home > .NET > JavaScript OOP

JavaScript OOP Programming

   °­Á ÃÖÃÊ ÀÛ¼ºÀÏ : 2007³â 10¿ù 03ÀÏ
   °­Á ÃÖÁ¾ ¼öÁ¤ÀÏ : 2007³â 10¿ù 16ÀÏ

   °­Á ÀÐÀ½ ¼ö : ȸ

   ÀÛ¼ºÀÚ : È÷µùÅ©(Á¤ ¼®¸ð)
   ÆíÁýÀÚ : Taeyo(±è Å¿µ)

   °­Á Á¦¸ñ : JavaScript OOP ÄÚ¾î ÀÚ¹Ù½ºÅ©¸³Æ® °´Ã¼¿Í prototype¸¦ »ç¿ëÇÑ °´Ã¼ È®Àå

°­ÁÂ Àü ÇÊÀÚÀÇ Àâ´ã>

À̹ø °­Á´ Å¿À´å³Ý¿¡¼­ Ȱµ¿ ÁßÀÎ Micosoft MVP ÀÎ Á¤¼®¸ð´ÔÀÇ °­ÁÂÀÔ´Ï´Ù.
Á¤¼®¸ð´ÔÀº ÃÖ±Ù Ajax Design Patterns¶õ Ã¥À» ¹ø¿ªÇÏ¿© Ãâ°£Çϱ⵵ Çϼ̱¸¿ä.
Å¿À »çÀÌÆ®ÀÇ Talk °Ô½ÃÆÇ ½Ã»ðÀ̱⵵ ÇϽʴϴÙ.
ƯÀ¯ÀÇ °³±×ÀûÀÎ ¹®Ã¼°¡ ƯÇãÃâ¿ø ÁßÀÎ ÀÌ Ä£±¸ÀÇ Àç¹Ì³­ °­Á¿¡ Çѹø ºüÁ®º¸¼¼¿ä~


ÀÌ °­ÁÂÀÇ ¼ø¼­

°´Ã¼ÁöÇâ ÀÚ¹Ù½ºÅ©¸³Æ® ÇÁ·Î±×·¡¹Ö
    (1) ½ºÆ®·¹Äª
    (2) ÄÚ¾î ÀÚ¹Ù½ºÅ©¸³Æ® °´Ã¼¿Í prototypeÀ» »ç¿ëÇÑ °´Ã¼ È®Àå
    (3) »ç¿ëÀÚ Á¤ÀÇ °´Ã¼. ±×¸®°í »ó¼Ó°ú Àç»ç¿ë
    (4) ³ª¸¸ÀÇ ÇÁ·¹ÀÓ¿öÅ© ¸¸µé±â
°­Á ½ÃÀÛÀü 1ºÐ ½ºÇÇÄ¡

¸Å¿ì ¾È³çÇϽʴϴÙ! È÷µùÅ© ÀÔ´Ï´Ù!
¿°ÅëÀÌ Âɱ׶óµé¸¸ÇÑ ÃßÀ§°¡ ´Ù°¡¿À´Â ¿ÍÁß¿¡µµ ÄÚµù¿¡ ¿©³äÀÌ ¾ø´Â ¼Õ°¡¶ô °üÀýÀº ¾È³çµé ÇϽʴϱî!

°³¹ßÀÚÀÇ ¶¡³»´Â ¸íǰ ä³Î5¹ø Çâ¼öº¸´Ù Çâ±â·Ó´Ù°í ´©±º°¡°¡ ¸»Çß¾ú½À´Ï´Ù.
°¡Àå ¸Å·ÂÀûÀÎ ¶¡³»ÀÇ ¼ÒÀ¯ÀÚ°¡ ´©±¸ÀÎÁö¸¦ ã¾Æ³»´Â Àç±ÍÇÔ¼ö´Â ¾ÆÁ÷µµ ²¿¸®¸¦ ¹°°í ¼öÇà Áß ÀÔ´Ï´Ù.

Áö³­¹ø ½ºÆ®·¹Äª °­Á´ Àßµé º¸¼Ì³ª¿ä? °­Á ¾÷µ¥ÀÌÆ®°¡ ³Ê¹« ´Ê¾î¼­ ´Ù ±î Àâ¼ö¼Ì´Ù±¸¿ä? ¤Ì¤Ì
Á˼ÛÇÕ´Ï´Ù. ³ª¸§´ë·Î ¹Ù»Û ô ÇÏ´À¶ó ¸¹ÀÌ ´Ê¾ú½À´Ï´Ù. Çѹø¸¸ ºÁÁÖ½Ã¸é »ç¶ûÇØ µå¸³´Ï´Ù.

ÀÚ! À̹ø ½Ã°£ºÎÅÍ º»°ÝÀûÀÎ OOP °­Á¿¡ µé¾î °©´Ï´Ù.
±Í¸¦ ÂÐ~~²ý ¼¼¿ì°í ´«À» ±ô~ºý ±ô~ºý °Å¸®¸é¼­ °­Á¸¦ Àоî Áֽñ⠹ٶø´Ï´Ù.

ÀÚ!! Å« ¹Ú¼ö ÁÖ¼¼¿ä!!

ÄÚ¾î ÀÚ¹Ù½ºÅ©¸³Æ® °´Ã¼

ÀÚ¹Ù½ºÅ©¸³Æ®´Â ¸î °¡Áö ³»Àå °´Ã¼¸¦ °¡Áö°í ÀÖ½À´Ï´Ù. Áö±ÝºÎÅÍ ÀÚ¹Ù½ºÅ©¸³Æ®°¡ °¡Áö°í ÀÖ´Â ´ëÇ¥ÀûÀÎ ³»Àå °´Ã¼µéÀ» °£´ÜÇÏ°Ô ½Ã½ÄÇØ º¸µµ·Ï ÇϰڽÀ´Ï´Ù.

1. Object °´Ã¼

Object °´Ã¼´Â °¡Àå »óÀ§ ¼öÁØ(top-level)ÀÇ Àü¿ª(Global) °´Ã¼ÀÌ¸ç ºñ¾îÀÖ´Â(empty) ²®µ¥±â °´Ã¼ ÀÔ´Ï´Ù.

½ºÆÄ¸£Å¸ ¿Õ±¹¿¡ »ì´ø Object¾¾(19¼¼)´Â "³­ ¾Æ¹«Â¦¿¡µµ ¾µ¸ð°¡ ¾ø´Â °´Ã¼¾ß.." Çϸç ÀÚ±«°¨°ú ÇѼûÀ¸·Î ¿©·¯ ³¯À» º¸³»°í ÀÖ¾ú½À´Ï´Ù. ½Ã°£Àº Èê·¯ Èê·¯! Object¾¾´Â prototypeÀ̶õ ¾Æ¸§´ä°í ¸Å·ÂÀûÀÌ°í °ü´ëÇÑ ÇÁ·ÎÆÛƼ¸¦ ½ÅºÎ·Î ¸Â¾Æ µé¿©¼­ °áÈ¥À» Çß½À´Ï´Ù. ±×³à´Â Object¿¡°Ô Àڽۨ°ú Èñ¸ÁÀ» ¾È°Ü ÁÖ¾ú°í, ÀڽĵéÀ» ¼øÇ³¼øÇ³ ¸¹ÀÌ ³º°í ÇູÇÏ°Ô »ì¾Ò½À´Ï´Ù. ±× Áß »ç¶÷µé¿¡°Ô °¡Àå ¾Ë·ÁÁø ÀڽĵéÀÇ À̸§Àº "Á¦ÀÓ½º String", "¸¶°¡·¿ Number", "¼£·µ Date", "¸¶ÀÌŬ ºò Math", "Àª¸®¾ö Array" ÀÔ´Ï´Ù.

¹º ¾ê±â³Ä°í¿ä? ±×·¸½À´Ï´Ù! ÀÚ¹Ù½ºÅ©¸³Æ®ÀÇ ¸ðµç °´Ã¼´Â ÃÖ»óÀ§ ¼öÁØÀÇ Àü¿ª °´Ã¼ÀÎ Object·Î ºÎÅÍ ÆÄ»ýµÇ¾î È®Àå µÈ °ÍÀÔ´Ï´Ù. ±×°ÍÀÌ ¿©·¯ºÐÀÌ Á÷Á¢ ¸¸µç »ç¿ëÀÚ Á¤ÀÇ °´Ã¼¶óµµ ¸»ÀÌÁÒ.

¸î °¡Áö ´ëÇ¥ÀûÀÎ ÇÁ·ÎÆÛƼ¿Í ¸Þ¼­µå´Â ´ÙÀ½°ú °°½À´Ï´Ù.

- ÇÁ·ÎÆÛƼ
1. constructor : »ý¼ºÀÚ ¸Þ¼­µå¸¦ ¸í½Ã ÇÕ´Ï´Ù.
2. prototype : Ãß°¡ÀûÀÎ ¸Þ¼­µå¿Í ÇÁ·ÎÆÛƼ¸¦ ¸í½ÃÇÒ ¼ö ÀÖ´Â ¸Å·Â ¸¸Á¡ÀÇ ÇÁ·ÎÆÛƼ ÀÔ´Ï´Ù.

- ¸Þ¼­µå
1. hasOwnProperty( s ) : ÇØ´ç ÇÁ·ÎÆÛƼ°¡ Á¸Àç ÇÏ´ÂÁö¸¦ ºÒ¸®¾ð Çü½ÄÀ¸·Î ¹Ýȯ ÇÕ´Ï´Ù.
2. toString() : °´Ã¼ÀÇ »óŸ¦ ¹®ÀÚ¿­ Çü½ÄÀ¸·Î ¹Ýȯ ÇÕ´Ï´Ù.
3. isPrototypeOf( o ) : ´Ù¸¥ °´Ã¼·ÎºÎÅÍ È®Àå µÇ¾ú´ÂÁö¸¦ ºÒ¸®¾ð Çü½ÄÀ¸·Î ¹Ýȯ ÇÕ´Ï´Ù.
ÀÌ·¸µí Object °´Ã¼´Â °´Ã¼¸¦ È®ÀåÇϱâ À§ÇÑ ÇÁ·ÎÆÛƼ¿Í ¸Þ¼­µåµéÀ» °¡Áö°í ÀÖ½À´Ï´Ù. ³ª¸ÓÁö °´Ã¼µéÀº ¸ðµÎ°¡ Àß ¾Ë°í ÀÖ´Â ³»¿ëÀÌ´Ï °£´ÜÇÑ ¼³¸í°ú ¸í¼¼ ¸µÅ©·Î ´ë½Å ÇϰڽÀ´Ï´Ù.

2. String °´Ã¼

String °´Ã¼´Â ¹®ÀÚ¿­(¿¬¼ÓÀûÀÎ ¹®ÀÚµéÀÇ ¿¬¼Ó) Çü½ÄÀÇ µ¥ÀÌÅ͸¦ ´Ù·ç´Â °´Ã¼ÀÔ´Ï´Ù.

   String °´Ã¼ÀÇ ¸í¼¼ º¸±â

3. Number °´Ã¼

Number °´Ã¼´Â ¼ýÀÚ Çü½ÄÀÇ µ¥ÀÌÅ͸¦ ´Ù·ç´Â °´Ã¼ÀÔ´Ï´Ù.

   Number °´Ã¼ÀÇ ¸í¼¼ º¸±â

4. Math °´Ã¼

Math °´Ã¼´Â ¼öÇÐÀûÀÎ °è»êÀ» ´Ù·ç´Â °´Ã¼ÀÔ´Ï´Ù.

   Math °´Ã¼ÀÇ ¸í¼¼ º¸±â

5. Array °´Ã¼

Array °´Ã¼´Â °´Ã¼ÀÇ ¿¬¼ÓÀûÀÎ ¹è¿­À» ´Ù·ç´Â °´Ã¼ÀÔ´Ï´Ù.

   Array °´Ã¼ÀÇ ¸í¼¼ º¸±â

6. Date °´Ã¼

Date °´Ã¼´Â ³¯Â¥ Çü½ÄÀÇ µ¥ÀÌÅ͸¦ ´Ù·ç´Â °´Ã¼ÀÔ´Ï´Ù.

   Date °´Ã¼ÀÇ ¸í¼¼ º¸±â


ÀÚ¹Ù½ºÅ©¸³Æ® °´Ã¼ ÀνºÅϽº »ý¼º

ÀÚ!! Áö±Ý±îÁö ÄÚ¾î °´Ã¼µéÀ» ¾Ë¾Æº¸¾Ò½À´Ï´Ù. À§¿¡¼­ »ìÆìº» °´Ã¼ ¸í¼¼¿¡ µû¶ó °´Ã¼ ÀνºÅϽº¸¦ »ý¼ºÇØ º¸ÀÚ±¸¿ä~ ½Ç½À¿¡ ÇÊ¿äÇÑ Áغñ¹°Àº "new" Ű¿öµå ÀÔ´Ï´Ù.

°´Ã¼ÀÇ ÀνºÅϽº¸¦ »ý¼ºÀº ´ÙÀ½°ú °°ÀÌ new Ű¿öµå¿Í »ý¼ºÀÚ ¸Þ¼­µå¸¦ ¸í½ÃÇÔÀ¸·Î½á »ý¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù. ´ç¿¬ÇÑ À̾߱âÀÌÁö¸¸ °´Ã¼ÀÇ À̸§°ú »ý¼ºÀÚ ¸Þ¼­µåÀÇ À̸§Àº µ¿ÀÏ ÇÕ´Ï´Ù. ¾ÆÁÖ °£´ÜÇÑ ¿¹Á¦¸¦ »ìÆì º¸µµ·Ï ÇϰڽÀ´Ï´Ù. Simple is best!

1
2
 var o1 = new String("Hello My Girl"); //String °´Ã¼	
 var o2 = new Number(1024);            //Number °´Ã¼	

ÀÌÂë¿¡¼­ ¿¹»óµÇ´Â Áú¹®ÀÌ ÀÖ½À´Ï´Ù.

±è´ö¹è : ±è´ö¹è ÀÔ´Ï´Ù. var o = "Hello My Girl"; ó·³ ¼±¾ðÀ» ÇØµµ String °´Ã¼°¡ ¼±¾ðµÇÁö ¾Ê³ª¿ä?

ÁÁÀº Áú¹®ÀÔ´Ï´Ù. ±×·¯ÇÑ ¼±¾ðÀ¸·Î´Â °´Ã¼ÀÇ ÀνºÅϽº°¡ »ý¼ºµÇÁö ¾ÊÀ¸¸ç, ±×°ÍÀº ´ÜÁö ±âº» µ¥ÀÌÅÍ(Primitive Data)ÀÏ »ÓÀÔ´Ï´Ù. À§ÀÇ ¿¹Á¦Ã³·³ new Ű¿öµå¸¦ »ç¿ëÇØ¼­ String °´Ã¼ÀÇ ÀνºÅϽº°¡ »ý¼º µÈ ÈÄ ±× ÀνºÅϽºÀÇ Æ÷ÀÎÅ͸¦ º¯¼ö¿¡ ÇÒ´çÇÏ°í »ç¿ëÇÒ ¼ö ÀÖ¾î¾ß¸¸ ºñ·Î¼Ò °´Ã¼°¡ µÇ´Â °Í ÀÔ´Ï´Ù.

¸»¾¸ µå¸®´Â ¼ø°£ ±è´ö¹è¾¾°¡ ¶Ç ¼ÕÀ» µé¾î Áּ̳׿ä. ¶Ç ´Ù¸¥ Áú¹®ÀÌ ÀÖÀ¸½Å°¡ º¾´Ï´Ù. ´Ù °°ÀÌ µé¾îº¸µµ·Ï ÇÏÁÒ.

±è´ö¹è : ±è´ö¹è ÀÔ´Ï´Ù. ±×·¸´Ù¸é °´Ã¼ ÀνºÅϽºÀÇ »ç¿ëÀÌ ³¡³­ ´ÙÀ½ÀÇ ¸Þ¸ð¸® ÇØÁ¦´Â ¾î¶»°Ô Çϳª¿ä?

Á¤¸» Á¤¸» ÁÁÀº Áú¹®ÀÔ´Ï´Ù. °´Ã¼ ÀνºÅϽº Æ÷ÀÎÅ͸¦ ´ã°í ÀÖ´Â º¯¼ö¿¡ nullÀ» ÇÒ´ç Çϱ⸸ ÇÏ¸é µË´Ï´Ù. ´ÙÀ½°ú °°ÀÌ ¸»ÀÌÁÒ..

1
2
 var o1 = new String("Hello My Girl"); //String °´Ã¼	
 o2 = null;	

»ç½Ç ÀÚ¹Ù½ºÅ©¸³Æ®¿¡µµ °¡ºñÁö Ä÷ºÅÍ(garbage collector)¶ó´Â ¾²·¹±âÂ÷°¡ ÀÖ½À´Ï´Ù¸¸ 100%ÀÇ ½Å·Úµµ¸¦ °¡Áö°í ÀÖÁö ¾Ê½À´Ï´Ù. ¾²·¹±âÂ÷°¡ ã¾Æ³»Áö ¸øÇÑ ¾²·¹±â°¡ ¸Þ¸ð¸® ¾îµò°¡¿¡ ¼û¾îÀÖÀ» ¼ö Àֱ⠶§¹®ÀÌÁÒ(´ëÇ¥ÀûÀ¸·Î Ajax¿¡¼­ ÀÚÁÖ ¾²°Ô µÇ´Â À͸íÇÔ¼ö-closure function-°¡ ±×·¯ ÇÕ´Ï´Ù). ±â´ëÇÏÁö ¸øÇß´ø ¸Þ¸ð¸® ³¶ºñ°¡ °è¼ÓÇØ¼­ ´©ÀûµÇ¸é ºê¶ó¿ìÀúÀÇ ¸Þ¸ð¸® Á¡À¯À²ÀÌ ÇöÀúÈ÷ Áõ°¡ÇÏ°Ô µÇ¸ç, ±× °á°ú ¿ì¸®ÀÇ À¥ ¾îÇø®ÄÉÀ̼ÇÀº »ê¼Ò°¡ ºÎÁ·ÇÏ¿© ÇíÇí °Å¸®°Ô µÉ °ÍÀÔ´Ï´Ù.

ÀÌ·¯ÇÑ ¸Þ¸ð¸® ³¶ºñ¸¦ ÁÙÀ̱â À§Çؼ­ ¿ì¸® °³¹ßÀÚµéÀÌ ¾ÆÁÖ ¾à°£ÀÇ ¼ö°í¸¦ ÇØ¾ß ÇÕ´Ï´Ù. ¹Ýµå½Ã »ç¿ëÀÌ ³¡³­ °´Ã¼´Â null·Î ÃʱâÈ­¸¦ ½ÃÄÑ Á־ ÀνºÅϽº¸¦ »ç»ÓÈ÷ ¾²·¹±âÅë¿¡ ´ã´Â ¾ÆÁÖ °£´ÜÇÑ ¼ö°í·Î ¿ì¸®´Â Çàº¹ÇØÁú ¼ö ÀÖ½À´Ï´Ù.

ÇÑ ÁÙ ¿ä¾à : ÀνºÅϽº »ý¼º°ú ¸Þ¸ð¸® ÇØÁ¦´Â ¸Å¿ì ½±´Ù.
¶Ç ÇÑ ÁÙ ¿ä¾à : ÀÚ¹Ù½ºÅ©¸³Æ® °¡ºñÁö Ä÷ºÅͰ¡ ±Ã±ÝÇϽŠºÐÀº ¿ä¿À¿À¿À±â Ŭ¸¯!!


prototype!! ÀÚ¹Ù½ºÅ©¸³Æ® °´Ã¼¸¦ Æ©´×ÇØ¼­ »óÅ­ÇÑ ³¯°³¸¦ ´ÞÀÚ!!

ÀÚ~ ÀÌÁ¦ ¸Å·ÂÀûÀÎ prototypeÀ» »ç¿ëÇØ º¾½Ã´Ù. ÀÏ´Ü ¿¹Á¦ºÎÅÍ º¸ÀÚ±¸¿ä~ ¾ÆÁÖ ½±°í °£´ÜÇÏ´ä´Ï´Ù~

1
2
3
4
5
6
7
8
9
10
11
 String.prototype.myComment;
 String.prototype.getLength = function(){ return this.length; }
 String.prototype.toString    = function(){ return "±è´ö¹è´ÔÀÇ ¸» : " + this.valueOf(); }

 var o = new String("Hello My Girl");
 
 o.myComment = "This is Object";

 alert( o.myComment ); //"This is Object"
 alert( o.getLength() );   //13
 alert( o );                    //"±è´ö¹è´ÔÀÇ ¸» : Hello My Girl"

ÀÚ~ Á¦°¡ ¹«½¼ ÁþÀ» ÀúÁú·¯ ³õ¾ÒÀ»±î¿ä? ÀÏ´Ü Â÷±ÙÂ÷±Ù ¤¾î º¸°Ú½À´Ï´Ù.

1) String.prototype.myComment;
String °´Ã¼¿¡ myComment¶ó´Â ÇÁ·ÎÆÛƼ¸¦ Ãß°¡ Çß½À´Ï´Ù.

2) String.prototype.getLength = function(){ return this.length; }
String °´Ã¼¿¡ ¹®ÀÚ¿­ÀÇ ±æÀ̸¦ ¹ÝȯÇÏ´Â ¸Þ¼­µå¸¦ Ãß°¡ Çß½À´Ï´Ù.

3) String.prototype.toString = function(){ return "±è´ö¹è´ÔÀÇ ¸» : " + this.valueOf(); }
À̰ÍÀº String °´Ã¼ÀÇ »óÅÂ(¹®ÀÚ¿­)À» ¹ÝȯÇÏ´Â toString() ¸Þ¼­µå¸¦ ¿À¹ö¶óÀ̵ù(Overriding)ÇÑ °ÍÀÔ´Ï´Ù(¿À¹ö¶óÀ̵ùÀº »ó¼Ó¹ÞÀº °´Ã¼ÀÇ ¸Þ¼­µå¸¦ ´Ù½Ã Á¤ÀÇÇÏ´Â °Í ÀÔ´Ï´Ù). toString() ¸Þ¼­µå´Â °´Ã¼ »óÅÂÀÇ ¹®ÀÚ¿­ Ç¥ÇöÀ» ¹ÝȯÇÏ´Â Object °´Ã¼ÀÇ ¸Þ¼­µå À̸ç, À̸¦ »ó¼Ó¹ÞÀº ÄÚ¾î °´Ã¼¿¡ ¿À¹ö¶óÀ̵ù µÇ¾î ¹Ì¸® ±¸ÇöÀÌ µÇ¾î ÀÖ½À´Ï´Ù. ÇÏÁö¸¸ toString()ÀÌ ±¸ÇöµÇÁö ¾ÊÀº Object °´Ã¼¿Í HTML °´Ã¼µé, ±×¸®°í »ç¿ëÀÚ Á¤ÀÇ °´Ã¼¿¡¼­´Â "[Object]"¶ó´Â ¹®ÀÚ¿­ÀÌ ¹Ýȯ µË´Ï´Ù. ¿©·¯ºÐÀÌ Á÷Á¢ ¸¸µå½Å »ç¿ëÀÚ Á¤ÀÇ °´Ã¼ÀÇ »óŸ¦ ¹®ÀÚ¿­·Î Ç¥ÇöÇÏ°í ½Í´Ù¸é À§ÀÇ ¿¹Á¦Ã³·³ toString() ¸Þ¼­µå¸¦ Á÷Á¢ ±¸ÇöÇØ¾ß ÇÕ´Ï´Ù.

¿ì¸®´Â À§ÀÇ ¿¹Á¦¸¦ ÅëÇØ ±âº»ÀûÀÎ String °´Ã¼¿¡ 1°³ÀÇ ÇÁ·ÎÆÛƼ¿Í 1°³ÀÇ ¸Þ¼­µå Ãß°¡, ±×¸®°í 1°³ÀÇ ¸Þ¼­µå ¿À¹ö¶óÀ̵ùÀ» ±¸Çö Çß½À´Ï´Ù. ´ÜÁö prototype ÇÁ·ÎÆÛƼ Çϳª·Î ¸»ÀÌÁÒ. Ãß°¡ÀûÀÎ ÇÁ·ÎÆÛƼ/¸Þ¼­µåÀÇ »ç¿ë¹ýÀº À§ÀÇ ¿¹Á¦Ã³·³ ¾ÆÁÖ ½±°Ô ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿À¹ö·Îµù(Overloading)µµ ±Ã±ÝÇÏ´Ù°í¿ä? ¾Æ½±°Ôµµ ¿À¹ö·ÎµùÀº Áö¿øµÇÁö ¾Ê½À´Ï´Ù¸¸ ¸î °¡Áö ²Ä¼ö¸¦ »ç¿ëÇØ¼­ Á¦ÇÑÀûÀ¸·Î ±¸ÇöÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿À¹ö·Îµù¿¡ ´ëÇØ¼­´Â 4¹øÂ° ½Ã°£¿¡ ´Ù·ï º¸µµ·Ï ÇϰڽÀ´Ï´Ù.


¼¼ÁÙ ¿ä¾à

1. ÀνºÅϽº°¡ ¸Þ¸ð¸®¿¡ ÀÚ¸® Àâ¾Æ¾ß ÁøÁ¤ÇÑ °´Ã¼´Ù.
2. prototypeÀº ¿ø´õ°É½ºº¸´Ù ¿¹»Ú´Ù.
3. ÀÚ¹Ù½ºÅ©¸³Æ®¿¡¼­µµ ¿À¹ö¶óÀ̵ùÀÌ °¡´ÉÇÏ´Ù. prototypeÀÌ ÀÖÀ¸´Ï±î!

±×·³ ´ÙÀ½ ½Ã°£¿¡ ºË°Ú½À´Ï´Ù! ä³Î °íÁ¤!

°­Á ¸ñ·ÏÀ¸·Î..