--- language: javascript category: language contributors: - ["Adam Brenecki", "http://adam.brenecki.id.au"] translators: - ["wikibook", "http://wikibook.co.kr"] lang: ko-kr --- ÀÚ¹Ù½ºÅ©¸³Æ®´Â ³Ý½ºÄÉÀÌÇÁÀÇ ºê·»´ø ¾ÆÀÌÅ©(Brendan Eich)°¡ 1995³â¿¡ ¸¸µé¾ú½À´Ï´Ù. ¿ø·¡ ÀÚ¹Ù½ºÅ©¸³Æ®´Â À¥»çÀÌÆ®¸¦ À§ÇÑ ´Ü¼øÇÑ ½ºÅ©¸³Æ® ¾ð¾î¸¦ ¸ñÇ¥·Î ¸¸µé¾îÁ³´Âµ¥, Á» ´õ º¹ÀâÇÑ À¥ ¾ÖÇø®ÄÉÀ̼ÇÀ» ¸¸µé±â À§ÇØ ÀÚ¹Ù¸¦ º¸¿ÏÇÏ´Â ¿ªÇÒÀ̾úÁö¸¸ À¥ ÆäÀÌÁö¿ÍÀÇ ±ä¹ÐÇÑ »óÈ£ÀÛ¿ë°ú ºê¶ó¿ìÀú¿¡ ´ëÇÑ Áö¿ø ±â´É ´öºÐ¿¡ À¥ ÇÁ·ÐÆ®¿£µå¿¡¼­ ÀÚ¹Ùº¸´Ù ÈξÀ ´õ º¸ÆíÀûÀ¸·Î ¾²ÀÌ°Ô µÆ½À´Ï´Ù. ±×·¸Áö¸¸ ÀÚ¹Ù½ºÅ©¸³Æ®´Â À¥ ºê¶ó¿ìÀú¿¡¸¸ ±¹ÇѵÇÁö ¾Ê½À´Ï´Ù. ±¸±Û Å©·ÒÀÇ V8 ÀÚ¹Ù½ºÅ©¸³Æ® ¿£ÁøÀ» À§ÇÑ µ¶¸³Çü ·±Å¸ÀÓÀ» Á¦°øÇÏ´Â Node.js´Â Á¡Á¡ Àα⸦ ¾ò°í ÀÖ½À´Ï´Ù. Çǵå¹é ÁÖ½Ã¸é ´ë´ÜÈ÷ °¨»çÇÏ°Ú½À´Ï´Ù! [@adambrenecki](https://twitter.com/adambrenecki)³ª [adam@brenecki.id.au](mailto:adam@brenecki.id.au)¸¦ ÅëÇØ Àú¿Í ¸¸³ª½Ç ¼ö ÀÖ½À´Ï´Ù. ```js // ÁÖ¼®Àº C¿Í ºñ½ÁÇÕ´Ï´Ù. ÇÑ ÁÙÂ¥¸® ÁÖ¼®Àº µÎ °³ÀÇ ½½·¡½Ã·Î ½ÃÀÛÇÏ°í, /* ¿©·¯ ÁÙ ÁÖ¼®Àº ½½·¡½Ã º°Ç¥·Î ½ÃÀÛÇؼ­ º°Ç¥ ½½·¡½Ã·Î ³¡³³´Ï´Ù. */ // ±¸¹®Àº ¼¼¹ÌÄÝ·Ð(;)À¸·Î ³¡³¾ ¼ö ÀÖ½À´Ï´Ù. doStuff(); // ÇÏÁö¸¸ ²À ±×·² ÇÊ¿ä´Â ¾ø´Âµ¥, ƯÁ¤ °æ¿ì¸¦ Á¦¿ÜÇÏ°í // »õ ÁÙÀÌ ½ÃÀÛÇÒ ¶§¸¶´Ù ¼¼¹ÌÄÝ·ÐÀÌ ÀÚµ¿À¸·Î »ðÀԵDZ⠶§¹®ÀÔ´Ï´Ù. doStuff() // ¿©±â¼­´Â ¼¼¹ÌÄÝ·ÐÀ» »ý·«ÇÏ°Ú½À´Ï´Ù. ¼¼¹ÌÄÝ·ÐÀ» »ý·«ÇÒÁö ¿©ºÎ´Â // °³ÀÎÀûÀÎ ÃëÇâÀ̳ª ÇÁ·ÎÁ§Æ®ÀÇ ½ºÅ¸ÀÏ °¡À̵带 µû¸¨´Ï´Ù. /////////////////////////////////// // 1. ¼ýÀÚ, ¹®ÀÚ¿­, ¿¬»êÀÚ // ÀÚ¹Ù½ºÅ©¸³Æ®¿¡´Â ´Ü ÇϳªÀÇ ¼ýÀÚ Å¸ÀÔ(64ºñÆ® IEEE 754 ¹èÁ¤µµ ¼ýÀÚ)¸¸ÀÌ // ÀÖ½À´Ï´Ù. 3 // = 3 1.5 // = 1.5 // ¸ðµç ±âÃÊ »ê¼ú ¿¬»êÀº ±â´ëÇÑ ´ë·Î µ¿ÀÛÇÕ´Ï´Ù. 1 + 1 // = 2 8 - 1 // = 7 10 * 2 // = 20 35 / 5 // = 7 // ³ª´©¾î ¶³¾îÁöÁö ¾Ê´Â ³ª´°¼Àµµ Æ÷ÇԵ˴ϴÙ. 5 / 2 // = 2.5 // ºñÆ® ¿¬»êµµ Áö¿øµË´Ï´Ù. floatÀ» ´ë»óÀ¸·Î ºñÆ® ¿¬»êÀ» ¼öÇàÇϸé // 32ºñÆ®±îÁö ºÎÈ£°¡ ÀÖ´Â int·Î º¯È¯µË´Ï´Ù. 1 << 2 // = 4 // °ýÈ£¸¦ ÀÌ¿ëÇÏ¸é ¿ì¼±¼øÀ§¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. (1 + 3) * 2 // = 8 // ½ÇÁ¦ ¼ýÀÚ°¡ ¾Æ´Ñ Ưº°ÇÑ ¼¼ °¡Áö °ªÀÌ ÀÖ½À´Ï´Ù. Infinity // 1/0 1/0°ú °°Àº ¿¬»êÀÇ °á°ú -Infinity // -1/0°ú °°Àº ¿¬»êÀÇ °á°ú NaN // 0/0°ú °°Àº ¿¬»êÀÇ °á°ú // ºÒ¸° ŸÀÔµµ ÀÖ½À´Ï´Ù. true false // ¹®ÀÚ¿­Àº '³ª "·Î »ý¼ºÇÕ´Ï´Ù. 'abc' "Hello, world" // ºÎÁ¤ ¿¬»ê¿¡´Â ! ±âÈ£¸¦ ÀÌ¿ëÇÕ´Ï´Ù. !true // = false !false // = true // µ¿Àϼº ¿¬»êÀº == 1 == 1 // = true 2 == 1 // = false // ºÒÀÏÄ¡ ¿¬»êÀº != 1 != 1 // = false 2 != 1 // = true // ±× ¹ÛÀÇ ºñ±³ ¿¬»ê 1 < 10 // = true 1 > 10 // = false 2 <= 2 // = true 2 >= 2 // = true // ¹®ÀÚ¿­Àº +·Î ¿¬°áÇÒ ¼ö ÀÖ½À´Ï´Ù. "Hello " + "world!" // = "Hello world!" // ±×¸®°í <¿Í >·Î ºñ±³ÇÒ ¼ö ÀÖ½À´Ï´Ù. "a" < "b" // = true // ºñ±³ ½Ã ŸÀÔ °­Á¦º¯È¯ÀÌ ¼öÇàµË´Ï´Ù. "5" == 5 // = true // ===¸¦ ¾²Áö ¾Ê´Â´Ù¸é ¸»ÀÌÁÒ. "5" === 5 // = false // charAtÀ» ÀÌ¿ëÇÏ¸é ¹®ÀÚ¿­ ³»ÀÇ ¹®ÀÚ¿¡ Á¢±ÙÇÒ ¼ö ÀÖ½À´Ï´Ù. "This is a string".charAt(0) // null°ú undefinedµµ ÀÖ½À´Ï´Ù. null // ÀǵµÀûÀ¸·Î °ªÀÌ ¾Æ´ÔÀ» ³ªÅ¸³»´Â µ¥ »ç¿ëÇÕ´Ï´Ù. undefined // °ªÀÌ ¾ÆÁ÷ ¼³Á¤µÇÁö ¾ÊÀ½À» ³ªÅ¸³»´Â µ¥ »ç¿ëÇÕ´Ï´Ù. // null, undefinded, NaN, 0, ""Àº °ÅÁþÀ̸ç, ±× ¹ÛÀÇ ´Ù¸¥ ¸ðµç °ªÀº ÂüÀÔ´Ï´Ù. // Âü°í·Î 0Àº °ÅÁþÀ̸ç, "0"Àº ÂüÀÔ´Ï´Ù(½ÉÁö¾î 0 == "0"ÀÌ´õ¶óµµ). /////////////////////////////////// // 2. º¯¼ö, ¹è¿­, °´Ã¼ // º¯¼ö´Â var Å°¿öµå·Î ¼±¾ðÇÕ´Ï´Ù. ÀÚ¹Ù½ºÅ©¸³Æ®´Â µ¿Àû ŸÀÔ ¾ð¾î¶ó¼­ // ŸÀÔÀ» ÁöÁ¤ÇÒ ÇÊ¿ä°¡ ¾ø½À´Ï´Ù. °ªÀ» ÇÒ´çÇÒ ¶§´Â = ¹®ÀÚ Çϳª¸¦ »ç¿ëÇÕ´Ï´Ù. var someVar = 5 // var Å°¿öµå¸¦ ÁöÁ¤ÇÏÁö ¾Ê¾Æµµ ¿À·ù´Â ¹ß»ýÇÏÁö ¾Ê½À´Ï´Ù. someOtherVar = 10 // ±×·¸Áö¸¸ º¯¼ö°¡ ¿©·¯ºÐÀÌ Á¤ÀÇÇÑ À¯È¿¹üÀ§°¡ ¾Æ´Ï¶ó // Àü¿ª À¯È¿¹üÀ§¿¡ »ý¼ºµË´Ï´Ù. // °ªÀ» ÇÒ´çÇÏÁö ¾ÊÀº ä·Î ¼±¾ðÇÑ º¯¼ö´Â undefined·Î ¼³Á¤µË´Ï´Ù. var someThirdVar // = undefined // º¯¼ö¿¡ ¼öÇÐ ¿¬»êÀ» ¼öÇàÇÏ´Â Ãà¾àÇü Ç¥ÇöÀº ´ÙÀ½°ú °°½À´Ï´Ù. someVar += 5 // someVar = someVar + 5;¿Í °°À½. ÀÌÁ¦ someVar´Â 10. someVar *= 10 // somVar´Â 100 // 1À» ´õÇϰųª »©´Â ÈξÀ ´õ ªÀº Ç¥Çöµµ ÀÖ½À´Ï´Ù. someVar++ // ÀÌÁ¦ someVar´Â 101 someVar-- // ´Ù½Ã 100À¸·Î µÇµ¹¾Æ°¨ // ¹è¿­Àº ¼øÂ÷ÀûÀÎ ÀÓÀÇ Å¸ÀÔ °ªÀÇ ¸ñ·ÏÀÔ´Ï´Ù. var myArray = ["Hello", 45, true] // ¹è¿­ÀÇ ¸â¹ö´Â ´ë°ýÈ£·Î µÑ·¯½Ñ À妽º¸¦ ÀÌ¿ëÇØ Á¢±ÙÇÒ ¼ö ÀÖ½À´Ï´Ù. // ¹è¿­ÀÇ À妽º´Â 0ºÎÅÍ ½ÃÀÛÇÕ´Ï´Ù. myArray[1] // = 45 // ÀÚ¹Ù½ºÅ©¸³Æ®ÀÇ °´Ã¼´Â ´Ù¸¥ ¾ð¾îÀÇ '»çÀü'À̳ª '¸Ê'°ú °°½À´Ï´Ù. // Áï, Å°-°ª ½ÖÀ¸·Î ±¸¼ºµÈ ºñ¼øÂ÷ Ä÷º¼ÇÀÔ´Ï´Ù. {key1: "Hello", key2: "World"} // Å°´Â ¹®ÀÚ¿­ÀÌÁö¸¸ À¯È¿ÇÑ ÀÚ¹Ù½ºÅ©¸³Æ® ½Äº°ÀÚÀÏ °æ¿ì // ÀÛÀºµû¿ÈÇ¥´Â ÇÊ¿äÇÏÁö ¾Ê½À´Ï´Ù. °ªÀº ¾î¶² ŸÀÔÀÌµç »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. var myObj = {myKey: "myValue", "my other key": 4} // °´Ã¼ ¼Ó¼º¿¡µµ À妽º¸¦ ÀÌ¿ëÇØ Á¢±ÙÇÒ ¼ö ÀÖ½À´Ï´Ù. myObj["my other key"] // = 4 // ¶Ç´Â Å°°¡ À¯È¿ÇÑ ½Äº°ÀÚÀÏ °æ¿ì Á¡ Ç¥±â¹ýÀ» ÀÌ¿ëÇØ Á¢±ÙÇÒ ¼ö ÀÖ½À´Ï´Ù. myObj.myKey // = "myValue" // °´Ã¼´Â º¯°æ °¡´ÉÇÕ´Ï´Ù. Áï, °ªÀ» º¯°æÇϰųª »õ Å°¸¦ Ãß°¡ÇÒ ¼ö ÀÖ½À´Ï´Ù. myObj.myThirdKey = true // ¼³Á¤µÇÁö ¾ÊÀº °ª¿¡ Á¢±ÙÇÏ·Á°í Çϸé undefined°¡ ¹ÝȯµË´Ï´Ù. myObj.myFourthKey // = undefined /////////////////////////////////// // 3. ·ÎÁ÷°ú Á¦¾î ±¸Á¶ // if ±¸Á¶´Â ¿©·¯ºÐÀÌ ¿¹»óÇÑ ´ë·Î µ¿ÀÛÇÕ´Ï´Ù. var count = 1 if (count == 3){ // count°¡ 3ÀÏ °æ¿ì Æò°¡µÊ } else if (count == 4) { // count°¡ 4ÀÏ °æ¿ì Æò°¡µÊ } else { // count°¡ 3À̳ª 4°¡ ¾Æ´Ñ °æ¿ì¿¡ Æò°¡µÊ } // whileµµ ¸¶Âù°¡ÁöÀÔ´Ï´Ù. while (true) { // ¹«ÇÑ ·çÇÁ! } // do-while ¹®Àº Ç×»ó ÃÖ¼Ò ÇÑ ¹øÀº ½ÇÇàµÈ´Ù´Â Á¡À» Á¦¿ÜÇϸé // while ¹®°ú ºñ½ÁÇÕ´Ï´Ù. var input do { input = getInput() } while (!isValid(input)) // for ¹®Àº C¿Í ÀÚ¹ÙÀÇ for ¹®°ú °°½À´Ï´Ù. // ÃʱâÈ­½Ä; Áö¼Ó Á¶°Ç; Áõ°¨½Ä for (var i = 0; i < 5; i++){ // 5¹ø ½ÇÇàµÊ } // &&´Â ³í¸® andÀÌ°í ||´Â ³í¸® orÀÔ´Ï´Ù. if (house.size == "big" && house.colour == "blue"){ house.contains = "bear" } if (colour == "red" || colour == "blue"){ // »öÀº »¡°­À̰ųª ÆĶû } // &&¿Í ||Àº "´ÜÃà Æò°¡"¸¦ ¼öÇàÇϴµ¥, ±âº»°ªÀ» ¼³Á¤ÇÒ ¶§ À¯¿ëÇÕ´Ï´Ù. var name = otherName || "default" /////////////////////////////////// // 4. ÇÔ¼ö, À¯È¿¹üÀ§, Ŭ·ÎÀú // ÀÚ¹Ù½ºÅ©¸³Æ® ÇÔ¼ö´Â function Å°¿öµå·Î ¼±¾ðÇÕ´Ï´Ù. function myFunction(thing){ return thing.toUpperCase() } myFunction("foo") // = "FOO" // ÇÔ¼ö´Â "À͸í"À¸·Î, Áï À̸§ ¾øÀÌ Á¤ÀÇÇÒ ¼öµµ ÀÖ½À´Ï´Ù. function(thing){ return thing.toLowerCase() } // (ÇÔ¼ö¸¦ °¡¸®Å°´Â À̸§ÀÌ ¾ø±â ¶§¹®¿¡ ÇÔ¼ö¸¦ È£ÃâÇÒ ¼ö ¾ø½À´Ï´Ù) // ÀÚ¹Ù½ºÅ©¸³Æ® ÇÔ¼ö´Â ÀÏ±Þ °´Ã¼À̹ǷΠ´Ù¸¥ º¯¼ö¿¡ ÀçÇÒ´çÇÏ°í // ´Ù¸¥ ÇÔ¼ö¿¡ ÀÎÀÚ·Î Àü´ÞÇÒ ¼ö ÀÖ½À´Ï´Ù. °¡·É, À̺¥Æ® Çڵ鷯¸¦ ¸¸µé °æ¿ì function myFunction(){ // ÀÌ ÄÚµå´Â 5ÃÊ ³»¿¡ È£ÃâµÊ } setTimeout(myFunction, 5000) // ´Ù¸¥ ÇÔ¼ö¸¦ È£ÃâÇÒ ¶§ Á÷Á¢ÀûÀ¸·Î ÇÔ¼ö ±¸¹®À» ÀÛ¼ºÇÒ ¼öµµ ÀÖ½À´Ï´Ù. setTimeout(function myFunction(){ // ÀÌ ÄÚµå´Â 5ÃÊ ³»¿¡ È£ÃâµÊ }, 5000) // ÀÚ¹Ù½ºÅ©¸³Æ®¿¡´Â ÇÔ¼ö À¯È¿¹üÀ§°¡ ÀÖ½À´Ï´Ù. // ÇÔ¼ö´Â ÀÚüÀûÀÎ À¯È¿¹üÀ§¸¦ °¡ÁöÁö¸¸ ´Ù¸¥ ºí·ÏÀº À¯È¿¹üÀ§¸¦ °¡ÁöÁö ¾Ê½À´Ï´Ù. if (true){ var i = 5 } i // = 5 - ºí·Ï À¯È¿¹üÀ§¸¦ Áö¿øÇÏ´Â ¾ð¾î¿¡¼­´Â undefined°¡ ¾Æ´Õ´Ï´Ù. // ÀÌ°ÍÀº "Áï½Ã ½ÇÇàµÇ´Â À͸í ÇÔ¼ö"¶ó´Â °øÅë ÆÐÅÏÀ¸·Î À̾îÁö´Âµ¥, // ÀÌ ÆÐÅÏÀº Àӽà º¯¼ö°¡ Àü¿ª À¯È¿¹üÀ§·Î À¯ÃâµÇ´Â °ÍÀ» ¹æÁöÇÕ´Ï´Ù. (function(){ var temporary = 5 // 'Àü¿ª °´Ã¼'¿¡ ÇÒ´çÇÏ´Â ½ÄÀ¸·Î Àü¿ª À¯È¿¹üÀ§¿¡ Á¢±ÙÇÒ ¼ö Àִµ¥, // ºê¶ó¿ìÀú¿¡¼­ Àü¿ª °´Ã¼´Â Ç×»ó 'window'ÀÔ´Ï´Ù. Àü¿ª °´Ã¼´Â // Node.js¿Í °°Àº ºê¶ó¿ìÀú°¡ ¾Æ´Ñ ȯ°æ¿¡¼­´Â ´Ù¸¥ À̸§ÀÏ ¼öµµ ÀÖ½À´Ï´Ù. window.permanent = 10 // ¶Ç´Â ¾Õ¿¡¼­ ¾ð±ÞÇß´Ù½ÃÇÇ var Å°¿öµå¸¦ »¬ ¼öµµ ÀÖ½À´Ï´Ù. permanent2 = 15 })() temporary // ReferenceError ¹ß»ý permanent // = 10 permanent2 // = 15 // ÀÚ¹Ù½ºÅ©¸³Æ®ÀÇ °­·ÂÇÑ ±â´É Áß Çϳª´Â Ŭ·ÎÀú(closure)ÀÔ´Ï´Ù. // ÇÔ¼ö°¡ ´Ù¸¥ ÇÔ¼ö ¾È¿¡¼­ Á¤ÀÇµÇ¸é ¾ÈÂÊ¿¡ Á¤ÀÇµÈ ÇÔ¼ö´Â ¹Ù±ù ÇÔ¼öÀÇ // ¸ðµç º¯¼ö¿¡ Á¢±ÙÇÒ ¼ö ÀÖ½À´Ï´Ù. function sayHelloInFiveSeconds(name){ var prompt = "Hello, " + name + "!" function inner(){ alert(prompt) } setTimeout(inner, 5000) // setTimeoutÀº ºñµ¿±âÀûÀ¸·Î µ¿ÀÛÇϹǷΠÀÌ ÇÔ¼ö´Â 5ÃÊ µ¿¾È // ±â´Ù¸®Áö ¾Ê°í ½ÇÇàÀ» ¸¶Ä¨´Ï´Ù. ÇÏÁö¸¸ 5ÃÊ°¡ Áö³ª¸é inner¿¡¼­µµ // promptÀÇ °ª¿¡ Á¢±ÙÇÒ ¼ö ÀÖ½À´Ï´Ù. } sayHelloInFiveSeconds("Adam") // will open a popup with "Hello, Adam!" in 5s /////////////////////////////////// // 5. °´Ã¼ ½ÉÈ­; »ý¼ºÀÚ¿Í ÇÁ·ÎÅäŸÀÔ // °´Ã¼´Â ÇÔ¼ö¸¦ Æ÷ÇÔÇÒ ¼ö ÀÖ½À´Ï´Ù. var myObj = { myFunc: function(){ return "Hello world!" } } myObj.myFunc() // = "Hello world!" // °´Ã¼¿¡ Æ÷ÇÔµÈ ÇÔ¼ö°¡ È£ÃâµÇ¸é ÇÔ¼ö¿¡¼­´Â this Å°¿öµå¸¦ ÀÌ¿ëÇØ // ÇØ´ç ÇÔ¼ö°¡ Æ÷ÇÔµÈ °´Ã¼¿¡ Á¢±ÙÇÒ ¼ö ÀÖ½À´Ï´Ù. myObj = { myString: "Hello world!", myFunc: function(){ return this.myString } } myObj.myFunc() // = "Hello world!" // ¿©±â¼­ ¼³Á¤ÇÑ °ÍÀº ÇÔ¼ö°¡ Á¤ÀÇµÈ °÷ÀÌ ¾Æ´Ñ ÇÔ¼ö°¡ È£ÃâµÇ´Â // ¹æ½Ä°ú °ü·ÃÀÌ ÀÖ½À´Ï´Ù. ±×·¡¼­ ¾Æ·¡ ÇÔ¼ö´Â °´Ã¼ ÄÁÅؽºÆ®¿¡¼­ // È£ÃâµÇÁö ¾ÊÀ¸¸é µ¿ÀÛÇÏÁö ¾Ê½À´Ï´Ù. var myFunc = myObj.myFunc myFunc() // = undefined // ¹Ý´ë·Î ÇÔ¼ö´Â °´Ã¼¿¡ ÇÒ´çÇÏ°í this¸¦ ÅëÇØ ÇØ´ç °´Ã¼¿¡ Á¢±ÙÇÒ ¼ö ÀÖ½À´Ï´Ù. // ÇÔ¼ö¸¦ Á¤ÀÇÇÒ ¶§ °´Ã¼¿¡ Ãß°¡µÇÁö ¾Ê¾Ò´õ¶óµµ ¸¶Âù°¡ÁöÀÔ´Ï´Ù. var myOtherFunc = function(){ return this.myString.toUpperCase() } myObj.myOtherFunc = myOtherFunc myObj.myOtherFunc() // = "HELLO WORLD!" // new Å°¿öµå·Î ÇÔ¼ö¸¦ È£ÃâÇÏ¸é »õ·Î¿î °´Ã¼°¡ »ý¼ºµÇ°í this¸¦ ÅëÇØ // ÇÔ¼ö¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù. ÀÌ·± ½ÄÀ¸·Î ¼³°èµÈ ÇÔ¼ö¸¦ »ý¼ºÀÚ¶ó ÇÕ´Ï´Ù. var MyConstructor = function(){ this.myNumber = 5 } myNewObj = new MyConstructor() // = {myNumber: 5} myNewObj.myNumber // = 5 // ¸ðµç ÀÚ¹Ù½ºÅ©¸³Æ® °´Ã¼´Â 'prototype'À» °¡Áö°í ÀÖ½À´Ï´Ù. ¾î¶² °´Ã¼¿¡ ´ëÇØ // ½ÇÁ¦ °´Ã¼¿¡´Â Á¸ÀçÇÏÁö ¾Ê´Â ÇÁ·ÎÆÛƼ¿¡ Á¢±ÙÇϸé ÀÎÅÍÇÁ¸®ÅÍ´Â ÇÁ·Î·ÎŸÀÔ¿¡¼­ // ÇØ´ç ÇÁ·ÎÆÛƼ¸¦ ã½À´Ï´Ù. // ÀϺΠÀÚ¹Ù½ºÅ©¸³Æ® ±¸Çöü¿¡¼­´Â __proto__¶ó´Â ¸¶¹ýÀÇ ÇÁ·ÎÆÛƼ·Î // °´Ã¼ÀÇ ÇÁ·ÎÅäŸÀÔ¿¡ Á¢±ÙÇÏ´Â °ÍÀ» Çã¿ëÇϱ⵵ ÇÕ´Ï´Ù. ÇÁ·ÎÅäŸÀÔÀ» // ¼³¸íÇϱ⿡´Â ÀÌ·± ³»¿ëµµ µµ¿òµÇ°ÚÁö¸¸ __proto__´Â Ç¥ÁØ¿¡ Æ÷ÇԵŠ// ÀÖÁö ¾Ê½À´Ï´Ù. ³ªÁß¿¡ ÇÁ·ÎÅäŸÀÔÀ» »ç¿ëÇϴ ǥÁØ ¹æ¹ýÀ» »ìÆ캸°Ú½À´Ï´Ù. var myObj = { myString: "Hello world!", } var myPrototype = { meaningOfLife: 42, myFunc: function(){ return this.myString.toLowerCase() } } myObj.__proto__ = myPrototype myObj.meaningOfLife // = 42 // ÀÌ ¹æ¹ýÀº ÇÔ¼ö¿¡µµ ÅëÇÕ´Ï´Ù. myObj.myFunc() // = "hello world!" // ¹°·Ð ÇÁ·ÎÆÛƼ°¡ ÇÁ·ÎÅäŸÀÔ¿¡ Á¸ÀçÇÏÁö ¾ÊÀ¸¸é // ÇÁ·ÎÅäŸÀÔÀÇ ÇÁ·ÎÅäŸÀÔÀ» ã´Â ½ÄÀ¸·Î ÁøÇàµË´Ï´Ù. myPrototype.__proto__ = { myBoolean: true } myObj.myBoolean // = true // ¿©±â¼­ º¹»ç´Â ÀϾÁö ¾Ê½À´Ï´Ù. °¢ °´Ã¼¿¡´Â ÇÁ·ÎÅäŸÀÔ¿¡ ´ëÇÑ // ÂüÁ¶°¡ º¸°üµÅ ÀÖ½À´Ï´Ù. ÀÌ´Â ÇÁ·ÎÅäŸÀÔÀ» º¯°æÇÏ¸é º¯°æ»çÇ×ÀÌ // ¸ðµç °÷¿¡ ¹Ý¿µµÈ´Ù´Â ÀǹÌÀÔ´Ï´Ù. myPrototype.meaningOfLife = 43 myObj.meaningOfLife // = 43 // ¾Õ¿¡¼­ __proto__°¡ Ç¥ÁØ¿¡ Æ÷ÇԵŠÀÖÁö ¾Ê´Ù°í À̾߱âÇߴµ¥, // ±âÁ¸ °´Ã¼ÀÇ ÇÁ·ÎÅäŸÀÔÀ» º¯°æÇϴ ǥÁØ ¹æ¹ýÀº ¾ø½À´Ï´Ù. // ÇÏÁö¸¸ ƯÁ¤ ÇÁ·ÎÅäŸÀÔÀ» °¡Áö°í »õ·Î¿î °´Ã¼¸¦ »ý¼ºÇÏ´Â µÎ °¡Áö // ¹æ¹ýÀÌ ÀÖ½À´Ï´Ù. // ù ¹ø° ¹æ¹ýÀº Object.create¸¦ ÀÌ¿ëÇÏ´Â °ÍÀε¥, // Object.create´Â ÃÖ±Ù¿¡ ÀÚ¹Ù½ºÅ©¸³Æ®¿¡ Ãß°¡µÈ °ÍÀÌ¶ó¼­ ¾ÆÁ÷±îÁö // ¸ðµç ±¸Çöü¿¡¼­ ÀÌ¿ëÇÒ ¼ö ÀÖ´Â °ÍÀº ¾Æ´Õ´Ï´Ù. var myObj = Object.create(myPrototype) myObj.meaningOfLife // = 43 // µÎ ¹ø° ¹æ¹ýÀº ¾îµð¼­³ª ÅëÇÏ´Â ¹æ¹ýÀε¥, »ý¼ºÀÚ¿Í °ü·ÃÀÌ ÀÖ½À´Ï´Ù. // »ý¼ºÀÚ¿¡´Â prototypeÀ̶ó´Â ÇÁ·ÎÆÛƼ°¡ ÀÖ½À´Ï´Ù. ÀÌ ÇÁ·ÎÆÛƼ´Â // »ý¼ºÀÚ ÇÔ¼ö ÀÚüÀÇ ÇÁ·ÎÅäŸÀÔÀÌ *¾Æ´Ï°í* »ý¼ºÀÚ¿Í new Å°¿öµå¸¦ ÀÌ¿ëÇØ // °´Ã¼°¡ »ý¼ºµÉ ¶§ »õ·Î¿î °´Ã¼°¡ ¹Þ´Â ÇÁ·ÎÅäŸÀÔÀÔ´Ï´Ù. myConstructor.prototype = { getMyNumber: function(){ return this.myNumber } } var myNewObj2 = new myConstructor() myNewObj2.getMyNumber() // = 5 // ¹®ÀÚ¿­°ú ¼ýÀÚ¿Í °°Àº ³»Àå ŸÀÔ¿¡µµ µ¿µîÇÑ ·¡ÆÛ °´Ã¼¸¦ // »ý¼ºÇÏ´Â »ý¼ºÀÚ°¡ ÀÖ½À´Ï´Ù. var myNumber = 12 var myNumberObj = new Number(12) myNumber == myNumberObj // = true // ÇÏÁö¸¸ Á¤È®È÷ °°Áö´Â ¾Ê½À´Ï´Ù. typeof(myNumber) // = 'number' typeof(myNumberObj) // = 'object' myNumber === myNumberObj // = false if (0){ // 0Àº °ÅÁþÀÌ¶ó¼­ ÀÌ ÄÚµå´Â ½ÇÇàµÇÁö ¾Ê½À´Ï´Ù. } if (Number(0)){ // Number(0)Àº ÂüÀÌ¶ó¼­ ÀÌ ÄÚµå´Â *½ÇÇàµË´Ï´Ù*. } // ÇÏÁö¸¸ ·¡ÆÛ °´Ã¼¿Í ÀÏ¹Ý ³»Àå ÇÔ¼ö´Â ÇÁ·ÎÅäŸÀÔÀ» °øÀ¯Çϱ⠶§¹®¿¡ // °¡·É ¹®ÀÚ¿­¿¡ ½ÇÁ¦·Î ±â´ÉÀ» Ãß°¡ÇÒ ¼ö ÀÖ½À´Ï´Ù. String.prototype.firstCharacter = function(){ return this.charAt(0) } "abc".firstCharacter() // = "a" // ÀÌ·¯ÇÑ »ç½ÇÀº ±âÁ¸ ÀÚ¹Ù½ºÅ©¸³Æ® ¹öÀü¿¡¼­ ÀÚ¹Ù½ºÅ©¸³Æ®ÀÇ // »õ·Î¿î ±â´ÉÀ» ±¸ÇöÇÏ´Â "Æú¸®ÇÊ(polyfilling)"¿¡ ÀÚÁÖ ÀÌ¿ëµÇ¹Ç·Î // ¿À·¡µÈ ¹öÀüÀÇ ºê¶ó¿ìÀú¿Í °°ÀÌ ±âÁ¸ ȯ°æ¿¡¼­ »ç¿ëµÉ ¼ö ÀÖ½À´Ï´Ù. // ¿¹¸¦ µé¾î, Object.create°¡ ¸ðµç ±¸Çöü¿¡¼­ »ç¿ë °¡´ÉÇÑ °ÍÀº ¾Æ´Ï¶ó°í // ÇßÁö¸¸ ¾Æ·¡ÀÇ Æú¸®ÇÊÀ» ÀÌ¿ëÇØ Object.create¸¦ ¿©ÀüÈ÷ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. if (Object.create === undefined){ // don't overwrite it if it exists Object.create = function(proto){ // ¿Ã¹Ù¸¥ ÇÁ·ÎÅäŸÀÔÀ» °¡Áö°í Àӽà »ý¼ºÀÚ¸¦ ¸¸µë var Constructor = function(){} Constructor.prototype = proto // ±×·± ´ÙÀ½ Àӽà »ý¼ºÀÚ¸¦ ÀÌ¿ëÇØ »õ·Î¿î ÀûÀýÇÑ ÇÁ·ÎÅäŸÀÔÀ» // Æ÷ÇÔÇÑ °´Ã¼¸¦ »ý¼º return new Constructor() } } ``` ## ±âŸ Âü°í ÀÚ·á [¸ðÁú¶ó °³¹ßÀÚ ³×Æ®¿öÅ©](https://developer.mozilla.org/en-US/docs/Web/JavaScript)¿¡¼­´Â ÀÚ¹Ù½ºÅ©¸³Æ®¿¡ ´ëÇÑ ÈǸ¢ÇÑ ¹®¼­¸¦ Á¦°øÇÕ´Ï´Ù. ´õºÒ¾î À§Å° Çü½ÄÀÌ¶ó¼­ Á» ´õ ¸¹Àº »çÇ×À» ¹è¿ì°Ô µÇ¸é ¿©·¯ºÐ¸¸ÀÇ Áö½ÄÀ» °øÀ¯ÇÔÀ¸·Î½á ´Ù¸¥ »ç¶÷µé¿¡°Ô µµ¿òÀ» ÁÙ ¼öµµ ÀÖ½À´Ï´Ù. MDNÀÇ ['ÀÚ¹Ù½ºÅ©¸³Æ® ÀçÀÔ¹®'](https://developer.mozilla.org/ko/docs/A_re-introduction_to_JavaScript)¿¡¼­´Â ¿©±â¼­ ´Ù·é °³³äÀÇ »ó´ç¼ö¸¦ ´õ¿í ÀÚ¼¼È÷ ´Ù·ç°í ÀÖ½À´Ï´Ù. ÀÌ ÀÚ·á¿¡¼­´Â ÀÚ¹Ù½ºÅ©¸³Æ® ¾ð¾î ÀÚü¿¡ ´ëÇؼ­¸¸ »ó´çÈ÷ ½ÅÁßÇÏ°Ô ´Ù·ð½À´Ï´Ù. À¥ ÆäÀÌÁö¿¡¼­ ÀÚ¹Ù½ºÅ©¸³Æ®¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀ» ¹è¿ì°í ½Í´Ù¸é [¹®¼­ °´Ã¼ ¸ðµ¨(Document Object Model)](https://developer.mozilla.org/en-US/docs/Using_the_W3C_DOM_Level_1_Core)¿¡ °üÇØ ¹è¿ì´Â °ÍÀ¸·Î ½ÃÀÛÇÏ±æ ¹Ù¶ø´Ï´Ù. [ÀÚ¹Ù½ºÅ©¸³Æ® °¡µç](http://bonsaiden.github.io/JavaScript-Garden/)¿¡¼­´Â ÀÚ¹Ù½ºÅ©¸³Æ® ¾ð¾î¿¡¼­ Á÷°ü¿¡ ¾î±ß³ª´Â ¸ðµç ºÎºÐµéÀ» ½Éµµ ÀÖ°Ô ´Ù·ì´Ï´Ù. ´õºÒ¾î ÀÌ ±Û¿¡ Á÷Á¢ÀûÀ¸·Î ±â¿©ÇÑ ºÐµé·Î, ³»¿ë Áß ÀϺδ ÀÌ »çÀÌÆ®¿¡ ÀÖ´Â ·çÀÌ µò(Louie Dihn)ÀÇ ÆÄÀ̽ã Æ©Å丮¾ó°ú ¸ðÁú¶ó °³¹ßÀÚ ³×Æ®¿öÅ©¿¡ ÀÖ´Â [ÀÚ¹Ù½ºÅ©¸³Æ® Æ©Å丮¾ó](https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript)À» Âü°íÇß½À´Ï´Ù.