PHP에서 OOP 상위 클래스 메서드 재정의하기

하위 클래스는 같은 이름의 메서드를 생성하여 상위 클래스의 메서드를 재정의할 수 있습니다. 예제를 통해 살펴보겠습니다. 다음과 같은 상위 클래스가 있다고 가정해 봅시다:

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

하위 클래스에서 동일한 이름의 메서드를 만들어 보겠습니다:

php<?php
  class Student extends User {
    public function setName($name) {
      
    }
  }
?>

일반적으로 상위 클래스 메서드를 재정의하는 이유는 해당 메서드의 동작을 변경하거나 보완하기 위해서입니다. 이 경우 이름의 길이를 확인하는 기능을 추가해 보겠습니다:

php<?php
  class Student extends User {
    public function setName($name) {
      if (strlen($name) > 0) {
        $this->name = $name;
      } else {
        echo 'student name error';
      }
    }
  }
?>

실제로 재정의된 메서드가 호출되는지 확인해 보겠습니다. 먼저 하위 클래스의 객체를 생성합니다:

php<?php
  $student = new Student;
?>

이제 올바른 값을 전달하여 메서드를 호출해 보겠습니다:

php<?php
  $student->setName('john');
?>

이번에는 올바르지 않은 값을 전달하여 메서드를 호출해 보겠습니다. 결과적으로 발생한 예외를 확인할 수 있습니다:

php<?php
  $student->setName(''); // 오류
?>
Задание 1

User 클래스에서 나이에 대한 getter와 setter를 만드세요.

Задание 2

Employee 클래스에서 나이 setter를 재정의하고, 나이가 18세에서 65세 사이인지 확인하는 기능을 추가하세요.