Menu
Coddy logo textTech

복습 - 직원 계층 구조

Coddy PHP 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 91개 중 26번째.

challenge icon

챌린지

쉬움

이 장에서 배운 모든 상속 개념을 하나로 모으는 employee hierarchy system을 만들어 보겠습니다. 모든 employee가 반드시 가져야 하는 것을 정의하는 abstract base class를 만든 다음, 보너스를 서로 다르게 계산하는 specialized employee types로 이를 확장합니다.

코드를 네 개의 파일로 구성합니다.

  • Employee.php: 모든 employee types의 기반 역할을 하는 abstract Employee class를 Define합니다. protected properties $name$salary를 가져야 합니다. constructor는 두 값을 모두 accepts하여 설정합니다. 이름을 returns하는 getName() method, salary를 returns하는 getSalary() method, 그리고 자식 class가 Implement해야 하는 abstract method calculateBonus()를 포함합니다. 또한 "[name] earns $[salary] with bonus: $[bonus]"를 returns하는 getSummary() method도 추가합니다. 여기서 [bonus]calculateBonus()를 호출한 결과입니다.
  • Manager.php: Employee를 extends하는 Manager class를 Define합니다. 맨 위에서 Employee 파일을 Include합니다. Manager는 percentage 기반 보너스를 받습니다. protected $bonusPercentage property를 추가합니다. constructor는 name, salary, bonus percentage를 accepts해야 합니다. 처음 두 값에는 parent::__construct()를 사용한 다음 percentage를 직접 설정합니다. salary에 bonus percentage를 곱하고 100으로 나눈 값을 returns하도록 calculateBonus()를 Implement합니다.
  • Developer.php: Employee를 extends하는 Developer class를 Define합니다. 맨 위에서 Employee 파일을 Include합니다. Developer는 fixed project completion bonus를 받습니다. protected $projectBonus property를 추가합니다. constructor는 name, salary, project bonus amount를 accepts해야 합니다. 처음 두 값에는 parent::__construct()를 사용한 다음 project bonus를 직접 설정합니다. fixed project bonus amount를 그대로 returns하도록 calculateBonus()를 Implement합니다.
  • main.php: Manager와 Developer 파일을 모두 Include합니다. manager name, manager salary, manager bonus percentage, developer name, developer salary, developer project bonus라는 여섯 개의 inputs를 받습니다. 이 값들로 ManagerDeveloper를 Create합니다. 먼저 manager에서 getSummary()를 호출한 결과를 Print하고, 다음으로 developer의 결과를 각각 별도의 줄에 Print합니다.

이 challenge는 abstract classes가 contract를 어떻게 강제하는지 보여 줍니다. 모든 employee는 자신의 bonus를 calculateBonus할 수 있어야 하지만, 계산 로직은 role에 따라 달라집니다. Manager는 자신의 salary의 percentage를 사용하고, Developer는 fixed amount를 받습니다. parent class에 있는 공유 getSummary() method는 polymorphism을 통해 어느 bonus 계산 방식과도 seamless하게 작동합니다.

직접 해보기

<?php
require_once 'Manager.php';
require_once 'Developer.php';

// 입력 읽기
$managerName = trim(fgets(STDIN));
$managerSalary = floatval(trim(fgets(STDIN)));
$managerBonusPercentage = floatval(trim(fgets(STDIN)));
$developerName = trim(fgets(STDIN));
$developerSalary = floatval(trim(fgets(STDIN)));
$developerProjectBonus = floatval(trim(fgets(STDIN)));

// TODO: 매니저 입력으로 Manager 객체 생성

// TODO: 개발자 입력으로 Developer 객체 생성

// TODO: 매니저의 요약 출력 (getSummary())

// TODO: 개발자의 요약 출력 (getSummary())
?>

객체 지향 프로그래밍의 모든 레슨

직접 연습해 보세요: 온라인 PHP 컴파일러