Menu
CoddyTech

복습 - 직원 계층 구조

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

challenge icon

챌린지

중급

5개의 파일에 걸쳐 회사의 클래스 계층 구조를 만드세요.

  • Person: 생성자로 설정하는 person_name과 age를 가집니다. introduce()는 Hi, I'm NAME, AGE years old.를 반환합니다.
  • Employee는 Person을 상속하고 employee_id(String)와 salary(연봉, int)를 추가합니다. introduce()를 재정의하여 부모의 텍스트 뒤에 My employee ID is ID.를 추가합니다. monthly_pay()는 급여를 12.0으로 나눈 값을 반환합니다.
  • Manager는 Employee를 상속하고 department를 추가합니다. 이 클래스의 monthly_pay()는 직원 급여에 1.2를 곱한 값이며, manage_team()은 Managing the DEPARTMENT department.를 반환합니다.
  • Engineer는 Employee를 상속하고 language를 추가합니다. code()는 Coding in LANGUAGE.를 반환합니다.
  • Payroll에는 정적 함수가 두 개 있습니다. role(p)는 p의 가장 구체적인 클래스인 Manager, Engineer, Employee 또는 Person을 반환합니다. total_monthly(people)은 직원인 사람들(관리자와 엔지니어 포함)의 monthly_pay() 합계를 반환합니다.

각 생성자는 부모의 값을 super()에 전달하며, 부모의 결과를 확장하는 모든 재정의 함수는 super()를 사용합니다.

제공된 코드는 먼저 뒤따르는 사람의 수를 읽고, 각 사람에 대해 한 줄씩 읽습니다. 형식은 person NAME AGE, employee NAME AGE ID SALARY, manager NAME AGE ID SALARY DEPARTMENT 또는 engineer NAME AGE ID SALARY LANGUAGE입니다. 각 사람에 대해 대괄호 안에 역할과 introduce()를 출력하고, 직원이면 월급을 출력하며, 해당하는 경우 manage_team() 또는 code()를 출력하고, 마지막에 합계를 출력합니다. employee Alice 35 E123 60000와 manager Bob 45 M54 85000 Marketing에 대해 다음을 출력합니다:

[Employee] Hi, I'm Alice, 35 years old. My employee ID is E123.
Monthly pay: 5000.00
[Manager] Hi, I'm Bob, 45 years old. My employee ID is M54.
Monthly pay: 8500.00
Managing the Marketing department.
Total monthly payroll: 13500.00

코드는 person.gd, employee.gd, manager.gd, engineer.gd 및 payroll.gd에 작성하세요. main.gd에는 제공된 입력/출력 코드가 있으며 수정할 수 없습니다.

직접 해보기

extends Node

func _ready():
	# 제공된 입출력 코드: 그대로 유지하세요
	var count := int(OS.read_string_from_stdin())
	var people: Array[Person] = []
	for i in count:
		var p := OS.read_string_from_stdin().split(" ")
		if p[0] == "manager":
			people.append(Manager.new(p[1], int(p[2]), p[3], int(p[4]), p[5]))
		elif p[0] == "engineer":
			people.append(Engineer.new(p[1], int(p[2]), p[3], int(p[4]), p[5]))
		elif p[0] == "employee":
			people.append(Employee.new(p[1], int(p[2]), p[3], int(p[4])))
		else:
			people.append(Person.new(p[1], int(p[2])))
	for person in people:
		print("[%s] %s" % [Payroll.role(person), person.introduce()])
		if person is Employee:
			print("Monthly pay: %.2f" % (person as Employee).monthly_pay())
		if person is Manager:
			print((person as Manager).manage_team())
		elif person is Engineer:
			print((person as Engineer).code())
	print("Total monthly payroll: %.2f" % Payroll.total_monthly(people))

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

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