JavaScript:
¼¼»ó¿¡¼­ °¡Àå ¿ÀÇØ°¡ ¸¹Àº ÇÁ·Î±×·¡¹Ö ¾ð¾î

Douglas Crockford
www.crockford.com

¹ø¿ª: Kwang Yul Seo
skyul.tistory.com

Mocha, LiveScript, JScript, ECMAScript µîÀ¸·Îµµ ºÒ¸®´Â JavaScript´Â ¼¼»ó¿¡¼­ °¡Àå À¯¸íÇÑ ÇÁ·Î±×·¡¹Ö ¾ð¾î Áß¿¡ ÇϳªÀÔ´Ï´Ù. »ç½Ç»ó ¼¼»óÀÇ ¸ðµç °³ÀÎ ÄÄÇ»ÅÍ¿¡ ÃÖ¼ÒÇÑ Çϳª ÀÌ»óÀÇ JavaScript ÀÎÅÍÇÁ¸®ÅͰ¡ ¼³Ä¡µÇ¾î ÀÖ°í Ȱ¹ßÇÏ°Ô »ç¿ëµÇ°í ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ JavaScript´Â ÀÎÁöµµ´Â ÀüÀûÀ¸·Î ¿ùµå¿ÍÀ̵åÀ¥(WWW)ÀÇ ½ºÅ©¸³Æ® ¾ð¾î¶ó´Â ¿ªÇÒ ´öÅÃÀÔ´Ï´Ù.

ÀÌ·± ÀÎÁöµµ¿¡µµ ºÒ±¸Çϰí, JavaScript°¡ ¸Å¿ì µ¿ÀûÀÌ¸ç °´Ã¼ÁöÇâÀÇ ¹ü¿ë ÇÁ·Î±×·¡¹Ö ¾ð¾î¶ó´Â »ç½ÇÀ» ¾Æ´Â ÀÌ´Â µå¹´´Ï´Ù. ÀÌ·± »ç½ÇÀÌ ¾î¶»°Ô ºñ¹ÐÀÌ µÉ ¼ö ÀÖ¾úÀ»±î¿ä? ¿Ö ÀÌ ÇÁ·Î±×·¡¹Ö ¾ð¾î´Â À߸ø ÀÌÇØµÈ °ÍÀϱî¿ä?

À̸§

Java- Á¢µÎ»ç¸¦ º¸¸é JavaScript°¡ Java¿Í ¾î¶² ½ÄÀ¸·Î´Â ¿¬°ü °ü°è°¡ ÀÖÀ» °Íó·³ º¸ÀÔ´Ï´Ù. Áï, JavaScript´Â JavaÀÇ ¼­ºê¼ÂÀ̰ųª ±â´ÉÀÌ ºÎÁ·ÇÑ ¹öÀüÀÇ Java¶ó´Â ÀλóÀ» ÁÝ´Ï´Ù. ÀÌ À̸§Àº È¥¶õÀ» ÁÖ±â À§ÇØ ÀǵµÀûÀ¸·Î Áö¾îÁø °ÍÀ¸·Î º¸À̴µ¥, ÀÌ·± ¿ÀÇØ°¡ È¥¶õÀ» ¾ß±âÇß½À´Ï´Ù. JavaScript´Â ÀÎÅÍÇÁ¸®Æ®µÇ´Â ÀÚ¹Ù°¡ ¾Æ´Õ´Ï´Ù. ÀÚ¹Ù ÀÚü°¡ ÀÎÅÍÇÁ¸®Æ®µÇ´Â ¾ð¾îÀÔ´Ï´Ù. JavaScript´Â Java¿Í´Â ´Ù¸¥ ¾ð¾îÀÔ´Ï´Ù.

Java°¡ C¿Í ¹®¹ýÀûÀ¸·Î À¯»çÇϵíÀÌ JavaScript´Â Java¿Í À¯»çÇÕ´Ï´Ù. ÇÏÁö¸¸ Java°¡ CÀÇ ¼­ºê¼ÂÀÌ ¾Æ´Ñ °Íó·³ JavaScriptµµ JavaÀÇ ¼­ºê¼ÂÀÌ ¾Æ´Õ´Ï´Ù. JavaScript´Â Java(ÃʱâÀÇ Oak)°ú ¿ø·¡ ÀǵµÇß´ø ÀÀ¿ë ÇÁ·Î±×·¥ ºÎºÐ¿¡¼­´Â Javaº¸´Ù ´õ ¶Ù¾î³³´Ï´Ù.

JavaScript´Â JavaÀÇ °íÇâÀÎ ½ã¸¶ÀÌÅ©·Î½Ã½ºÅÛÁî(Sun Microsystems)¿¡¼­ °³¹ßµÈ °ÍÀÌ ¾Æ´Õ´Ï´Ù. JavaScript´Â ³×½ºÄÉÀÌÇÁ(Netscape)¿¡¼­ °³¹ßµÇ¾ú½À´Ï´Ù. ¿ø·¡´Â LiveScript¶ó°í ºÒ·È´Âµ¥, ÀÌ À̸§Àº ±×´ÙÁö È¥¶õ½º·´Áö ¾Ê¾ÒÁö¿ä.

-Script Á¢¹Ì»ç´Â JavaScript°¡ ½ÇÁ¦ ÇÁ·Î±×·¡¹Ö ¾ð¾î°¡ ¾Æ´Ï¶ó ÇÁ·Î±×·¡¹Ö ¾ð¾îº¸´Ù ¾àÇÑ ½ºÅ©¸³Æ® ¾ð¾î¶ó´Â ÀλóÀ» ÁÝ´Ï´Ù. ÇÏÁö¸¸ ÀÌ´Â Àü¹®È­ÀÇ ¹®Á¦ÀÔ´Ï´Ù. C ¾ð¾î¿Í ºñ±³ÇØ º¸¸é, JavaScript´Â Ç¥Çö·Â°ú ¿ªµ¿¼º(dynamism)À» À§ÇØ ¼º´ÉÀ» Èñ»ýÇÑ °ÍÀÔ´Ï´Ù.

C ¾ð¾îÀÇ ¿ÊÀ» ÀÔÀº Lisp

JavaScriptÀÇ C ¾ð¾î °°Àº ¹®¹ý(Áß°ýÈ£¿Í Åõ¹ÚÇÑ for ¹®À» Æ÷ÇÔ)Àº JavaScript°¡ ÀϹÝÀûÀÎ ÇÁ·Î½ÃÀúÇü ¾ð¾î·Î º¸ÀÌ°Ô ÇÕ´Ï´Ù. ÀÌ´Â À߸øµÈ ¿ÀÇØÀε¥, ¿Ö³ÄÇϸé JavaScript´Â C³ª Javaº¸´Ù´Â Lisp or Scheme¿Í °°Àº ÇÔ¼öÇü ¾ð¾î¿Í ´õ À¯»çÁ¡ÀÌ ¸¹±â ¶§¹®ÀÔ´Ï´Ù. JavaScript´Â ¸®½ºÆ® ´ë½Å¿¡ ¹è¿­ÀÌ ÀÖ°í, ¼Ó¼º ¸®½ºÆ®(¿ªÁÖ: ÀÏÁ¾ÀÇ ÇØ½ÃÅ×À̺í) ´ë½Å¿¡ ¿ÀºêÁ§Æ®°¡ ÀÖ½À´Ï´Ù. ÇÔ¼ö°¡ Á¦1Ŭ·¡½ºÀ̰í, Ŭ·ÎÀúµµ ÀÖ½À´Ï´Ù. ¶ÇÇÑ °ýÈ£¸¦ ¸ÂÃâ ÇÊ¿ä ¾øÀÌ ¶÷´Ù(lamda, À͸í ÇÔ¼ö)¸¦ »ç¿ëÇÒ ¼öµµ ÀÖ½À´Ï´Ù.

°íÁ¤¿ªÇÒ

JavaScript´Â ³×½ºÄÉÀÌÇÁ ³×ºñ°ÔÀÌÅÍ¿¡¼­ µ¿ÀÛÇϵµ·Ï ¼³°èµÇ¾ú½À´Ï´Ù. ³×½ºÄÉÀÌÇÁ¿¡¼­ÀÇ ¼º°øÀº JavaScript°¡ °ÅÀÇ ¸ðµç À¥ºê¶ó¿ìÀú¿¡¼­ Ç¥ÁØ ÀåÄ¡°¡ µÇµµ·Ï ¸¸µé¾ú½À´Ï´Ù. ÀÌ´Â JavaSciript°¡ À¥ °³¹ß¾ð¾î¶ó´Â À̹ÌÁö¸¦ °íÁ¤ÇØ ¹ö·È½À´Ï´Ù. JavaScript´Â ÇÁ·Î±×·¡¹Ö ¾ð¾î°èÀÇ ÁÒÁö ¸®ºê½º(George Reeves), ½´ÆÛ¸ÇÀ» ¿¬±âÇÑ ¹è¿ì°¡ µÇ¾ú½À´Ï´Ù. ÇÏÁö¸¸ JavaScript´Â À¥°ú °ü·ÃµÇÁö ¾ÊÀº ´ë±Ô¸ðÀÇ ÀÀ¿ë ÇÁ·Î±×·¥ °³¹ß¿¡µµ Àß ¾î¿ï¸®´Â ¾ð¾îÀÔ´Ï´Ù.

¿òÁ÷ÀÌ´Â ¸ñÇ¥¹°

JavaScript´Â ù ¹øÂ° ¹öÀüÀº ¸Å¿ì ºó¾àÇß½À´Ï´Ù. ¿¹¿Ü ó¸®, ³»ºÎ ÇÔ¼ö, »ó¼Ó µîÀÇ ±â´ÉÀÌ ¾ø¾ú½À´Ï´Ù. ÇöÀçÀÇ JavaScript´Â ¿ÏÀüÇÑ °´Ã¼ÁöÇâ ÇÁ·Î±×·¡¹Ö ¾ð¾îÀÔ´Ï´Ù. ÇÏÁö¸¸ ¾ð¾î¿¡ ´ëÇÑ ¿©·¯ ÀǰߵéÀº ¿©ÀüÈ÷ ¿¹ÀüÀÇ ¼º¼÷ÇÏÁö ¸øÇÑ ¸ð½À¿¡ ¹ÙÅÁÀ» µÎ°í ÀÖ½À´Ï´Ù.

JavaScript ¾ð¾î¿¡ ´ëÇÑ °ü¸® Ã¥ÀÓÀ» ¸Ã°í ÀÖ´Â ECMA À§¿øÈ¸´Â ºñ·Ï ±× Àǵµ´Â ÁÁÁö¸¸ ÀÌ¹Ì ³Ê¹« ¸¹Àº ¹öÀüÀÌ Á¸ÀçÇÑ´Ù´Â JavaScriptÀÇ °¡Àå Å« ¹®Á¦Á¡À» ¾ÇÈ­½ÃŰ´Â È®Àå ÀÛ¾÷À» Çϰí ÀÖ½À´Ï´Ù.

¼³°è ¿À·ù

¿Ïº®ÇÑ ÇÁ·Î±×·¡¹Ö ¾ð¾î´Â ¾ø½À´Ï´Ù. JavaScriptµµ ¼³°è ¿À·ù¸¦ Æ÷ÇÔÇϰí ÀÖ½À´Ï´Ù. + ¸¦ ÀÚµ¿ ŸÀÔ º¯È¯°ú ÇÔ²² ´õÇϱâ¿Í ¹®ÀÚ¿­ º´ÇÕÀ̶ó´Â µÎ °¡Áö Àǹ̷Π¿À¹ö·ÎµùÇÑ °Í, ½Ç¼ö¸¦ ÀúÁö¸£±â ½¬¿ö¼­ »ç¿ëÀ» ÇÇÇØ¾ß ÇÏ´Â with ¹® µîÀÌ ¿©±â¿¡ ÇØ´çÇÕ´Ï´Ù. ¿¹¾à¾î Á¤Ã¥µµ ³Ê¹« ±î´Ù·Ó½À´Ï´Ù. Á¤±Ô Ç¥Çö½Ä ±â¼ú ¹æ¹ý°ú ¼¼¹ÌÄÝ·Ð »ðÀÔÀº ¾ÆÁÖ Å« ½Ç¼öÀÔ´Ï´Ù. ÀÌ·± ½Ç¼ö´Â ÇÁ·Î±×·¡¹Ö ¿À·ù¸¦ ¾ß±âÇϰí, ¾ð¾î ¼³°è ÀÚü¸¦ Àǹ®½º·´°Ô ¸¸µé°Ô µË´Ï´Ù. ´ÙÇàÈ÷µµ, ÀÌ·± ¹®Á¦ÀÇ »ó´ç¼ö´Â lint¶ó´Â ÁÁÀº ÇÁ·Î±×·¥À¸·Î ¿ÏÈ­°¡ °¡´ÉÇÕ´Ï´Ù.

ÀüüÀûÀÎ ¾ð¾î ¼³°è´Â ¸Å¿ì ¾ÈÀüÇÕ´Ï´Ù. ³î¶ø°Ôµµ, ECMAScript À§¿øÈ¸´Â ÀÌ·± ¹®Á¦¸¦ ¼öÁ¤Çϴµ¥ º°·Î °ü½ÉÀÌ ¾ø´Â °Íó·³ º¸ÀÔ´Ï´Ù. ¾Æ¸¶µµ ±×µéÀº »õ·Î¿î °ÍÀ» ¸¸µå´Âµ¥ ´õ °ü½ÉÀÌ ¸¹Àº °Í °°½À´Ï´Ù.

À߸øµÈ ±¸Çöµé

JavaScript Ãʱ⠱¸ÇöÀÇ ÀϺδ ¸Å¿ì ¹ö±×°¡ ¸¹½À´Ï´Ù. ÀÌ´Â ¾ð¾î¿¡ ³ª»Û ¿µÇâÀ» ¹ÌÄ¡°í ÀÖ½À´Ï´Ù. ¼³»ó°¡»óÀ¸·Î ÀÌ·± ±¸ÇöµéÀÌ ²ûÂïÈ÷µµ ¹ö±×°¡ ¸¹Àº ºê¶ó¿ìÀú¿¡ ³»ÀåµÇ¾î ÀÖ¾ú½À´Ï´Ù.

¾È ÁÁÀº Ã¥µé

»ç½Ç»ó JavaScript¿¡ °üÇÑ °ÅÀÇ ¸ðµç Ã¥ÀÌ ¾û¸ÁÀÔ´Ï´Ù. ÀÌ Ã¥µéÀº ¿À·ù¿Í ³ª»Û ¿¹Á¦Åõ¼ºÀ̰í, À߸øµÈ ¹æ¹ýÀ» ºÎÃß±é´Ï´Ù. ¾ð¾îÀÇ Áß¿äÇÑ ±â´ÉµéÀÌ À߸ø ¼³¸íµÇ°Å³ª ¾Æ¿¡ ºüÁ®ÀÖ´Â °æ¿ìµµ ÈçÇÕ´Ï´Ù. ÇÊÀÚ´Â ½Ê¿© ±ÇÀÇ JavaScript Ã¥À» °ËÅäÇØº¸¾Ò´Âµ¥, ´ÙÀ½ ´Ü ÇÑ ±ÇÀÇ Ã¥¸¸ ÃßõÇÕ´Ï´Ù. JavaScript: The Definitive Guide (5th Edition) by David Flanagan. (ÇÊÀڵ鿡°Ô: ÁÁÀº Ã¥À» ¾²¼Ì´Ù¸é °ËÅ亻À» º¸³»ÁÖ¼¼¿ä.)

ºÒÃæºÐÇÑ Ç¥ÁØ

¾ð¾îÀÇ °ø½Ä ¸í¼¼¼­´Â ECMA°¡ ÀÛ¼ºÇÏ¿´½À´Ï´Ù. ÀÌ ¸í¼¼¼­´Â ǰÁúÀÌ ¸Å¿ì ³ª»Þ´Ï´Ù. Àб⵵ ¾î·Æ°Å´Ï¿Í ÀÌÇØÇϱâ´Â ÈξÀ ¾î·Æ½À´Ï´Ù. ÀÌ Á¦´ëµÈ Ã¥ÀÌ ¾ø´Â ¹®Á¦¿Íµµ ¿¬°áµÇ´Âµ¥, ÀúÀÚµéÀÌ ¾ð¾î¿¡ ´ëÇÑ ±×µéÀÇ ÀÌÇØ¸¦ ³ôÀ̱â À§ÇØ Ç¥ÁØ ¹®¼­¸¦ Ȱ¿ëÇÒ ¼ö ¾ø±â ¶§¹®ÀÔ´Ï´Ù. ECMA¿Í TC39 À§¿øÈ¸´Â ±íÀÌ ¹Ý¼ºÇØ¾ß ÇÒ °ÍÀÔ´Ï´Ù.

Ãʺ¸ÀÚµé

JavaScript¸¦ ÀÛ¼ºÇÏ´Â ´ëºÎºÐÀÇ »ç¶÷µéÀº °³¹ßÀÚ°¡ ¾Æ´Õ´Ï´Ù. ±×µéÀº ÁÁÀº ÇÁ·Î±×·¥À» ¾²´Â ÈÆ·ÃÀ» ¹ÞÁö ¸øÇß°í ¿øÄ¢ÀÌ ºÎÁ·ÇÕ´Ï´Ù. JavaScript´Â ¶Ù¾î³­ Ç¥Çö·ÂÀ» °¡Á³±â¿¡ ±×µéÀº ¾î·°Ç À¯¿ëÇÑ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ´Â JavaScript´Â ´ÜÁö Ãʺ¸ÀÚµéÀ» À§ÇÑ °ÍÀÌÁö Àü¹®°¡ ¿ëÀº ¾Æ´Ï¶ó´Â ÀλóÀ» ÁÖ¾ú½À´Ï´Ù. ÀÌ´Â »ç½ÇÀÌ ¾Æ´Õ´Ï´Ù.

°´Ã¼ÁöÇâ

JavaScript´Â °´Ã¼ÁöÇâÀϱî¿ä? JavaScript´Â µ¥ÀÌÅÍ¿Í µ¥ÀÌÅ͸¦ ó¸®ÇÒ ¼ö ÀÖ´Â ¸Þ¼­µå¸¦ ´ãÀ» ¼ö ÀÖ´Â ¿ÀºêÁ§Æ®¸¦ Á¦°øÇÕ´Ï´Ù. ¿ÀºêÁ§Æ®´Â ´Ù¸¥ ¿ÀºêÁ§Æ®¸¦ ÀúÀåÇÒ ¼öµµ ÀÖ½À´Ï´Ù. Ŭ·¡½º´Â ¾øÁö¸¸, Ŭ·¡½º º¯¼ö¿Í ¸Þ¼­µå¸¦ ´ãÀ» ¼ö Àִ Ŭ·¡½º ¿ªÇÒÀ» ÇÏ´Â »ý¼ºÀÚ°¡ ÀÖ½À´Ï´Ù. Ŭ·¡½º ±â¹ÝÀÇ »ó¼Ó ±â´ÉÀº ¾øÁö¸¸, ÇÁ·ÎÅäŸÀÔ ±â¹ÝÀÇ »ó¼Ó ±â´ÉÀ» Á¦°øÇÕ´Ï´Ù.

¿ÀºêÁ§Æ® ½Ã½ºÅÛÀ» ¸¸µå´Â µÎ °¡Áö ÁÖ¿ä ¹æ¹ýÀº »ó¼Ó(is-a)°ú ÁýÇÕ(has-a)ÀÌ ÀÖ½À´Ï´Ù. JavaScript´Â µÎ °¡Áö ¹æ¹ýÀ» ´Ù Áö¿øÇÏÁö¸¸, ¾ð¾îÀÇ µ¿ÀûÀÎ ¼Ó¼ºÀº ÁýÇÕ(aggregation)ÀÏ ¶§ ´õ ºûÀ» ¹ßÇÕ´Ï´Ù.

ÀϺο¡¼­´Â JavaScript°¡ Á¤º¸ Àº´ÐÀ» Á¦°øÇÏÁö ¾Ê±â ¶§¹®¿¡ ÂüµÈ ÀǹÌÀÇ °´Ã¼ÁöÇâÀÌ ¾Æ´Ï¶ó°í ¸»ÇÕ´Ï´Ù. ÀÌ´Â ¿ÀºêÁ§Æ®¿¡ private ¸â¹ö¿Í ¸Þ¼­µå°¡ ¾ø´Ù´Â ¶æÀÔ´Ï´Ù. ¸ðµç ¸â¹ö´Â publicÀÔ´Ï´Ù.

ÇÏÁö¸¸ JavaScript ¿ÀºêÁ§Æ®´Â private º¯¼ö¿Í private ¸Þ¼Òµå¸¦ °¡Áú ¼ö ÀÖ´Ù.·Î ¹àÇôÁ³½À´Ï´Ù. ¹°·Ð, JavaScript´Â ¼¼»ó¿¡¼­ °¡Àå ¿ÀÇØ°¡ ¸¹Àº ¾ð¾îÀ̱⿡ À̸¦ ÀÌÇØÇÏ´Â »ç¶÷Àº ¸¹Áö ¾Ê½À´Ï´Ù.

¶ÇÇÑ ÀϺδ JavaScript°¡ »ó¼ÓÀ» Áö¿øÇÏÁö ¾Ê±â ¶§¹®¿¡ ÁøÁ¤ÇÑ ÀǹÌÀÇ °´Ã¼ ÁöÇâ ¾ð¾î¶ó°í ¸»ÇÕ´Ï´Ù. ÇÏÁö¸¸ JavaScript´Â ÀüÅëÀûÀÎ »ó¼Ó ¹æ½Ä»Ó¸¸ ¾Æ´Ï¶ó ´Ù¸¥ ÄÚµå ÀçȰ¿ë ÆÐÅÏ ¶ÇÇÑ Á¦°øÇÑ´Ù. ¶ó´Â »ç½ÇÀÌ ¹àÇôÁ³½À´Ï´Ù.

Copyright 2001 Douglas Crockford. All Rights Reserved Wrrrldwide.