lecture Home > .NET > JavaScript OOP

JavaScript OOP Programming

   °­Á ÃÖÃÊ ÀÛ¼ºÀÏ : 2007³â 11¿ù 13ÀÏ
   °­Á ÃÖÁ¾ ¼öÁ¤ÀÏ : 2007³â 11¿ù 24ÀÏ

   °­Á ÀÐÀ½ ¼ö : ȸ

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

   °­Á Á¦¸ñ : »ç¿ëÀÚ Á¤ÀÇ °´Ã¼. ±×¸®°í »ó¼Ó°ú Àç»ç¿ë

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

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


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

°´Ã¼ÁöÇâ ÀÚ¹Ù½ºÅ©¸³Æ® ÇÁ·Î±×·¡¹Ö
°­Á ½ÃÀÛ Àü 1ºÐ ½ºÇÇÄ¡

¸Å¿ì ¾È³çÇϽʴϴÙ! È÷µùÅ© ÀÔ´Ï´Ù!
JS OOP °­Á 3ÆíÀ» ±â´Ù·ÁÁֽŠ5õ800¿©¸í(ÀÚüÃßÁ¤)ÀÇ °³¹ßÀÚ ºÐµé²² ½É½ÉÇÑ Ä¯»çÀÇ ¸»¾¸À» µå¸³´Ï´Ù.

´©±º°¡°¡ ¿©·¯ºÐ²² "°´Ã¼(Object)¶õ ¹«¾ùÀԴϱî?"¶ó°í Áú¹®À» Çß½À´Ï´Ù.
¸Å¿ì ±âÃÊÀûÀÎ Áú¹®ÀÌ¸ç °£ º¸´Â Áú¹®ÀÌÁö¸¸ ¿©·¯ºÐÀº È®½ÇÇÏ°Ô ´ë´äÀ» ÇØ¾ß ÇÕ´Ï´Ù. ÀúÀÇ °­Á¸¦ ÀÐÀ¸½Å ¿©·¯ºÐÀº ÀÌ¹Ì °´Ã¼¿Í Ä£±¸´Ï±î¿ä!

ÀÌ·¸°Ô ´ë´ä ÇØ ÁÖ¼¼¿ä. "°´Ã¼´Â Unique Identyty(À̸§), State(¾îÆ®¸®ºäÆ®), Behavior(¸Þ¼­µå)¸¦ °¡Áø »ç¿ëÀÚ Á¤ÀÇ µ¥ÀÌÅÍ Å¸ÀÔÀÔ´Ï´Ù." ¹ßÀ½µµ ÀûÀýÇÏ°Ô ±¼·Á ÁÖ¼¼¿ä.

Áú¹®À» ´øÁø »ó´ë¹æÀº ÀÌ·¸°Ô ¸»ÇØÁÙ °Ì´Ï´Ù. "¿ì¿Õ¤»±»¤»"

¶Ç ÇѰ¡Áö! "Object"ÀÇ ¹ßÀ½Àº "¾Æ¾ÐÁ÷Æ®"ÀÔ´Ï´Ù. Ȥ½Ã ¿Ü±¹Àΰú ´ëÈ­ ÇÒ ÀÏ ÀÖÀ¸¸é "¿ÀºêÁ§Æ®"¶ó°í ÇÏÁö ¸¶¼¼¿ä. ¸ø ¾Ë¾Æ µéÀ» °¡´É¼ºÀÌ ÀÖ½À´Ï´Ù. ^^

ÀÚ ±×·³ °­Á ½ÃÀÛ ÇϰڽÀ´Ï´Ù!


»ç¿ëÀÚ Á¤ÀÇ °´Ã¼¸¦ ¸¸µé¾î º¸ÀÚ±¸¿ä!

ÀÚ ÀÌÁ¦ ³ª¸¸ÀÇ »ç¿ëÀÚ Á¤ÀÇ °´Ã¼¸¦ ¸¸µé¾î º¸°Ú½À´Ï´Ù! Áغñ¹°Àº ÅØ½ºÆ® ÆíÁý±â¿Í °Åµé ¼ö ÀÖ´Â ¿Þ¼ÕÀÔ´Ï´Ù. ÀÏ´Ü ¼Ò½ººÎÅÍ º¸½Ã°Ú½À´Ï´Ù.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
    function myClass( p )
    {
        this.Comment    = "³ª´Â »ç¿ëÀÚ Á¤ÀÇ °´Ã¼ÀÔ´Ï´Ù.";
        this.v1              = p;
        v2                    = "ÅÚ¹ÌÅÚ¹Ì";
    }

    function myClass_toString()
    {
        return "v1=" + this.v1;
    }

    function myClass_setValue( p )
    {
        this.v2 = p;
    }

    function myClass_getValue()
    {
        return this.v2;
    }

    myClass.prototype.toString         = myClass_toString;
    myClass.prototype.setValue        = myClass_setValue;
    myClass.prototype.getValue        = myClass_getValue;
    myClass.prototype.resetValue     = function(){ this.v1 = null; this.v2 = null; }

    var o = new myClass( "1" );   //ÀνºÅϽº¾ß »ý°Ü¶ó! »Ð!

    alert(o.Comment);                //³ª´Â »ç¿ëÀÚ Á¤ÀÇ °´Ã¼ÀÔ´Ï´Ù.
    alert(o.v1);                          //1
    alert(o.v2);                          //undefined
    alert(o);                              //v1=1
    o.resetValue(); 
    alert(o);                              //v1=null
    o.setValue("I am Private"); 
    alert(o.getValue());              //I am Private

EBS¿¡¼­ ±×¸²À» ±×¸®½Ã´ø ¹ä ¾ÆÀú¾¾°¡ ¸»¾¸ ÇϽʴϴÙ. "Âü ½±ÁÒ?"

¿ì¸®´Â ¿©±â¼­ ÇÑ °¡Áö Áß¿äÇÑ »ç½ÇÀ» ´«Ä¡ ç ¼ö ÀÖ½À´Ï´Ù. "¿ÀÀ×? functionÀº ÇÔ¼öÀÏ »ÓÀε¥ °´Ã¼¸¦ ¼±¾ðÇÒ ¶§ ¾²ÀÏ ¼ö ÀÖ¾î??"

±×·¸½À´Ï´Ù! ÀÚ¹Ù½ºÅ©¸³Æ®¿¡¼­´Â ÇÔ¼öµµ °´Ã¼ ÀÔ´Ï´Ù!

ÀÚ¹Ù½ºÅ©¸³Æ®¿¡¼­´Â ÇÔ¼ö(function)µµ °´Ã¼·Î Ãë±ÞµÇ¸ç, ¾îÆ®¸®ºäÆ®¿Í ¸Þ¼­µå ¶ÇÇÑ Á¸Àç ÇÕ´Ï´Ù. ÇÔ¼ö°¡ °´Ã¼·Î Ãë±ÞµÇ´Ï ´ç¿¬È÷ ÇÔ¼öÀÇ ÀνºÅϽºµµ »Ð ÇÏ°í »ý±â°ÚÁÒ. ÀÌ´Â ÀÚ¹Ù½ºÅ©¸³Æ®°¡ ´Ù¸¥ ¾ð¾î¿Í ´Ù¸¥ Á¡ Áß ÇѰ¡Áö ÀÔ´Ï´Ù(´Ù¸¥ ¾ð¾î¿¡¼­ ÇÔ¼ö´Â À̸§ ±×´ë·Î ÇÔ¼öÀÏ »ÓÀÔ´Ï´Ù). ´öºÐ¿¡ class Ű¿öµå ¾øÀ̵µ °´Ã¼¸¦ ½±°Ô Á¤ÀÇ ÇÒ ¼ö ÀÖ½À´Ï´Ù. (´ÙÀ½¿¡ ±âȸ°¡ µÇ¸é ÇÔ¼ö¿Í ±×¿¡ µû¸£´Â À̽´µé¿¡ ´ëÇØ¼­ Á¤¸®¸¦ ÇØ µå¸®°Ú½À´Ï´Ù.)

ÀÚ ±×·³ Á¦°¡ ¶Ç ¹«½¼ ÁþÀ» ¹ú¿´´ÂÁö¸¦ Â÷±ÙÂ÷±Ù ¾Ë¾Æ º¾½Ã´Ù!

 1
 2
 3
 4
 5
 6
    function myClass( p )
    {
        this.Comment    = "³ª´Â »ç¿ëÀÚ Á¤ÀÇ °´Ã¼ÀÔ´Ï´Ù.";
        this.v1              = p;
        v2                    = "ÅÚ¹ÌÅÚ¹Ì";
    }

µåµð¾î ¿ì¸®ÀÇ Ã¹ »ç¿ëÀÚ Á¤ÀÇ °´Ã¼¸¦ ¼±¾ðÇÏ´Â ¼ø°£ÀÔ´Ï´Ù. ¿ì¸®°¡ ¸¸µç °´Ã¼ÀÇ À̸§Àº "myClass" ÀÔ´Ï´Ù. ¾îÆ®¸®ºäÆ®´Â ¼¼ °³(Comment, v1, v2) ÀÔ´Ï´Ù. ¸Þ¼­µå´Â ¾ÆÁ÷ ¾ø½À´Ï´Ù¸¸ ¿ì¸®ÀÇ Ä£±¸ÀÎ prototypeÀÌ È®ÀåÀ» µµ¿Í ÁÙ °Ì´Ï´Ù.

±×·±µ¥ ¹«¾ð°¡ ´«¿¡ ¶ç´Â °ÍÀÌ ¼¼ °¡Áö ÀÖÁÒ?

ù ¹øÂ°, ÇÔ¼ö ¼±¾ð¿¡ ÀÎÀÚ°¡ ÀÖ´Ù! ÇÔ¼öÀÌÀÚ °´Ã¼ÀÎ myClassÀÇ ¼±¾ðÀº Constructor(»ý¼ºÀÚ)ÀÇ ¿ªÇÒÀ» ´ã´çÇϰí ÀÖ½À´Ï´Ù. ¿ì¸®°¡ ¾Ë°í ÀÖ´Â »ý¼ºÀÚÀÇ ¿ªÇÒÀº "¾îÆ®¸®ºäÆ® ÃʱâÈ­ Çϱâ"¿Í "¸Þ¸ð¸®¿¡ ³» ÀνºÅϽº ÀûÀçÇϱâ" ÀÔ´Ï´Ù. µû¶ó¼­, myClass »ý¼ºÀÚ´Â ¿ì¸®°¡ ±â´ëÇß´ø ¿ªÇÒµéÀ» ¼º½ÇÇÏ°Ô ¼öÇàÇÕ´Ï´Ù.

µÎ ¹øÂ°, this Ű¿öµå! this´Â ÀÚ±â ÀÚ½ÅÀ» ÂüÁ¶Çϴ Ű¿öµå ÀÔ´Ï´Ù.

¼¼ ¹øÂ°, ¿Ö v2¿¡´Â this Ű¿öµå¸¦ ¾²Áö ¾Ê¾Ò½À´Ï±î? OO(Object Oriented)ÀÇ Æ¯Â¡ Áß ÇѰ¡Áö°¡ ÀºÆó(Encapsulation)ÀÔ´Ï´Ù. ´«Ä¡ ä¼Ì³ª¿ä? this°¡ ÀÖ°í ¾ø°íÀÇ Â÷ÀÌ´Â Public°ú PrivateÀÇ ±¸ºÐÀÔ´Ï´Ù(¿ä°Å ¾ÆÁÖ Áß¿ä ÇÕ´Ï´Ù). this Ű¿öµå¸¦ »ç¿ëÇÏ¿© ¾îÆ®¸®ºäÆ®³ª ¸Þ¼­µå¸¦ ¼±¾ðÇϸé Public ¼±¾ðÀ̸ç, this Ű¿öµå¸¦ »ç¿ëÇÏÁö ¾Ê°í ¾îÆ®¸®ºäÆ®³ª ¸Þ¼­µå¸¦ ¼±¾ðÇϸé Private ¼±¾ðÀÔ´Ï´Ù. ÀÌ °ÍÀ» ½ÇÁ¦·Î »ç¿ëÇÒ ¶§¿¡´Â ½ÅÁßÇÏ°Ô »ç¿ëÇØ¾ß ÇÕ´Ï´Ù. ¸¸¾à Private·Î ¼±¾ðÇÑ ¾îÆ®¸®ºäÆ®¸¦ ¿ÜºÎ¿¡¼­ Á÷Á¢ ÂüÁ¶ÇϰíÀÚ ÇÑ´Ù¸é "undefined"°¡ ¹ÝȯµÇ±â ¶§¹®¿¡ ±â´ëÇÏÁö ¸ø Çß´ø ¿À·ù°¡ ¹ß»ýÇÒ ¼ö ÀÖÀ¸¸ç, ±èºÎÀå´Ô¿¡°Ô È¥³¯ ¼ö ÀÖ½À´Ï´Ù. ¿ì¸®´Â ÀûÀýÇÑ setter¿Í getter¸¦ ¸¸µé¾î ¼­ ±â´ëÇÏÁö ¸øÇß´ø ¿À·ù¸¦ ÁÙÀÏ ¼ö ÀÖ½À´Ï´Ù.


ÀÚ ÀÌÁ¦ °´Ã¼¿¡ »ìÀ» ºÙ¿© º¼ Â÷·ÊÁÒ? ´Ù °°ÀÌ ¿ÜÃÄ º¾½Ã´Ù. Help me~ My friend, prototype!

 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
    function myClass_toString()
    {
        return "v1=" + this.v1;
    }

    function myClass_setValue( p )
    {
        this.v2 = p;
    }

    function myClass_getValue()
    {
        return this.v2;
    }

    myClass.prototype.toString         = myClass_toString;
    myClass.prototype.setValue        = myClass_setValue;
    myClass.prototype.getValue        = myClass_getValue;
    myClass.prototype.resetValue     = function(){ this.v1 = null; this.v2 = null; }


¼¾½º°¡ Ãæ¸¸ÇϽŠ¿©·¯ºÐµéÀº ¸ðµÎ ´«Ä¡ ä¼ÌÁÒ? ¿ì¸®ÀÇ ¼ÒÁßÇÑ Ä£±¸ÀÎ PrototypeÀÇ µµ¿òÀ¸·Î ¼¼ °³ÀÇ »õ·Î¿î ¸Þ¼­µå( setValue, getValue, resetValue )¸¦ È®Àå ÇßÀ¸¸ç ÇÑ °³ÀÇ ¸Þ¼­µå( toString )À» ¿À¹ö¶óÀ̵ù(Overriding) Çß½À´Ï´Ù. ´«½ä¹Ì°¡ ÀÖÀ¸½Å ºÐµéÀº ÀÌ·¸°Ô Áú¹®À» ´øÁö½Ç °Ì´Ï´Ù.

"¿Ö 'resetValue' ¸Þ¼­µåÀÇ È®ÀåÀº ´Ù¸¥ ¼¼ °³ÀÇ ¼±¾ð°ú Ʋ¸®ÁÒ?"

°á·ÐºÎÅÍ ¸»ÇÏÀÚ¸é, myClass_toString, myClass_setValue, myClass_getValueó·³ ÇÔ¼öÀÇ ½Äº°ÀÚ(À̸§)À¸·Î ÇÒ´çÀ» ÇÏ´Â °æ¿ì´Â "ÇÔ¼ö Æ÷ÀÎÅÍ(Pointer)"¸¦ ÇÒ´çÇÏ´Â °æ¿ìÀ̸ç, resetValue´Â ÇÔ¼ö ¸®ÅÍ·²À» »ç¿ëÇÏ¿© ÇÔ¼ö¸¦ ÇÒ´çÇѰÍÀÔ´Ï´Ù. ÀÌ ¶§ ¿ø´õ°É½ºÀÇ ¾È¼ÒÈñ ¾¾°¡ ¸Å¿ì ±Ã±ÝÇϴٴ ǥÁ¤À¸·Î Áú¹®À» ´øÁý´Ï´Ù. ¾ÆÈï~

"¿Éºü! ÇÔ¼ö Æ÷ÀÎÅͰ¡ ¹¹¿¹¿ë? ÅÚ¹Ì ÅÚ¹Ì Å×Å×Å×Å×ÅÚ¹Ì"

¿ì¸®ÀÇ ¶Ç ´Ù¸¥ Ä£±¸ÀÎ ÀÚ¹Ù½ºÅ©¸³Æ® ¿£ÁøÀº ÀÚ¹Ù½ºÅ©¸³Æ® Äڵ带 ½ÇÇàÇϱâ Àü¿¡ Äڵ带 ¹Ì¸® ÆÄ½ÌÇØ¼­ °´Ã¼ÀÇ ÀνºÅϽº¸¦ ¸Þ¸ð¸®Á¦ ÀûÀç ½ÃÄÑ ³õ½À´Ï´Ù. ÀÌ ¶§, ÇÔ¼öÀÇ ÀνºÅϽºµµ ¸Þ¸ð¸®¿¡ ÀûÀç ½Ãŵ´Ï´Ù(ÇÔ¼öµµ °´Ã¼·Î Ãë±ÞµÇ±â ¶§¹®ÀÌÁÒ). °á±¹, ÇÔ¼öÀÇ ½Äº°ÀÚ¸¦ ÀÌ¿ëÇÑ ÇÒ´çÀº ½ÇÇà ½ÃÁ¡¿¡ "ÇÔ¼ö Æ÷ÀÎÅÍ(Pointer)"°¡ °¡¸®Å°°í ÀÖ´Â ÇÔ¼öÀÇ ³»¿ëÀ» º¹»çÇØ¼­ °´Ã¼¿¡ ³¢¿ö ³Ö´Â °ÍÀÔ´Ï´Ù.

ÇÔ¼ö Æ÷ÀÎÅ͸¦ »ç¿ëÇÏÁö ¾ÊÀº resetValue ¸Þ¼­µåÀÇ È®ÀåÀº ÇÔ¼ö ¸®ÅÍ·²(literal)À» »ç¿ëÇÑ È®ÀåÀÔ´Ï´Ù. Áï, ÇÔ¼öÀÇ ³»¿ëÀ» Á÷Á¢ ÇÒ´çÇÏ´Â °ÍÀÔ´Ï´Ù.

ÀÚ~ Áö±Ý±îÁö myClass¶ó´Â À̸§À» °¡Áø °´Ã¼¸¦ ¼³°è ÇßÀ¸´Ï ÀνºÅϽº¸¦ ¸¸µé¾î¼­ »ç¿ë ÇØ º¾½Ã´Ù.

28
    var o = new myClass( "1" );   //ÀνºÅϽº¾ß »ý°Ü¶ó! »Ð!

new Ű¿öµå¸¦ »ç¿ëÇØ¼­ °´Ã¼ÀÇ ÀνºÅϽº¸¦ »ý¼ºÇÑ ´ÙÀ½ "o"¶ó´Â º¯¼ö(°´Ã¼º¯¼ö)¿¡ ÇÒ´ç Çß½À´Ï´Ù. ÀÌ·± ÄÚµå´Â ´Ù¸¥ ¾ð¾î¿¡¼­´Â »ó»óÁ¶Â÷ ÇÒ ¼ö ¾ø´Â ÄÚµå ÀÌ¸ç °¡Â÷¾øÀÌ ¿¡·¯¸¦ »Ð ÇÏ°í ¶ç¿ó´Ï´Ù. ¿ø·¡´Â ´ÙÀ½°ú °°ÀÌ ¼±¾ðÀ» ÇØ¾ß ÇÏÁö¸¸,

myClass o = new myClass( "1" );

ÀÚ¹Ù½ºÅ©¸³Æ®ÀÇ °ü´ëÇÔ ´öºÐ¿¡ µ¥ÀÌÅÍ Å¸ÀÔÀ» ¸í½Ã ÇÏÁö ¾Ê¾Æµµ µË´Ï´Ù(¾Æ´Ï, Çϰí½Í¾îµµ ÇÒ ¼ö°¡ ¾ø½À´Ï´Ù. ¤Ì¤Ì)

30
31
32
33
    alert(o.Comment);                //³ª´Â »ç¿ëÀÚ Á¤ÀÇ °´Ã¼ÀÔ´Ï´Ù.
    alert(o.v1);                          //1
    alert(o.v2);                          //undefined
    alert(o);                              //v1=1


À§ÀÇ ÄÚµå´Â Á¢±ÙÀÚ ÂÀ(.)À» »ç¿ëÇØ¼­ ¸Þ¼­µåÀÇ ¾îÆ®¸®ºäÆ®¸¦ °æ°í â¿¡ »Ð~ Çϰí Ãâ·Â ÇÏ´Â ÄÚµå ÀÔ´Ï´Ù. À§ÀÇ Äڵ忡¼­ ´« ¿©°Ü º¸¾Æ¾ß ÇÒ ¶óÀÎÀº 32 ¶óÀΰú 33 ¶óÀÎÀÔ´Ï´Ù.

±× Àü¿¡! alert()¿¡ ´ëÇØ ¾à°£ÀÇ Å½±¸¸¦ ÇØ º¸°Ú½À´Ï´Ù. ¿ì¸®°¡ ¸Å¿ì¸Å¿ì ÀÚÁÖÀÚÁÖ »ç¿ëÇß¾ú´ø Àü¿ª ÇÔ¼ö alert()´Â ÀÎÀÚ·Î Á¦°øµÇ´Â °´Ã¼ÀÇ ¹®ÀÚ¿­ Ç¥ÇöÀÎ toString()À» È£Ãâ ÇÕ´Ï´Ù. ÀÎÀÚ·Î °´Ã¼°¡ Á¦°ø µÈ´Ù¸é ÇØ´ç °´Ã¼ÀÇ toString() ¿À¹ö¶óÀ̵ù(Overriding) ±¸ÇöÀ» ã¾Æº¾´Ï´Ù(lookup). ¸¸¾à toString()ÀÌ ±¸ÇöµÇÁö ¾Ê¾Ò´Ù¸é super °´Ã¼ÀÎ Object °´Ã¼ÀÇ toString() ¹Ýȯ °ªÀÎ "[object Object]"¸¦ Ãâ·ÂÇÕ´Ï´Ù. ¸ðµç °´Ã¼´Â Object¸¦ »ó¼Ó¹ÞÀº ÀڽĵéÀ̱⠶§¹®ÀÌÁÒ. ÀÌ °ÍÀÌ »ó¼Ó ¸ÞÄ¿´ÏÁòÀ̸ç OO(Object Oriented)ÀÇ ¸Å·Â Æ÷ÀÎÆ® Áß ÇϳªÀÔ´Ï´Ù.

ÇÏÁö¸¸ alert()ÀÇ ÀÎÀÚ·Î °´Ã¼°¡ Á¦°øµÇÁö ¾Ê°í ±âº» µ¥ÀÌÅÍ(Primitive Data)°¡ Á¦°ø µÈ´Ù¸é ¾î¶² ¸ÞÄ¿´ÏÁòÀ» ÅëÇØ ¹®ÀÚ¿­ÀÌ Ãâ·Â µÉ±î¿ä?

¿ì¸®ÀÇ ÀÚ¹Ù½ºÅ©¸³Æ® ¿£ÁøÀº ±âº» µ¥ÀÌÅ͸¦ ´Ù·ê ¶§ ÀûÀýÇÑ °´Ã¼( "Á¦ÀÓ½º String", "¸¶°¡·¿ Number", "¼£·µ Date", "¸¶ÀÌŬ ºò Math", "Àª¸®¾ö Array" )·Î ·¡ÇÎ(wrapping) ÇØ¼­ ´Ù·ì´Ï´Ù. ÀÌ´Â Çü ¾ÈÀü¼º(Type Safety)¸¦ À¯ÁöÇϱâ À§ÇÔÀÔ´Ï´Ù. °á±¹ alert()´Â Á¦°øµÈ ±âº» µ¥ÀÌÅÍ Å¸ÀÔ¿¡ ·¡ÇÎµÈ °´Ã¼ÀÇ toString() ±¸ÇöÀ» ã¾Æº¸°Ô µË´Ï´Ù(¹°·Ð Äھ ¹Ì¸® Á¤ÀǵǾî ÀÖ½À´Ï´Ù ^^).

¿À¿Ê! ÀÚ¹Ù½ºÅ©¸³Æ®ÀÇ °ü´ëÇÔ µÚ¿¡´Â ¾ÈÀü¼ºÀ» À¯ÁöÇÏ·Á´Â ³ë·ÂÀÌ Á¸ÀçÇϴ±º¿ä. ´«¹° ³ª°Ô °¨»çÇÕ´Ï´Ù. ¹¹ Çմϱî! ¹Ú¼ö Çѹø ÃÄ ÁÖ¼¼¿ä. ¦¦¦~~

ÀÌÁ¦ 32 ¶óÀΰú 33 ¶óÀÎÀ» »ìÆì º¸µµ·Ï ÇÏÁÒ!

- 32¶óÀÎ : alert(o.v2);
À§¿¡¼­ ¾ð±ÞÇßµíÀÌ v2´Â this Ű¿öµå¸¦ »ç¿ëÇÏÁö ¾Ê°í ¼±¾ðµÇ¾ú±â ¶§¹®¿¡ Private ¾îÆ®¸®ºäÆ® ÀÔ´Ï´Ù. µû¶ó¼­ ÀÚ¹Ù½ºÅ©¸³Æ® ¿£ÁøÀº Á÷Á¢ÀûÀÎ Á¢±Ù¿¡ ´ëÇØ °ú°¨È÷ "undefined"¸¦ ¹ÝȯÇÕ´Ï´Ù. ÀÌ·² ¶§ ÇÊ¿äÇÑ °ÍÀº? ±×·¸½À´Ï´Ù! ÀûÀýÇÑ setter¿Í getterÀÌ¸ç ¿ì¸®´Â ÀÌ¹Ì setValue¿Í getValue·Î ±¸ÇöÀ» ÇØ ³õ¾Ò½À´Ï´Ù. ^^v

- 33¶óÀÎ : alert(o);
¿ì¸®ÀÇ myClass °´Ã¼´Â toString() ¸Þ¼­µå¸¦ ¿À¹ö¶óÀ̵ù Ç߱⠶§¹®¿¡ ¹Ì¸® ¾à¼ÓÇÑ´ë·Î "v1=[v1ÀÇ °ª]"ÀÌ Ãâ·ÂµË´Ï´Ù.

°è¼Ó ÇØ¼­ ´ÙÀ½ ÄÚµå ³ª°©´Ï´Ù!

34
35
36
37
    o.resetValue(); 
    alert(o);                              //v1=null
    o.setValue("I am Private"); 
    alert(o.getValue());              //I am Private


¹Ù·Î À§¿¡¼­ ¼³¸íÇß´ø ÄÚµå¿Í º°¹Ý ´Ù¸¦ °ÍÀÌ ¾ø½À´Ï´Ù. ÇÏÁö¸¸ Private ¾îÆ®¸®ºäÆ®¿¡ Á¢±ÙÇÏ´Â setter¿Í getter¸¦ »ç¿ë Çß½À´Ï´Ù. ÀÌ¿Í °°ÀÌ º¯°æ¿¡ ¹Î°¨ÇÑ µ¥ÀÌÅ͵鿡 ´ëÇØ¼­´Â Private·Î ¼±¾ðÇØ¼­ Á¢±ÙÀ» Á¦ÇÑÀûÀ¸·Î Çã¿ëÇÏ´Â °ÍÀÌ ÁÁ½À´Ï´Ù.

ÀÚ! ¿ì¸®´Â ÀÌÁ¦±îÁö »ç¿ëÀÚ Á¤ÀÇ °´Ã¼¸¦ ¸¸µé°í Á÷Á¢ »ç¿ë ÇØ º¸¾Ò½À´Ï´Ù. ÀÌÁ¦ ¿©·¯ºÐÀº °´Ã¼¸¦ ¸¸µé¾î¼­ Àû¿ëÇÒ Áغñ°¡ µÇ¾î ÀÖ½À´Ï´Ù.



¾ÆºÎÁö! Àç»êÀ» Àú¿¡°Ô »ó¼Ó(Inheritance)ÇØ ÁÖ¼¼¿ä!

ÀÚ ÀÌÁ¦ºÎÅÍ º»°ÝÀûÀ¸·Î OO(Object Oriented)ÀÇ ´ëÇ¥ÀûÀΠƯ¡ÀÎ »ó¼ÓÀ» ´Ù·ç¾îº¸µµ·Ï ÇϰڽÀ´Ï´Ù.

µµ´ëü »ó¼Ó(Inheritance)Àº ¹ºµ¥?
  • ½¬¿î ºñÀ¯ #1 : ¾Æ¹öÁöÀÇ Àç»êÀ» ¾ÆµéÀÌ »ó¼Ó¹Þ´Â´Ù.
  • ½¬¿î ºñÀ¯ #2 : ¾ÆµéÀº ¾Æ¹öÁöÀÇ À¯ÀüÀû Ư¼º(¾îÆ®¸®ºäÆ®)°ú ½À°ü(¸Þ¼­µå)¸¦ ´à¾Æ°£´Ù(»ó¼Ó).
  • ºÎ¸ð °´Ã¼(super object)ÀÇ ¸ðµç °Í(¾îÆ®¸®ºäÆ®, ¸Þ¼­µå, »ý¼ºÀÚ)¸¦ ÀÚ½Ä °´Ã¼(sub object)°¡ »ó¼Ó¹Þ´Â´Ù.
  • ÀÚ½Ä °´Ã¼´Â ºÎ¸ð °´Ã¼°¡ »ó¼ÓÇØÁØ °ÍÀ» ÀçÁ¤ÀÇ ÇÒ ¼ö ÀÖ´Ù(ºÎ¸ð °´Ã¼ÀÇ ÀϹÝÈ­).
  • ModuleÀÇ °øÅëÀûÀÎ ºÎºÐÀ» ¹­À» ¼ö À־ µ¿ÀÏÇÑ Àǹ̸¦ °¡Áö´Â Äڵ带 ÇÑ ¹ø ÀÌ»ó ÀÛ¼ºÇÒ Çʿ䰡 ¾ø´Ù.
  • Àç»ç¿ë¼º, À¯Áöº¸¼ö¼º, È®À强ÀÇ ÀÌÁ¡À» ¾òÀ» ¼ö ÀÖ´Ù.

ÀÚ¹Ù½ºÅ©¸³Æ®¿¡¼­´Â °´Ã¼ÀÇ »ó¼Ó °ü°è¸¦ ¾î¶»°Ô ±¸Çö ÇÒ±î¿ä? »ç½Ç ÀÚ¹Ù½ºÅ©¸³Æ® 1.3 ¹öÀü ÀÌÇÏ¿¡¼­´Â »ó¼ÓÀ» ±¸ÇöÇÒ ¹æ¹ýÀÌ ¾ø¾ú½À´Ï´Ù. 1.3 ¹öÀüºÎÅÍ »ó¼ÓÀ» ±¸ÇöÇϱâ À§ÇÑ apply¿Í call ÇÔ¼ö¸¦ Á¦°øÇϱ⠽ÃÀÛÇß½À´Ï´Ù. ¿À´ÃºÎÅÍ apply¿Í call ÇÔ¼ö¸¦ Ä£±¸Ãß°¡ ÇØ ÁÖ¼¼¿ä.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
    function Father( p1, p2 )
    {
        this.FatherMoney = p1 * p2;
    }

    Father.prototype.Say = function(){ alert("¾ÆºÎÁöÀÇ ¿ëµ·Àº " + this.FatherMoney + "¿ø"); }

    function Son( p )
    {
         Father.call( this, p, 2 );
         this.SonMoney = p;  
    }

    Son.prototype                 = new Father();
    Son.prototype.Say          = function(){ alert("¾ÆµéÀÇ ¿ëµ·Àº " + this.SonMoney + "¿ø"); } 
    Son.prototype.FatherSay = function(){ Father.prototype.Say.call( this ); }

    var o = new Son(100);

    o.Say();
    o.FatherSay();

Á¶±Ý ÀÌÇØÇϱâ Èûµå½Å ºÎºÐÀÌ ÀÖÀ¸½Ç °Ì´Ï´Ù. Â÷±ÙÂ÷±Ù µû¶ó¿Í º¸¼¼¿ä. ^^

 1
 2
 3
 4
 5
 6
    function Father( p1, p2 )
    {
        this.FatherMoney = p1 * p2;
    }

    Father.prototype.Say = function(){ alert("¾ÆºÎÁöÀÇ ¿ëµ·Àº " + this.FatherMoney + "¿ø"); }

ºÎ¸ð °´Ã¼ÀÎ Father¸¦ ¼±¾ð Çß½À´Ï´Ù. FatherMoney¶ó´Â ¾îÆ®¸®ºäÆ®¿Í Say¶ó´Â ¸Þ¼­µå¸¦ °¡Áö°í ÀÖ½À´Ï´Ù.

 8
 9
10
11
12
13
14
15
16
    function Son( p )
    {
         Father.call( this, p, 2 );
         this.SonMoney = p;  
    }

    Son.prototype                 = new Father();
    Son.prototype.Say          = function(){ alert("¾ÆµéÀÇ ¿ëµ·Àº " + this.SonMoney + "¿ø"); } 
    Son.prototype.FatherSay = function(){ Father.prototype.Say.call( this ); }

Father °´Ã¼¸¦ »ó¼Ó ¹ÞÀ» Son °´Ã¼ ÀÔ´Ï´Ù. Father °´Ã¼ÀÇ FatherMoney ¾îÆ®¸®ºäÆ®¿Í Say ¸Þ¼­µå¸¦ »ó¼Ó ¹ÞÀ¸¸ç, Say ¸Þ¼­µå¸¦ Àç Á¤ÀÇ ÇØ¼­ º¸´Ù ÀϹÝÈ­ ÇÏ¿´½À´Ï´Ù(¾ö¹ÐÈ÷ ¸»ÇØ ÀÌ ¿¹Á¦´Â ÀϹÝÈ­ ÇÑ °ÍÀº ¾Æ´ÏÁö¸¸ ´ëºÎºÐ ÀϹÝÈ­ ÇÕ´Ï´Ù).

- 10 ¶óÀÎ : Father.call( this, p, 2 );
call°ú apply´Â ´Ù¸¥ ÄÁÅØ½ºÆ®ÀÇ °´Ã¼¸¦ »ç¿ëÇÒ ¼ö ÀÖ°Ô ÇØ ÁÖ´Â ÇÔ¼ö ÀÔ´Ï´Ù. call ÇÔ¼öÀÇ ¿øÇüÀº Function.call( this, arg1, arg2, ..., argN ) À̸ç, apply ÇÔ¼öÀÇ ¿øÇüÀº Function.apply( this, arguments ) ÀÔ´Ï´Ù(arguments´Â ÇÔ¼ö¿¡ Àü´Þ µÈ ÀÎÀÚ °ªµéÀ» ¹è¿­·Î °¡Áö°í ÀÖ´Â Function °´Ã¼ÀÇ °íÀ¯ ÇÁ·ÎÆÛƼ ÀÔ´Ï´Ù). »óÀ§ °´Ã¼ »ý¼ºÀÚÀÇ ÀÎÀÚ ÁýÇÕ°ú ÇÏÀ§ °´Ã¼ »ý¼ºÀÚÀÇ ÀÎÀÚ ÁýÇÕÀÌ µ¿ÀÏÇÏ´Ù¸é apply¸¦ »ç¿ëÇϸç, ¼­·Î ´Ù¸£´Ù¸é callÀ» »ç¿ëÇÕ´Ï´Ù. ¿ì¸®°¡ ´Ù·ç´Â ¿¹Á¦¿¡¼­´Â »ý¼ºÀÚÀÇ ÀÎÀÚ ÁýÇÕÀÌ ¼­·Î ´Ù¸£±â ¶§¹®¿¡ callÀ» »ç¿ëÇÏ¿´½À´Ï´Ù. ±×¸®°í, ÇØ´ç °´Ã¼¸¦ »ç¿ëÇÏ´Â ÄÁÅØ½ºÆ®°¡ ³» ÀÚ½ÅÀ̱⠶§¹®¿¡ ù ¹øÂ° ÀÎÀÚ´Â ¹«Á¶°Ç this ÀÔ´Ï´Ù. ÀÌ ¼±¾ðÀ¸·Î Father °´Ã¼ÀÇ ¸ðµç °ÍÀ» »ç¿ëÇϰڴٴ »ç½ÇÀ» ÀÚ¹Ù½ºÅ©¸³Æ® ¿£Áø¿¡ ¾Ë·ÁÁÖ°Ô µÇ´Â °ÍÀÔ´Ï´Ù.

- 14 ¶óÀÎ : Son.prototype = new Father();
¾Æ¹öÁö°¡ ¸ÕÀú žÀ»±î¿ä? ¾ÆµéÀÌ ¸ÕÀú žÀ»±î¿ä? ½º½º·Î ±×·¯ÇÑ ÀÚ¿¬ÀÇ ¹ýÄ¢¿¡ µû¸£¸é ¾Æ¹öÁö°¡ ¸ÕÀú ž ÈÄ¿¡ ¾ÆµéÀÌ Å¾´Â °ÍÀÌ ´ç¿¬ÇÕ´Ï´Ù(³­ ±×·¯Áö ¾Ê¾Ò´Ù°í ´ë´ä ÇÏ½Ã¸é ¸Å¿ì ³­°¨ ÇÕ´Ï´Ù ¤»¤»). ÀÌ ¹ýÄ¢Àº °´Ã¼¿¡ ±×´ë·Î Àû¿ë µÇ¸ç, ºÎ¸ð °´Ã¼ÀÇ ÀνºÅϽº°¡ »ý¼ºµÈ ÈÄ¿¡ ÀÚ½Ä °´Ã¼°¡ »ý¼ºµÇ´Â °ÍÀÌ ¼ø¼­ÀÔ´Ï´Ù. ÀÌ °ÍÀÌ »ý¼ºÀÚ Ã¼ÀÌ´×(Chaining) ÀÔ´Ï´Ù. ÀÌ Äڵ尡 ¼öÇàµÇ¸é FatherÀÇ ÀνºÅϽº°¡ »ý¼º µÈ ÈÄ(»ý¼ºÀÚ È£Ãâ)¿¡ Son¿¡ ÇÒ´çµË´Ï´Ù.

- 15 ¶óÀÎ : Son.prototype.Say = function(){ alert("¾ÆµéÀÇ ¿ëµ·Àº " + this.SonMoney + "¿ø"); }
Son °´Ã¼´Â Father °´Ã¼ÀÇ Say() ¸Þ¼­µå¸¦ »ó¼Ó¹Þ¾ÒÁö¸¸ ¸¶À½¿¡ µéÁö ¾Ê¾Ò´øÁö ÀÚ½ÅÀÇ °ÍÀ¸·Î Àç Á¤ÀÇ Çß½À´Ï´Ù. ¿ä°ÍÀÌ ¸Þ¼­µå ¿À¹ö¶óÀ̵ù(Overriding) ÀÔ´Ï´Ù.

- 16 ¶óÀÎ : Son.prototype.FatherSay = function(){ Father.prototype.Say.call( this ); }
À§¿¡¼­ ¸»¾¸µå¸° callÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ÇöÀç ÄÁÅØ½ºÆ® ¾È¿¡¼­ ºÎ¸ð °´Ã¼ÀÇ ¸Þ¼­µå¸¦ È£Ãâ ÇÏ´Â ÄÚµå ÀÔ´Ï´Ù. ¿Ö ÀÌ·¸°Ô ¾î·Æ°Ô Çϳı¸¿ä? ¾Ö¼®ÇϰԵµ ÀÚ¹Ù½ºÅ©¸³Æ®¿¡¼­´Â super Ű¿öµå°¡ ¾ø½À´Ï´Ù. ±×·¸±â ¶§¹®¿¡ callÀ» »ç¿ëÇÏ¿© ºÎ¸ð °´Ã¼ÀÇ ¸Þ¼­µå¸¦ È£Ãâ ÇÏ¿´½À´Ï´Ù. super.Say()ó·³ ºÎ¸ð °´Ã¼ÀÇ ¸Þ¼­µå¸¦ Á÷Á¢ È£ÃâÇÏ´Â ¹æ¹ýÀº ¾ø½À´Ï´Ù.

"ÀÚ¹Ù½ºÅ©¸³Æ®°¡ OO¸¦ Áö¿ø ÇѴٸ鼭 ¿Ö super Ű¿öµå¸¦ Áö¿øÇÏÁö ¾Ê½À´Ï±î?"

¶§°¡ ¿Ô½À´Ï´Ù. ±Þ ±ô¦, ±Þ ½Ç¸Á ¹ßÇ¥¸¦ ÇϰڽÀ´Ï´Ù. ÀÚ¹Ù½ºÅ©¸³Æ®ÀÇ OOP´Â ÁøÁ¤ÇÑ ÀǹÌÀÇ OOP°¡ ¾Æ´Õ´Ï´Ù. OOPÀÇ ±âº»ÀÎ ´ÙÇü¼ºµµ Áö¿øÇÏÁö ¾ÊÀ¸¸ç Ãß»óÈ­µµ Áö¿øÇÏÁö ¾Ê½À´Ï´Ù. ±×Àú ¾à°£ÀÇ Èä³»¸¸ ³¾ »ÓÀÔ´Ï´Ù. ¿ì¸®´Â ÀÚ¹Ù½ºÅ©¸³Æ® OOP ³ª¸§´ë·ÎÀÇ ÀåÁ¡À» Àß È°¿ëÇØ¼­ È¿À²À» ±Ø´ëÈ­ ½ÃÄÑ »ç¿ëÇϱ⸸ ÇÏ¸é ±×¸¸ÀÔ´Ï´Ù. ¿©·¯ºÐ »ç¶ûÇÕ´Ï´Ù.

¿©±â±îÁö°¡ »ó¼ÓÀÇ ¼±¾ð ´Ü°è¿¡ ¼ÓÇÕ´Ï´Ù. ÀÌÁ¦ »ó¼Ó¹ÞÀº Son °´Ã¼¸¦ »ç¿ë ÇØ º¾½Ã´Ù.

18
19
20
21
    var o = new Son(100);

    o.Say();
    o.FatherSay();

ÀÌÁ¦ new Ű¿öµå°¡ ¸Å¿ì Ä£¼÷ÇØÁ³ÁÒ?

Son °´Ã¼ÀÇ ÀνºÅϽº¸¦ »ý¼ºÇÑ ÈÄ Say() ¸Þ¼­µå¸¦ È£Ãâ Çß½À´Ï´Ù. Father.Say()¸¦ È£ÃâÇÏ°í ½ÍÁö¸¸ super Ű¿öµå¸¦ Áö¿øÇÏÁö ¾Ê±â ¶§¹®¿¡ ¿ìȸÀûÀÎ ¹æ¹ýÀ¸·Î FatherSay() ¸Þ¼­µå¸¦ È£Ãâ Çß½À´Ï´Ù. "¾ÆºÎÁöÀÇ ¿ëµ·Àº 200¿ø", "¾ÆµéÀÇ ¿ëµ·Àº 100¿ø"À̶õ °æ°í âÀÌ »ç¶û½º·´°Ô Ãâ·Â µÉ °Ì´Ï´Ù. »Ð~


¿ä¾à

ÀÌÁ¦ ¿©·¯ºÐÀº ³ª¸¸ÀÇ °´Ã¼¸¦ »ý¼ºÇÏ°í ¿©·¯ °÷¿¡ »ó¼ÓÀ» ÇØ ÁÙ Áغñ°¡ µÇ¾î ÀÖ½À´Ï´Ù. Áö±Ý±îÁö »ìÆìº¸¾Ò´ø ³»¿ëÀ» °¡Áö°í ³ª¸¸ÀÇ ÇÁ·¹ÀÓ¿öÅ©¸¦ ¸¸µé ¼ö ÀÖ½À´Ï´Ù. ¿©·¯ºÐ ½Å³ªÁÒ?? ²¥¾Ç~!@#$%

¸¸¾à °´Ã¼ÁöÇâ °³³äÀÌ ¾àÇϽôٸé öÀúÇÏ°Ô ½ÀµæÇÏ½Ã±æ ±ÇÇØµå¸³´Ï´Ù. À¥ °³¹ß·Î ½ÃÀÛÇÑ °³¹ßÀÚÀÇ ½Ã°¢ÀÌ ¸ðµç °ÍµéÀ» °´Ã¼·Î º¸ÀÌ´Â ½Ã°¢À¸·Î ÁøÈ­ÇÒ ¶§ ¹Ý°¡¿î ¼Õ´ÔÀÌ Ã£¾Æ¿Ã °ÍÀÔ´Ï´Ù. ¹Ù·Î ÇØÅ»ÀÇ ½Ã±â°¡ ã¾Æ¿À°Ô µÇ¸ç »çÃá±â¸¦ Áö³ª ÁøÁ¤ÇÑ ¾î¸¥ÀÌ µÇ´Â ¼ø°£ÀÔ´Ï´Ù.

´ÙÀ½ ½Ã°£¿¡´Â ³ª¸¸ÀÇ ÇÁ·¹ÀÓ¿öÅ©¸¦ ¸¸µé¾î º¸µµ·Ï ÇϰڽÀ´Ï´Ù.

±×·³! ä³Î °íÁ¤!

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