Menu
CoddyTech

정적 함수

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

static func은 정적 변수처럼 클래스에 속합니다. 객체 없이 클래스 이름을 통해 호출하며, 파일에 관한 단원에서 했던 것처럼 사용합니다: Greeter.greet("Ada"). 클래스는 정적 함수와 일반 메서드를 함께 사용할 수 있습니다:

# student.gd
class_name Student
extends RefCounted

static var count: int = 0
var student_name: String
var score: int

func _init(new_name: String, new_score: int) -> void:
	student_name = new_name
	score = new_score
	count += 1

static func is_passing(points: int) -> bool:
	return points >= 60

static func from_line(line: String) -> Student:
	var parts := line.split(" ")
	return Student.new(parts[0], int(parts[1]))
print(Student.is_passing(72)) # true
var ada := Student.from_line("Ada 91")
print(ada.score) # 91
print(Student.count) # 1

정적 함수는 객체 없이 실행되므로 인스턴스 변수나 self를 사용할 수 없습니다. 따라서 is_passing() 안의 score는 프로그램이 실행되기 전에 보고되는 오류입니다. 정적 함수는 매개변수, 상수, 정적 변수 및 다른 정적 함수를 사용할 수 있습니다.

from_line()은 흔히 사용되는 방식을 보여 줍니다. 텍스트 한 줄로 객체를 만들고 반환하는 정적 함수입니다. 이는 Student.new()와 함께 Student를 만드는 또 다른 방법입니다.

ada.is_passing(50)에서처럼 객체에서 정적 함수를 호출할 수도 있지만, 클래스 이름을 사용하면 객체가 관여하지 않는다는 점이 분명해집니다.

challenge icon

챌린지

쉬움

채점 코드를 두 개의 클래스로 작성하세요.

grader.gd의 Grader에는 정적 함수만 있습니다.

  • letter(points)는 90 이상이면 "A", 80 이상이면 "B", 70 이상이면 "C", 60 이상이면 "D", 그 미만이면 "F"를 반환합니다.
  • is_passing(points)는 60 이상이면 true를 반환합니다.

student.gd의 Student에는 속성과 생성자가 이미 있습니다. 다음을 완성하세요.

  • 공백을 기준으로 Ada 91과 같은 줄을 나누고 해당 이름과 점수로 새 Student를 반환하는 정적 함수 from_line(line)
  • 두 Grader 함수를 사용하여 NAME: SCORE (LETTER), passed 또는 NAME: SCORE (LETTER), failed를 반환하는 메서드 report()

제공된 코드는 이어지는 학생 수를 읽고, Student.from_line()을 사용해 각 학생을 만들고, 보고서를 출력한 다음, 마지막으로 합격한 학생 수를 셉니다. Ada 91, Bo 42, Cy 75를 입력하면 다음을 출력합니다.

Ada: 91 (A), passed
Bo: 42 (F), failed
Cy: 75 (C), passed
Passed: 2 of 3

코드는 grader.gd와 student.gd에 작성하세요. main.gd에는 제공된 입출력 코드가 있으며 수정할 수 없습니다.

직접 해보기

extends Node

func _ready():
	# 제공된 입출력 코드: 그대로 유지하세요
	var count := int(OS.read_string_from_stdin())
	var passed := 0
	for i in count:
		var student := Student.from_line(OS.read_string_from_stdin())
		print(student.report())
		if Grader.is_passing(student.score):
			passed += 1
	print("Passed: %d of %d" % [passed, count])
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

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

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