PHP에서 OOP의 추상 클래스

클래스 User가 있고, 그로부터 Employee와 Student 클래스가 상속받는다고 가정해 보세요.

이 경우, Employee와 Student 클래스의 객체는 생성하지만, User 클래스의 객체는 생성하지 않을 것입니다. 이 클래스는 후손들의 공통 속성과 메서드를 그룹화하는 데에만 사용되기 때문입니다.

이 경우, 당신이나 다른 프로그래머가 실수로 User 객체를 생성하는 것을 강제로 금지할 수 있습니다.

이를 위해 소위 추상(abstract) 클래스가 존재합니다. 추상 클래스는 그로부터 상속받기 위한 클래스입니다. 이러한 클래스의 객체는 생성할 수 없습니다.

클래스를 추상적으로 선언하려면, 선언 시 abstract 키워드를 작성해야 합니다:

User.php<?php
  abstract class User
  {
    
  }
?>

자, 추상 클래스 User의 구현을 작성해 봅시다. 비공개 속성 name과 그에 대한 게터(getter)와 세터(setter)가 있다고 가정해 보세요:

User.php<?php
  abstract class User
  {
    private $name;
    
    public function getName()
    {
      return $this->name;
    }
    
    public function setName($name)
    {
      $this->name = $name;
    }
  }
?>

User 클래스의 객체를 생성하려고 시도하면 오류가 발생합니다:

index.php<?php
  $user = new User; // 오류를 발생시킴
?>

그러나 우리의 클래스로부터 상속받는 것은 가능할 것입니다. 우리의 추상 클래스 User를 상속하는 Employee 클래스를 만들어 봅시다:

Employee.php<?php
  class Employee extends User
  {
    private $salary;
    
    public function getSalary()
    {
      return $this->salary;
    }
    
    public function setSalary($salary)
    {
      $this->salary = $salary;
    }
    
  }
?>

Employee 클래스의 객체를 생성해 보세요 - 모든 것이 작동할 것입니다:

index.php<?php
  $employee = new Employee;
  $employee->setName('john');  // 부모, 즉 User 클래스의 메서드
  $employee->setSalary(1000);  // 자체 메서드, 즉 Employee 클래스의 메서드
  
  echo $employee->getName();   // 'john'을 출력합니다
  echo $employee->getSalary(); // 1000을 출력합니다
?>
Задание 1

추상 클래스 Figure을 만드세요, 이는 기하학적 도형을 나타냅니다. 원, 직사각형, 정사각형에 대한 클래스가 이를 상속하도록 하세요.