[AJAX °ÀÇ 5-7Àå]¿¡ ÀÌ¾î¼ À̹øÀå¿¡¼´Â ÀÌ¾î¼ Àº´Ð(Encapsulatioin) ¿¡ ´ëÇØ¼ ¼Ò°³ÇÑ´Ù.
°´Ã¼ÁöÇâ ¾ð¾î¿¡´Â Àº´ÐÀ̶ó´Â °³³äÀÌ ÀÖ´Ù. Ç¥ÇöÀÌ Á» ¾î·Á¿ïÁöµµ ¸ð¸£°ÚÀ¸³ª ¿ÜºÎ·Î °ø°³ÇÏ¸é ¾ÈµÇ´Â ¹«¾ùÀΰ¡ Áß¿äÇÑ °ÍÀ» °¨Ãß°í ÀÖ´Ù´Â ¶æÀÌ´Ù.
°´Ã¼ÁöÇâ ¾ð¾îÀÇ Å¬·¡½ºÀÇ °¡Àå Å« ÀåÁ¡ Áß Çϳª´Â Ŭ·¡½º¸¦ ÀνºÅϽºÈÇÑ °´Ã¼¿¡ µ¥ÀÌÅ͸¦ ÀúÀåÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. ÇÏÁö¸¸ º¸¾ÈÀÇ Ãø¸é¿¡¼ µ¥ÀÌÅ͸¦ º¸È£ÇÒ Çʿ伺µµ Àֱ⠶§¹®¿¡ ±× ¼ö´ÜÀ¸·Î½á Àº´ÐÀ» »ç¿ëÇÑ´Ù°í »ý°¢ÇÏ¸é µÈ´Ù. µ¥ÀÌÅ͸¦ °¨Ãá´Ù°í ¿ÜºÎ¿¡¼ ÀüÇô »ç¿ëÇÏÁö ¸øÇÏ°Ô ÇÏ¸é ¾µ¸ð°¡ ¾øÀ¸¹Ç·Î Á¢±ÙÇÒ ¼ö ÀÖ´Â Åë·Î´Â ÃÖ¼ÒÇÑÀ¸·Î Á¦ÇÑÇÑ´Ù.
µ¥ÀÌÅ͸¦ °¨Ãß±â À§ÇÑ ¹æ¹ýÀ¸·Î Ŭ·¡½ºÀÇ ¸â¹ö¿¡ private Ű¿öµå¸¦ »ç¿ëÇÑ´Ù. ¿ÜºÎ¿¡¼ µ¥ÀÌÅÍ¿¡ Á¢±ÙÇϱâ À§Çؼ´Â public Á¢±ÙÀÚ¸¦ °¡Áö°í ÀÖ´Â setXxx(), getXxx() ¸Þ¼Òµå¸¦ »ç¿ëÇÑ´Ù.
°´Ã¼ÁöÇâ ¾ð¾î¿¡¼ÀÇ °£´ÜÇÑ ¿¹¸¦ »ìÆìº¸ÀÚ.
public class Vehicle {
private int wheelCount;//¹ÙÄû¼ö
private int curbWeightInPounds;//¹«°Ô
public Vehicle() {//»ý¼ºÀÚ
}
public int getCurbWeightInPounds() {
return curbWeightInPounds;
}
public void setCurbWeightInPounds(int curbWeightInPounds) {
this.curbWeightInPounds = curbWeightInPounds;
}
public int getWheelCount() {
return wheelCount;
}
public void setWheelCount(int wheelCount) {
this.wheelCount = wheelCount;
}
}
À§ Vehicle Ŭ·¡½º¿¡´Â wheelCount, curbWeightInPounds ¶ó´Â µÎ°³ÀÇ ¸â¹ö¿Í setXxx(), getXxx() ¸Þ¼Òµå°¡ Á¸ÀçÇÑ´Ù. ¿ÜºÎ¿¡¼´Â Vehicle Ŭ·¡½ºÀÇ ¸â¹ö¿¡ Á÷Á¢ÀûÀ¸·Î Á¢±ÙÇÒ ¼ö ¾ø°í setXxx(), getXxx() ¸Þ¼Òµå¸¦ »ç¿ëÇØ¾ß¸¸ ÇÑ´Ù.
ÀÌÁ¦ ÀÚ¹Ù½ºÅ©¸³Æ®¿¡¼´Â Àº´ÐÀ» ¾î¶»°Ô »ç¿ëÇÒ ¼ö ÀÖ´ÂÁö ¼Ò°³ÇÑ´Ù.
www.crockford.com ÀÇ Douglas Crockford ´Â ÀÚ¹Ù½ºÅ©¸³Æ®¿¡¼ private ¸â¹ö¿Í public Á¢±ÙÀÚ ¸Þ¼Òµå ¹æ¹ý·ÐÀ» ¾Æ·¡¿Í °°ÀÌ Áõ¸íÇϰí ÀÖ´Ù.
ù°, private ¸â¹ö¸¦ »ý¼ºÇϱâ À§Çؼ´Â »ý¼ºÀÚ ¾È¿¡¼ Á¤ÀÇÇØ¾ß ÇÑ´Ù. var Ű¿öµå´Â »ç¿ëÇØµµ µÇ°í ¾È ÇØµµ »ó°ü¾ø´Ù.
µÑ°, public Á¢±ÙÀÚ ¸Þ¼Òµå¸¦ »ý¼ºÇϱâ À§Çؼ´Â »ý¼ºÀÚ ¾È¿¡¼ Á¤ÀÇÇØ¾ß ÇÑ´Ù. À̶§ ¹Ýµå½Ã this Ű¿öµå¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù.
¿¹Á¦¸¦ »ìÆìº¸ÀÚ.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>JavaScript Encapsulation</title>
<script type="text/javaScript">
function createVehicle() {
var vehicle = new Vehicle();
alert(vehicle.wheelCount);
alert("wheelCount : "+vehicle.getWheelCount()+", curbWeightInPounds : "+vehicle.getCurbWeightInPounds());
vehicle.setWheelCount(6);
vehicle.setCurbWeightInPounds(5000);
alert("wheelCount : "+vehicle.getWheelCount()+", curbWeightInPounds : "+vehicle.getCurbWeightInPounds());
}
function Vehicle() {//Vehicle Ŭ·¡½º »ý¼ºÀÚ
var wheelCount = 4;//private ¸â¹öÁ¤ÀÇ
var curbWeightInPounds = 4000;//private ¸â¹ö Á¤ÀÇ
this.getWheelCount = function(){//pubic ¸Þ¼Òµå Á¤ÀÇ
return wheelCount;
}
this.setWheelCount = function(count){//pubic ¸Þ¼Òµå Á¤ÀÇ
wheelCount = count;
}
this.getCurbWeightInPounds = function(){//pubic ¸Þ¼Òµå Á¤ÀÇ
return curbWeightInPounds;
}
this.setCurbWeightInPounds = function(weight){//pubic ¸Þ¼Òµå Á¤ÀÇ
curbWeightInPounds = weight;
}
}
</script>
</head>
<body>
<h1>Examples of JavaScript Encapsulation</h1>
<br/><br/>
<button onclick="createVehicle();">Create an instance of Vehicle</button>
</body>
</html>
<encapsulation.html ÀÇ Àüü ¼Ò½º ÄÚµå>
À§ ¿¹Á¦¿¡¼´Â Vehicle Ŭ·¡½º¸¦ Á¤ÀÇÇÒ¶§ »ý¼ºÀÚ ¾È¿¡¼ wheelCount, curbWeightIPounds ¸¦ Á¤ÀÇÇϰí ÀÖÀ¸¹Ç·Î µÎ ¸â¹ö´Â ¸ðµÎ private ¼º°ÝÀ» °¡Áö°Ô µÈ´Ù. µû¶ó¼ ¿ÜºÎ¿¡¼´Â Á÷Á¢ÀûÀ¸·Î ÀÌ ¸â¹ö¿¡ Á¢±ÙÇÒ ¼ö ¾ø´Ù.
¶ÇÇÑ µÎ ¸â¹ö¿Í °ü·ÃµÈ getter ¹× setter ¸Þ¼Òµåµéµµ »ý¼ºÀÚ ¾È¿¡¼ this Ű¿öµå·Î Á¤ÀÇÇϰí ÀÖÀ¸¹Ç·Î public ¼º°ÝÀ» ¶ç°Ô µÈ´Ù. ¿ÜºÎ¿¡¼´Â ÀÌ ¸Þ¼Òµå¸¦ ÅëÇØ¼¸¸ private ¸â¹öÀÇ µ¥ÀÌÅÍ¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Ù.
ÀÚ¹Ù½ºÅ©¸³Æ®¿¡¼µµ °´Ã¼ÁöÇâ ¾ð¾îÀÇ Àº´Ð¿¡ ÇØ´çÇÏ´Â À¯»çÇÑ ÇüÅÂÀÇ ±¸ÇöÀÌ °¡´ÉÇÏ´Ù´Â °ÍÀ» º¸¿©ÁÖ´Â »ùÇÃÀÌ´Ù.
À§ ¿¹Á¦ÀÇ Å×½ºÆ® °á°ú¸¦ »ìÆìº¸ÀÚ.

À§ ±×¸²Àº private ¼º°ÝÀ» ¶ç°í ÀÖ´Â wheelCount ¿¡ Á÷Á¢ÀûÀ¸·Î Á¢±ÙÇßÀ»¶§ÀÇ ¸ð½ÀÀÌ´Ù.
À§ ±×¸²Àº getWheelCount() ¹× getCurbWeightInPounds() ¸Þ¼Òµå¸¦ »ç¿ëÇØ¼ private ¸â¹öÀÇ µ¥ÀÌÅ͸¦ Ãâ·ÂÇÑ ¸ð½ÀÀÌ´Ù.
À§ ±×¸²Àº setWheelCount() ¹× setCurbWeightInPounds() ¸Þ¼Òµå¸¦ ÀÌ¿ëÇØ¼ private ¸â¹öÀÇ µ¥ÀÌÅ͸¦ ¼öÁ¤ÇÑ °á°ú¸¦ Ãâ·ÂÇÑ ¸ð½ÀÀÌ´Ù.
À§ ¿¹Á¦´Â ´Ù¿î¹Þ¾Æ Å×½ºÆ® ÇØ º¼ ¼ö ÀÖ´Ù.