정적 함수
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)에서처럼 객체에서 정적 함수를 호출할 수도 있지만, 클래스 이름을 사용하면 객체가 관여하지 않는다는 점이 분명해집니다.
챌린지
쉬움채점 코드를 두 개의 클래스로 작성하세요.
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])
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: 온라인 GDScript 컴파일러