PHP 객체 지향 프로그래밍에서 세터와 게터의 장점

이전 강의에서 우리는 각 속성에 대해 게터와 세터를 만들었습니다. 속성을 비공개 대신 공개로 만들면 사실상 동일한 효과를 얻을 수 있는데, 왜 이런 복잡함이 필요한지 의문이 생길 수 있습니다.

그 이유는 게터와 세터가 장점을 가지고 있기 때문입니다: 속성에 접근하기 전에 몇 가지 검사를 수행할 수 있습니다. 예를 들어, 우리의 경우 이름과 성을 기록할 때 새 값이 빈 문자열이 아닌지 확인할 수 있습니다:

php<?php
  class User {
    private $name;
    private $surn;
    
    public function setName($name) {
      if (strlen($name) > 0) {
        $this->name = $name;
      } else {
        echo 'name is incorrect';
      }
    }
    
    public function setSurn($surn) {
      if (strlen($surn) > 0) {
        $this->surn = $surn;
      } else {
        echo 'surn is incorrect';
      }
    }
    
    public function getName() {
      return $this->name;
    }
    
    public function getSurn() {
      return $this->surn;
    }
  }
?>

이것이 어떻게 작동하는지 테스트해 봅시다. 먼저 클래스의 객체를 생성하겠습니다:

php<?php
  $user = new User();
?>

이제 올바른 값을 기록해 보겠습니다:

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

이제 올바르지 않은 값을 기록해 보겠습니다:

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

Employee 클래스의 나이 세터에서 나이가 0세부터 120세 사이여야 한다는 검사를 구현하세요.

Задание 2

Employee 클래스의 급여 게터에서 급여를 읽을 때 그 값 끝에 달러 기호가 추가되도록 만드세요.