요약 - 직원 계층 구조
Coddy C# 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 70개 중 24번째.
챌린지
쉬움이 장의 모든 상속 개념을 하나로 묶는 직원 계층 시스템을 구축해 보겠습니다. 서로 다른 직원 유형이 공통 속성을 공유하지만 보너스를 다르게 계산하는 회사 구조를 만들 것입니다.
코드는 네 개의 파일로 구성됩니다.
Employee.cs:Company네임스페이스에 기본Employee클래스를 정의합니다. 모든 직원은Name(string)과Salary(decimal)를 가집니다. 두 값을 모두 받는 생성자를 만듭니다. 기본적으로 급여의 10%를 반환하는virtual메서드CalculateBonus()를 추가합니다.ToString()을 오버라이드하여"{Name} - ${Salary}"를 반환하도록 합니다.Manager.cs:Employee를 상속받는Manager클래스를Company네임스페이스에 정의합니다. 매니저는 추가적인TeamSize속성(int)을 가집니다. 생성자는 이름, 급여, 팀 규모를 받아야 하며,base를 사용하여 부모를 초기화합니다.CalculateBonus()를 오버라이드하여 급여의 15%에 팀원 한 명당 $50를 더한 금액을 반환합니다.ToString()을 오버라이드하여"{Name} - ${Salary} (Manager, Team: {TeamSize})"를 반환하도록 합니다.Developer.cs:Employee를 상속받는Developer클래스를Company네임스페이스에 정의합니다. 개발자는ProgrammingLanguage속성(string)을 가집니다. 생성자는 이름, 급여, 프로그래밍 언어를 받습니다.CalculateBonus()를 오버라이드하여 급여의 12%를 반환합니다.ToString()을 오버라이드하여"{Name} - ${Salary} (Developer, {ProgrammingLanguage})"를 반환하도록 합니다.Program.cs: 메인 파일에서 입력 값을 사용하여 각 직원 유형을 하나씩 생성합니다. 다형성을 보여주기 위해 세 명 모두를Employee참조 배열에 저장합니다. 배열을 루프하며 각 직원의ToString()결과와 보너스를 출력합니다.
여섯 개의 입력을 받게 됩니다:
- 기본 직원 이름
- 기본 직원 급여
- 매니저 이름
- 매니저 급여
- 매니저 팀 규모
- 개발자 이름
- 개발자 급여
- 개발자 프로그래밍 언어
각 직원의 정보와 보너스를 다음 형식으로 출력하세요:
{ToString result}
Bonus: ${CalculateBonus result}예를 들어, 입력값이 John, 50000, Sarah, 80000, 5, Mike, 70000, C#인 경우 출력은 다음과 같아야 합니다:
John - $50000
Bonus: $5000
Sarah - $80000 (Manager, Team: 5)
Bonus: $12250
Mike - $70000 (Developer, C#)
Bonus: $8400각 직원 유형이 보너스를 다르게 계산하지만, 단일 Employee 배열을 통해 모두 처리할 수 있는 방식에 주목하세요. 이것이 상속과 다형성을 결합한 힘입니다!
직접 해보기
using System;
using Company;
class Program
{
public static void Main(string[] args)
{
// 기본 직원 입력 읽기
string empName = Console.ReadLine();
decimal empSalary = Convert.ToDecimal(Console.ReadLine());
// 매니저 입력 읽기
string mgrName = Console.ReadLine();
decimal mgrSalary = Convert.ToDecimal(Console.ReadLine());
int teamSize = Convert.ToInt32(Console.ReadLine());
// 개발자 입력 읽기
string devName = Console.ReadLine();
decimal devSalary = Convert.ToDecimal(Console.ReadLine());
string progLang = Console.ReadLine();
// TODO: Employee 하나, Manager 하나, Developer 하나를 생성하세요
// TODO: 다형성을 보여주기 위해 세 객체 모두를 Employee 배열에 저장하세요
// TODO: 배열을 순회하며 각 직원의 ToString() 결과와 보너스를 출력하세요
// 형식:
// {ToString 결과}
// Bonus: ${CalculateBonus 결과}
}
}