PHP에서 OOP의 추상 클래스
클래스 User가 있고,
그로부터 Employee와
Student 클래스가 상속받는다고 가정해 보세요.
이 경우, Employee와 Student 클래스의
객체는 생성하지만, User 클래스의 객체는 생성하지 않을 것입니다.
이 클래스는 후손들의 공통 속성과 메서드를
그룹화하는 데에만 사용되기 때문입니다.
이 경우, 당신이나 다른 프로그래머가 실수로
User 객체를 생성하는 것을 강제로 금지할 수 있습니다.
이를 위해 소위 추상(abstract) 클래스가 존재합니다. 추상 클래스는 그로부터 상속받기 위한 클래스입니다. 이러한 클래스의 객체는 생성할 수 없습니다.
클래스를 추상적으로 선언하려면,
선언 시 abstract 키워드를 작성해야 합니다:
<?php
abstract class User
{
}
?>
자, 추상 클래스 User의 구현을 작성해 봅시다.
비공개 속성 name과
그에 대한 게터(getter)와 세터(setter)가 있다고 가정해 보세요:
<?php
abstract class User
{
private $name;
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
}
?>
User 클래스의 객체를 생성하려고 시도하면
오류가 발생합니다:
<?php
$user = new User; // 오류를 발생시킴
?>
그러나 우리의 클래스로부터 상속받는 것은
가능할 것입니다. 우리의 추상 클래스
User를 상속하는 Employee 클래스를 만들어 봅시다:
<?php
class Employee extends User
{
private $salary;
public function getSalary()
{
return $this->salary;
}
public function setSalary($salary)
{
$this->salary = $salary;
}
}
?>
Employee 클래스의 객체를 생성해 보세요 -
모든 것이 작동할 것입니다:
<?php
$employee = new Employee;
$employee->setName('john'); // 부모, 즉 User 클래스의 메서드
$employee->setSalary(1000); // 자체 메서드, 즉 Employee 클래스의 메서드
echo $employee->getName(); // 'john'을 출력합니다
echo $employee->getSalary(); // 1000을 출력합니다
?>
추상 클래스 Figure을 만드세요,
이는 기하학적 도형을 나타냅니다.
원, 직사각형, 정사각형에 대한 클래스가
이를 상속하도록 하세요.