ȸ¿ø·Î±×ÀÎ
13³â Àü
¿©·¯ºÐÀº C++, JAVA¿Í °°Àº °´Ã¼ÁöÇâ ÇÁ·Î±×·¥¿¡ ´ëÇؼ ¾Ë°í °è½Ç °ÍÀÔ´Ï´Ù. PHP¿¡¼µµ C++, JAVA¿Í °°ÀÌ °´Ã¼ÁöÇâÀûÀÎ ¹æ¹ýÀ¸·Î ÇÁ·Î±×·¡¹ÖÀ» ÇÒ ¼ö ÀÖ½À´Ï´Ù. À̹ø °Á´ information hiding, »ó¼Ó, ´ÙÇü¼º¿¡ ´ëÇؼ ¾Ë¾Æº¸µµ·Ï ÇÏ°Ú½À´Ï´Ù.
* Âü°í»çÀÌÆ® :
http://www.phpbuilder.com/columns/luis20000420.php3
ĸ½¶È(encapsulation)
<?php
class Something {
// Ŭ·¡½º¸íÀÇ Ã¹ ¹®ÀÚ´Â ´ë¹®ÀÚ¸¦ »ç¿ëÇÕ´Ï´Ù.
var $x;
function setX($v) {
// ¸Þ¼µå´Â ¼Ò¹®ÀÚ·Î ½ÃÀÛÇÏÁö¸¸ ¿©·¯ °³ÀÇ ´Ü¾î·Î ±¸¼ºµÇ¾î ÀÖÀ»¶§´Â
setValueOfArea()¿Í °°Àº Çü½ÄÀ¸·Î »ç¿ëÇÕ´Ï´Ù.
$this->x=$v;
}
function getX() {
return $this->x;
}
}
?>
À§¿¡¼ Ŭ·¡½º ¸íÀ̳ª ¸Þ¼µå ¸íÀº ¹°·Ð ¿©·¯ºÐÀÌ ¿øÇÏ´Â ÇüÅ·ΠÀ̸§À» ¸íÇÒ ¼öµµ ÀÖÁö¸¸, Ç¥ÁØÈµÈ ¹æ¹ýÀ» »ç¿ëÇÏ´Â °ÍÀÌ ´õ À¯¿ëÇÒ °ÍÀÔ´Ï´Ù.
class¾È¿¡¼ ¸â¹öº¯¼ö´Â "var"¸¦ »ç¿ëÇؼ ¼±¾ðµÇ°í °ªÀÌ ÇÒ´çµÇ±â Àü±îÁö ¾Æ¹«·± ÇüÅÂ(type)µµ °¡ÁöÁö ¾Ê½À´Ï´Ù. ¸â¹öº¯¼ö´Â integer, array, associateive array, objectÇüŸ¦ °¡Áý´Ï´Ù. ¸Þ¼µå´Â Ŭ·¡½º ³»¿¡¼ Á¤ÀÇµÈ ÇÔ¼öÀÔ´Ï´Ù. $this->nameÇü½ÄÀ» »ç¿ëÇؼ ¸Þ¼µå ³»¿¡¼ ¸â¹öº¯¼ö¿¡ Á¢±ÙÀÌ °¡´ÉÇÕ´Ï´Ù.
new¿¬»êÀÚ¸¦ »ç¿ëÇؼ °´Ã¼(object)¸¦ ¸¸µé ¼ö ÀÖ½À´Ï´Ù.
$obj=new Something;
¾Æ·¡ÀÇ ÇüÅ·Π¸â¹öÇÔ¼ö¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
$obj->setX(5);
$see=$obj->getX();
setX¸â¹öÇÔ¼ö´Â obj¶ó´Â °´Ã¼(calss°¡ ¾Æ´Õ´Ï´Ù.)ÀÇ ¸â¹öº¯¼ö x¿¡ 5¶ó´Â °ªÀ» ÇÒ´çÇÏ°í getX´Â 5¶ó´Â °ªÀ» ¹ÝȯÇÕ´Ï´Ù.
$obj->x=6;¿Í °°Àº °´Ã¼ ÂüÁ¶¸¦ ÅëÇؼ ¸â¹öº¯¼ö¸¦ accessÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·¸Áö¸¸ ÀÌ°ÍÀº ÁÁÀº OOP¹æ¹ýÀÌ ¾Æ´Õ´Ï´Ù. ¸â¹öº¯¼ö¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Â ¸Þ¼µå¸¦ ÅëÇؼ ¸â¹öº¯¼ö¿¡ °ªÀ» Á¤Çϱ⸦ ¹Ù¶ø´Ï´Ù.
»ó¼Ó(Inheritance)
PHP¿¡¼ »ó¼Ó(Inheritance)Àº extendÅ°¿öµå·Î ½±°Ô »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
<?php
class Another extends Something {
var $y;
function setY($v) {
$this->y=$v;
}
function getY() {
return $this->y;
}
}
?>
"Another" Ŭ·¡½ºÀÇ °´Ã¼µéÀº ºÎ¸ð Ŭ·¡½º(Something)ÀÇ ¸â¹öº¯¼ö¿Í ¸Þ¼µå¿Í ÀÚ½ÅÀÇ ¸â¹öº¯¼ö¿Í ¸Þ¼µåµéÀ» °¡Áö°í ÀÖ½À´Ï´Ù. ¾Æ·¡¿Í °°ÀÌ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
$obj2=new Something;
$obj2->setX(6);
$obj2->setY(7);
´ÙÁß »ó¼ÓÀº Á¦°øµÇÁö ¾Ê±â ¶§¹®¿¡ 2°³ ÀÌ»óÀÇ class¿¡¼ »ó¼Ó ¹ÞÀ» ¼ö ¾ø½À´Ï´Ù
»ý¼ºÀÚ(constructor)
Ŭ·¡½º¿¡´Â »ý¼ºÀÚ(constructor)°¡ Á¤Àǵ˴ϴÙ. »ý¼ºÀڴ Ŭ·¡½º¸í°ú °°Àº À̸§À» °¡Áø ¸Þ¼µåÀÌ°í °´Ã¼¸¦ »ý¼ºÇÒ ¶§ È£ÃâµË´Ï´Ù. ¾Æ·¡ ¿¹Á¦¸¦ º¸¼¼¿ä.
<?php
class Something {
var $x;
function Something($y) {
$this->x=$y;
}
function setX($v) {
$this->x=$v;
}
function getX() {
return $this->x;
}
}
?>
´ÙÀ½°ú °°Àº °´Ã¼¸¦ ¸¸µì´Ï´Ù.
$obj=new Something(6);
»ý¼ºÀÚ´Â ÀÚµ¿ÀûÀ¸·Î ¸â¹öº¯¼öx¿¡ 6À» ÇÒ´çÇÕ´Ï´Ù. »ý¼ºÀÚ¿Í ¸Þ¼µå´Â º¸ÅëÀÇ PHPÇÔ¼ö·Î ÀÎÀÚ°ªÀ» ÃʱâÈ ½Ãų ¶§ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
function Something($x="3",$y="5")À̸é
$obj=new Something(); // x=3 and y=5
$obj=new Something(8); // x=8 and y=5
$obj=new Something(8,9); // x=8 and y=9
ÀÎÀÚµéÀÇ ÃʱⰪÀº X°ªÀ» ºñ¿ì°í Y°ªÀ» ÇÒ´çÇÒ ¼ö´Â ¾ø½À´Ï´Ù. ÀÎÀÚ°ªÀº ¿ÞÂÊ¿¡¼ºÎÅÍ ¿À¸¥ÂÊÀ¸·Î ÇÒ´çµË´Ï´Ù. ÀÎÀÚ°ªµéÀ» ãÁö ¸øÇÏ¸é ±×°ÍÀº ÃʱⰪÀ¸·Î ÇÒ´çµË´Ï´Ù.
ÆÄ»ýŬ·¡½ºÀÇ °´Ã¼°¡ ´ÜÁö ÇϳªÀÇ »ý¼ºÀÚ¸¦ È£ÃâÇßÀ» ¶§ ºÎ¸ðŬ·¡½ºÀÇ »ý¼ºÀڴ ȣÃâ µÇÁö ¾Ê½À´Ï´Ù. ¿Ö³ÄÇϸé OOPÀÇ ÀüÅëÀûÀÎ ÇüŸ¦ µû¸£°í ÀÖ¾î¼ ±×·¸½À´Ï´Ù. ¸¸¾à baseŬ·¡½ºÀÇ »ý¼ºÀÚ¸¦ È£ÃâÇϱ⸦ ¿øÇÑ´Ù¸é ÆÄ»ýŬ·¡½ºÀÇ »ý¼ºÀÚ³»¿¡¼ ¸í½ÃÀûÀ¸·Î È£ÃâÇØ¾ß ÇÕ´Ï´Ù. ±× ÀÌÀ¯´Â ÆÄ»ýŬ·¡½º¿¡¼ »ó¼ÓÀ» ¹Þ¾Æ¼ ºÎ¸ðŬ·¡½ºÀÇ ¸ðµç ¸Þ¼µåµéÀº ÀÌ¿ëÇÒ ¼ö Àֱ⠶§¹®ÀÔ´Ï´Ù.
<?php
function Another() {
$this->y=5;
$this->Something(); //BaseŬ·¡½ºÀÇ ¸í½ÃÀûÈ£Ãâ
}
?>
¿À¹ö·Îµù(Overloading), ¿À¹ö¶óÀ̵ù(Overriding)
¿À¹ö·ÎµùÀº PHP¿¡¼ Áö¿øÇÏÁö ¾Ê½À´Ï´Ù. OOP¿¡¼ ¿À¹ö·Îµå ¸Þ¼µå´Â 2°³ ÀÌ»óÀÇ ¸Þ¼µå¸¦ °°Àº À̸§À¸·Î Á¤ÀÇÇÏÁö¸¸ ´Ù¸¥ ¼öÀÇ È¤Àº ´Ù¸¥ ÇüÅÂÀÇ ÆĶó¹ÌÅ͸¦ °¡Áý´Ï´Ù. PHP´Â ÇüÅÂÀÇ ±¸º°ÀÌ ¾ø´Â ¾ð¾îÀÔ´Ï´Ù. ±×·¡¼ ÇüÅ¿¡ ÀÇÇÑ ¿À¹ö·ÎµùÀº ÇÒ ¼ö ¾ø½À´Ï´Ù. ±×·¡¼ ÆĶó¹ÌÅÍ ¼ö¿¡ ÀÇÇÑ ¿À¹ö·Îµù ¿ª½Ã ÇÒ ¼ö ¾ø½À´Ï´Ù
PHP¿¡¼ ´ÙÀ½°ú °°Àº Æ®¸¯À» ÀÌ¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
<?php
class Myclass {
function Myclass() {
$name="Myclass".func_num_args();
$this->$name();
//$this->$name()Àº ÀϹÝÀûÀ¸·Î À߸øµÈ °ÍÀÌÁö¸¸
¿©±â¼ $name´Â ¸Þ¼µå¸íÀ¸·Î È£ÃâµË´Ï´Ù.
//func_num_args()ÇÔ¼ö´Â ÀÎÀÚÀÇ °³¼ö¸¦ ³Ñ°ÜÁÖ´Â ÇÔ¼öÀÔ´Ï´Ù.
}
function Myclass1($x) {
code;
}
function Myclass2($x,$y) {
code;
}
}
?>
ÀÌ°ÍÀº Ưº°ÇÑ ¹æ¹ýÀ¸·Î ´ÙÀ½°ú °°Àº È¿°ú°¡ ÀÖ½À´Ï´Ù.
$obj1=new Myclass('1'); // Myclass1À» È£Ãâ
$obj2=new Myclass('1','2'); // Myclass2 À» È£Ãâ
´ÙÇü¼º(Polymorphism)
´ÙÇü¼º(Polymorphism)Àº ÀÌ¿ëÇÒ °´Ã¼¸¦ °áÁ¤ÇÏ´Â °ÍÀ¸·Î Á¤Àǵ˴ϴÙ.
¿¹¸¦ µé¾î ¸¸¾à figureŬ·¡½º¿¡ draw¸Þ¼µå°¡ Á¤Àǵǰí ÆÄ»ýŬ·¡½ºÀÎ circle¿Í rectangle¿¡ draw¸Þ¼µå¸¦ ¿À¹ö¶óÀ̵åÇϸé ÇÔ¼ö¿¡¼ xÀÎÀÚ¸¦ ¿øÇϸé $x->draw()¶ó°í ÇؾßÇÕ´Ï´Ù.
¸¸¾à ´ÙÇü¼ºÀ» °¡Áö°í ÀÖ´Â draw¸Þ¼µå¸¦ È£ÃâÇÏ¸é °´Ã¼ÀÇ ÇüÅ¿¡ ÀÇÁ¸ÇÏ°Ô µË´Ï´Ù. ´ÙÇü¼ºÀº ÀÎÅÍÇÁ¸®Æ® ¾ð¾îÀÎ PHP¿¡¼´Â ¸Å¿ì ½±°í ÀÚ¿¬½º·¯¿î °ÍÀÔ´Ï´Ù.
<?php
function niceDrawing($x) {
// BoardÀÇ ¸Þ¼µåÀÔ´Ï´Ù.
$x->draw();
}
$obj=new Circle(3,187);
$obj2=new Rectangle(4,5);
// CircleÀÇ draw¸Þ¼µå¸¦ È£ÃâÇÕ´Ï´Ù.
$board->niceDrawing($obj);
// RectangleÀÇ draw¸Þ¼µå¸¦ È£ÃâÇÕ´Ï´Ù.
$board->niceDrawing($obj2);
?>
Serializing
PHP¿¡¼´Â ¿µ±¸ÀûÀÎ °´Ã¼´Â Á¦°øµÇÁö ¾Ê½À´Ï´Ù. OPP¿¡¼ ¿µ±¸ÀûÀÎ °´Ã¼µéÀº ´Ù¾çÇÑ ÀÀ¿ëÀÇ ¹ßÇö¿¡µµ »óÅÂ¿Í ±â´ÉÀ» À¯ÁöÇÏ´Â °´Ã¼ÀÔ´Ï´Ù. ´Ù½Ã ¸»Çؼ ÆÄÀÏ°ú µ¥ÀÌÅͺ£À̽º¿¡ ´ëÇÑ °´Ã¼ ÀúÀå ´É·Â °¡Áö°í¼ ±× °´Ã¼¸¦ ·ÎµùÇÏ´Â °ÍÀÔ´Ï´Ù.
ÀÌ·¯ÇÑ ¹æ¹ýÀ» serializationÀ̶ó°í ÇÕ´Ï´Ù. PHP¿¡´Â °´Ã¼¸¦ È£ÃâÇÒ ¼ö ÀÖ´Â serialize¸Þ¼µå°¡ Àִµ¥ ¹®ÀÚ¿À» ¹ÝȯÇؼ °´Ã¼¸¦ ³ªÅ¸³À´Ï´Ù.
PHP4¿¡¼ ¸¸¾à °´Ã¼ÀÇ ¹®ÀÚ¿ $s¸¦ serializeÇÏ¸é °´Ã¼´Â ¼Ò¸êµË´Ï´Ù. °´Ã¼ÀÇ $obj¸¦ unserializeÇÏ¸é °´Ã¼ÀÇ ¸Þ¼µå¿¡ accessÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ°ÍÀ» ÃßõÇÏÁö ¾Ê´Âµ¥ ±× ÀÌÀ¯·Î ¹®¼È´Â ÀÌ·± ÀÛ¿ëÀ» º¸ÀåÇÏÁö´Â ¾Ê±â ¶§¹®ÀÔ´Ï´Ù. ¿Ö³ÄÇϸé, ÀÌÈÄÀÇ ¹öÀü¿¡¼´Â ±×°ÍÀº ½ÇÈ¿¼ºÀÌ ¾ø±â ¶§¹®ÀÔ´Ï´Ù. ÀÌ°ÍÀº ¸¸¾à ½ºÅ©¸³Æ®¸¦ ÄÄÇ»ÅÍ¿¡ ±â¾ï½ÃÅ°°Å³ª Áö¿ì±â À§ÇØ ¿¬¼ÓÀûÀÎ ¹öÀüÀ» ÀúÀåÇÒ °æ¿ì È¥¶õÀ» ¾ß±âÇÒ ¼ö ÀÖ°í ±× ½ºÅ©¸³Æ®¸¦ ³ªÁß¿¡ ½ÇÇàÇÒ¶§ ¾î¶² °´Ã¼°¡ ¸Þ¼µå¿¡ ±â´ëÇÏ´Â ¹®ÀÚ¿À» ½ÇÇàÇÒ ¼ö ¾ø½À´Ï´Ù. ¿Ö³ÄÇÏ¸é ±× ¹®ÀÚ¿ Ç¥½Ã´Â ¸Þ¼µå¸¦ °®°í ÀÖÁö ¾Ê±â ¶§¹®ÀÔ´Ï´Ù. ³ªÁß¿¡ ½ºÅ©¸³Æ®¸¦ ½ÇÇà½ÃÅ°¸é serializingÀº °´Ã¼ÀÇ ¸â¹öº¯¼ö¸¦ ÀúÀåÇϴµ¥ ¸Å¿ì À¯¿ëÇÕ´Ï´Ù.
<?php
$obj=new Classfoo();
$str=serialize($obj);
$obj2=unserialize($str)
?>
¸â¹öº¯¼ö¸¦ ¹ß°ßÇÏÁö¸¸ ¸Þ¼µå´Â ¾Æ´Õ´Ï´Ù. ¸Þ¼µå°¡ ¾ø±â ¶§¹®¿¡ $obj2->x°¡ À¯ÀÏÇÑ Á¢±Ù ¹æ¹ýÀÔ´Ï´Ù.
Ŭ·¡½º¸¦ »ç¿ëÇؼ ÀúÀåµÈ µ¥ÀÌÅÍ ´Ù·ç±â
¿©·¯ºÐÀº ¾î¶² °ÍÀ» ´Ù·ç±â¸¦ ¿øÇÒ ¶§ ½±°Ô Ŭ·¡½º·Î Á¤ÀÇ ÇÒ ¼ö ÀÖ°í ¿øÇÒ ¶§ ¸¶´Ù ÀûÀýÇÑ Å¬·¡½º¸¦ È£ÃâÇÒ ¼ö ÀÖ½À´Ï´Ù. »ç¿ëÀÚ°¡ Á¦Ç°ID·Î Á¦Ç°À» ¼±ÅÃÇÏ´Â htmlÆû(form)ÀÌ ÀÖ´Ù°í °¡Á¤ÇÏ¸é µ¥ÀÌÅͺ£À̽º¿¡ Á¦Ç°ÀÇ µ¥ÀÌÅ͸¦ °¡Áö°í ÀÖ¾î¾ß ÇÏ°í Á¦Ç°ÀÇ ÇüÅÂ¿Í °¡°Ý µîÀ» º¸¿© Áֱ⸦ ¿øÇÒ °ÍÀÔ´Ï´Ù. ¿©·¯ºÐÀº ´Ù¸¥ ÇüÅÂÀÇ Á¦Ç°À» °¡Áö°í ÀÖ°í ´Ù¸¥ Á¾·ùÀÇ »ý»ê¹°Àº °°Àº ±â´É¿¡µµ ´Ù¸¥ Àǹ̸¦ °¡Áý´Ï´Ù. ¿¹¸¦ µé¾î, play°¡ ´Ù¸¥ Á¾·ùÀÇ Á¦Ç°ÀÌ µ¥ÀÌÅͺ£À̽º¿¡ ÀúÀåµÈ »çÁøÀ» º¸¿©ÁÖ´Â Àǹ̸¦ °¡Áö´Â µ¿¾È¿¡ ¼Ò¸®¸¦ ³»´Â °ÍÀ» ÀǹÌÇÒ ¼öµµ ÀÖ½À´Ï´Ù. OOP¿Í PHP¸¦ »ç¿ëÇؼ Äڵ带 ÀÛÁö¸¸ ÁÁ°Ô ÇÒ ¼ö ÀÖ½À´Ï´Ù
productŬ·¡½º¸¦ Á¤ÀÇÇغ¸¸é Ŭ·¡½º´Â ¸Þ¼µåµéÀº °¡Áý´Ï´Ù. °¢°¢ÀÇ Á¦Ç°ÀÇ À¯ÇüÀ¸·Î Á¤ÀÇµÈ Å¬·¡½ºµéÀº productŬ·¡½º¸¦ »ó¼Ó¹Þ°í ¸Þ¼µå¸¦ °¢°¢ÀÇ Å¬·¡½ºµéÀÌ ÇൿÇϱ⠿øÇÏ´Â °ÍÀ¸·Î ¿À¹ö¶óÀ̵å ÇÕ´Ï´Ù.
<?php
$obj=new $type();
$obj->action();
?>
¿©·¯ºÐÀÌ $objÀÇ display¸Þ¼µå³ª °´Ã¼ÀÇ À¯Çü¿¡ »ó°üÇÏÁö ¾Ê°í ´Ù¸¥ ¸Þ¼µå¸¦ È£ÃâÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ±â¹ýÀº ¿©·¯ºÐÀÌ »õ·Î¿î °´Ã¼ÀÇ À¯ÇüÀ» Ãß°¡½ÃÅ°·Á°í ÇÒ ¶§ ½ºÅ©¸³Æ®¸¦ Á¶ÀÛÇÒ ¼ö ¾ø°ÔÇÕ´Ï´Ù. ÀÌ°ÍÀº ²Ï °·ÂÇÑ°ÍÀ¸·Î ¸ðµç °´Ã¼ÀÇ ¸Þ¼µå¸¦ ÇüÅ¿¡ »ó°ü¾øÀÌ Á¤ÀÇ ÇÕ´Ï´Ù. ´Ù¸¥ Ŭ·¡½º¿¡¼ ´Ù¸¥ ¹æ¹ýÀ¸·Î ±×°ÍµéÀ» ±¸ÇöÇÏ°í main¿¡¼ °´Ã¼ÀÇ À¯Çü¿¡ »ó°ü¾øÀÌ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù
Copying, cloning
$obj°´Ã¼¸¦ ¸¸µé ¶§ $obj2=$obj¿¡ ÀÇÇØ °´Ã¼¸¦ º¹»çÇÒ ¼ö ÀÖ½À´Ï´Ù. »õ·Î¿î °´Ã¼´Â $obj°¡ º¹»çµÈ °ÍÀÌ°í $objÀÇ »óŸ¦ ÇÒ´ç ¹Þ½À´Ï´Ù. ¶§¶§·Î ÀÌ°ÍÀ» ¿øÇÏÁö ¾ÈÀ» ¼öµµ ÀÖ½À´Ï´Ù. Obj¿Í °°Àº Ŭ·¡½ºÀÇ »õ·Î¿î °´Ã¼¸¦ ¸¸µé±â¸¦ ¿øÇÑÇÏ¸é »õ·Î¿î °´Ã¼ÀÇ »ý¼ºÂ÷¸¦ È£ÃâÇϼ¼¿ä.
¸¸¾à, »õ·Î¿î ¹®ÀåÀ» °¡Áö°í ÀÖ´Ù¸é, ÀÌ°ÍÀº PHP¿¡¼ serialization°ú ´Ù¸¥ ¸ðµç Ŭ·¡½º¸¦ »ó¼ÓÇÏ´Â baseŬ·¡½º¸¦ »ç¿ëÇؼ ÇÒ ¼ö ÀÖ½À´Ï´Ù
̵̧ : 635
̵̧
¸ñ·Ï