Menu
Coddy logo textTech

요약 - 직원 계층 구조

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

challenge icon

챌린지

쉬움

이 장에서 배운 모든 상속 개념을 하나로 묶는 직원 계층 시스템을 구축해 보겠습니다. 모든 직원이 갖추어야 할 요소를 정의하는 추상 기본 클래스를 만든 다음, 보너스를 다르게 계산하는 특수 직원 유형으로 이를 확장해 볼 것입니다.

코드는 네 개의 파일로 구성됩니다:

  • Employee.php — 모든 직원 유형의 기초가 되는 추상 Employee 클래스를 정의합니다. 보호된(protected) 속성인 $name$salary를 가져야 합니다. 생성자는 두 값을 모두 받아 설정합니다. 이름을 반환하는 getName() 메서드, 급여를 반환하는 getSalary() 메서드, 그리고 자식 클래스에서 반드시 구현해야 하는 추상 메서드 calculateBonus()를 포함하세요. 또한 "[name] earns $[salary] with bonus: $[bonus]"를 반환하는 getSummary() 메서드를 추가하세요. 여기서 [bonus]calculateBonus()를 호출한 결과입니다.
  • Manager.phpEmployee를 상속받는 Manager 클래스를 정의합니다. 파일 상단에 Employee 파일을 포함(include)하세요. 매니저는 백분율 기반의 보너스를 받습니다. 보호된 $bonusPercentage 속성을 추가하세요. 생성자는 이름, 급여, 보너스 백분율을 받아야 합니다. 처음 두 개는 parent::__construct()를 사용하여 설정하고, 백분율은 직접 설정하세요. calculateBonus()를 구현하여 급여에 보너스 백분율을 곱하고 100으로 나눈 값을 반환하도록 하세요.
  • Developer.phpEmployee를 상속받는 Developer 클래스를 정의합니다. 파일 상단에 Employee 파일을 포함하세요. 개발자는 고정된 프로젝트 완료 보너스를 받습니다. 보호된 $projectBonus 속성을 추가하세요. 생성자는 이름, 급여, 프로젝트 보너스 금액을 받아야 합니다. 처음 두 개는 parent::__construct()를 사용하여 설정하고, 프로젝트 보너스는 직접 설정하세요. calculateBonus()를 구현하여 단순히 고정된 프로젝트 보너스 금액을 반환하도록 하세요.
  • main.php — Manager와 Developer 파일을 모두 포함하세요. 매니저 이름, 매니저 급여, 매니저 보너스 백분율, 개발자 이름, 개발자 급여, 개발자 프로젝트 보너스의 다섯 가지 입력을 받게 됩니다. 이 값들로 ManagerDeveloper 객체를 생성하세요. 먼저 매니저의 getSummary() 호출 결과를 출력하고, 그다음 개발자의 결과를 각각 별도의 줄에 출력하세요.

이 챌린지는 추상 클래스가 어떻게 계약을 강제하는지 보여줍니다. 모든 직원은 보너스를 계산할 수 있어야 하지만, 계산 로직은 역할에 따라 다릅니다. Manager는 급여의 백분율을 사용하고, Developer는 고정된 금액을 받습니다. 부모 클래스에 공유된 getSummary() 메서드는 다형성을 통해 두 가지 보너스 계산 방식 모두와 원활하게 작동합니다.

직접 해보기

<?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())
?>

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