본문 바로가기

PHP

PHP에서의 객체지향 특징

반응형

오늘은 객체지향 프로그래밍의 4대 특징 추상화, 캡슐화, 상속, 다형성 중 캡슐화, 상속, 다형성(오버로딩, 오버 라이딩)에 대해서 알아보자.


첫번째로 캡슐화는 데이터나 메소드 같은 자원들을 객체 안에 숨기는 것이라고 생각하면 쉬울것이다. 간단히 생각하면 캡슐로된 알약을 생각하면 이해가 더 빠르게 될 것 같다. 객체 안에 모든것을 숨기지만 인터페이스를 노출 시켜 밖에서는 객체 안에서 데이터들이 어떻게 처리되는지 알수 없지만 인터페이스를 통해 그 객체를 사용할 수 가있다.

------------------------------------------------------------------------------

<?php

class Date

{ private $year;

private $month;

private $date;


function __construct()

{ $this->year = 0;

$this->month = 0;

$this->date = 0;

echo "나는야 생성자";

}


function setYear($a) {    $this->year = $a;    }

function setMonth($b) {    $this->month = $b;    }

function setDate($c) {    $this->date = $c;    

function printDate()

{ echo $this->year . "년 " . $this->month . "월 " . $this->date . "일"; }

}

$obj = new Date();

$obj->setYear($year);

$obj->setMonth($month);

$obj->setDate($date);

$obj->printDate();

}

?>

------------------------------------------------------------------------------

위 코드를 보면 클래스 내에 있는 year, month, date변수는 private로 선언되어 있어서 그 클래서 내부에서 밖에 접근이 불가능 하다 이러한 변수에 접근하기 위해서 obj라는 객체를 만들어서 변수에 접근 할 수 있는 것이 캡슐화라고 할 수 있다.


<잘 실행되는 캡슐화 예제>


두번째로 알아볼 특징인 상속에 대해서 알아보자. 상속은 쉽게 현실에서 부모님의 자식은 부모님의 생김새나 특징같은 것을 상속받으면서 나만의 다른특징을 가지고 있는것이라고 생각할 수 있겠다. 부모 클래스를 상속받은 자식은 부모 클래스에 있는 메소드나 변수를 사용할 수 있으면서 자기 자신만의 메소드나 변수도 가질 수 있는 특징이다.


------------------------------------------------------------------------------

<?php

class Parents

{ private $house;


function __construct()

{      $this->house;

echo "나는야 부모 생성자" . "</br>";

}


function setHouse($a) { $this->house = $a; }

function getHouse() { echo $this->house . "-> 부모클래스 상속 받은집" . "</br>";     }

}

class Child extends Parents

{ private $car;


function __construct()

{ $this->car;

echo "나는야 자식 생성자" . "</br>";

}

function setCar($b) { $this->car = $b; }

function getCar()     { echo $this->car . "->자식 클래스 차" . "</br>"; }

}


$obj = new Child();


$obj->setHouse("아파트");

$obj->setCar("소나타");

$obj->getHouse();

$obj->getCar();


?>

------------------------------------------------------------------------------

obj는 자식 클래스의 객체 이지만 자식클래스에 있는 setCar나 getCar뿐만아니라 상속을 받았기 때문에 부모 클래스에 있는 setHouse나 getHouse까지 사용이 가능한 것을 볼 수가 있다.


<간단하지만 잘 실행되는 상속 예제>


마지막으로 다형성(오버로딩, 오버라이딩)에 대해서 알아보자

먼저 오버로딩은 우리말로 하면 중복이라고 하는데 막얀 두가지 인수를 더하는 함수가 있다고 하자 그런데 3가지, 4가지를 더하는 함수가 필요하다고 할때 함수의 이름을 addTwo, addThree... 이렇게 짓는다고 한다면 나중에 기억하기도 어렵고 써먹기도 어려울 것이다. 이러한 문제를 해결한 것이 오버로딩인데 사용자는 add라는 함수이름만 외우면 매개변수가 어떻게 되든지 편하게 사용할 수 있는 것이다.


예제를 만들려고 열심히 치고 있었는데 PHP에서는 오버로딩을 지원 하지 않는다고 한다................


다음으로 넘어가서 오버라이딩은 상속받은 만약 부모 클래스에 소나타라는 메소드가 있다고 한다면 부모클래스를 상속 받은 자식 클래스에서는 소나타라는 메소드를 자식클래스의 입맛에 맛게 안에 내용을 뜯어 고치는것이라고 할 수 있다.

------------------------------------------------------------------------------

<?php

class Parents

{

function sonata()

{ $speed = 10;

echo "부모클래스의 순정 소나타" . "</br>";

echo "스피드는 = " . $speed . "</br>";

}

}


class Child

{

function sonata()

{ $speed = 20;

echo "자식 클래스의 튜닝 소나타" . "</br>";

echo "스피드는 = " . $speed . "</br>";

}

}

$a = new Parents();

$a->sonata();

$b = new Child();

$b->sonata();

?>

------------------------------------------------------------------------------

부모 클래스에 있는 sonata라는 메소드를 자식 클래스에서 상속받아 자식 클래스에서 필요한 용도로 바꿔서 사용하는 것을 볼 수가 있다. 자식클래스에서 오버 라이딩을 하지만 부모 클래스에는 아무런 관련이 없는 것도 볼수가 있다.


<간단한 오버라이딩 예제의 실행결과>


반응형

'PHP' 카테고리의 다른 글

MVC패턴  (1) 2012.12.20
간단한 방명록 만들기  (0) 2012.11.29
쿠키란 무엇인가!  (0) 2012.11.20
HTML에서 post방식과 get방식의 차이점  (0) 2012.11.20