클래스와 객체 비교
Coddy GDScript 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 65개 중 3번째.
클래스와 그 객체는 서로 다른 것을 보유합니다. 클래스의 const는 클래스 자체에 속합니다. 값은 하나뿐이며, 객체를 만들지 않고 클래스 이름을 통해 읽습니다.
# dog.gd
class_name Dog
extends RefCounted
const SPECIES = "Canis familiaris"
var dog_name: String = "Unnamed"
var breed: String = "Unknown"print(Dog.SPECIES) # Canis familiarisvar 줄은 각 객체가 무엇을 담고 있는지 설명합니다. new()로 생성된 모든 객체는 기본값으로 시작하는 이러한 변수의 복사본을 각각 가집니다:
var dog1 := Dog.new()
var dog2 := Dog.new()
dog1.dog_name = "Nicky"
dog1.breed = "Husky"
print(dog1.dog_name) # Nicky
print(dog2.dog_name) # Unnameddog1을 변경해도 dog2는 그대로입니다. 객체도 상수를 읽을 수 있습니다. dog1.SPECIES는 Dog.SPECIES와 같은 값입니다.
객체에는 클래스에서 선언한 변수만 있습니다. dog1.color = "brown"은 프로그램을 오류와 함께 중단합니다. Dog에는 color 변수가 없기 때문입니다. 객체에 필요한 모든 변수는 클래스에 넣습니다.
챌린지
쉬움student.gd에서 Student 클래스를 완성하세요.
- 클래스 전체에서 공유하는 값이
"Godot High School"인 상수SCHOOL String변수student_name- 처음에
"N/A"로 설정되는String변수grade
제공된 코드는 뒤따르는 학생 수를 읽은 다음, 학생마다 한 줄씩 읽습니다. 각 줄에는 이름이 있고, 선택적으로 공백과 성적이 뒤따릅니다. 코드는 각 줄에 대해 Student를 만들고, 이름을 설정하며, 줄에 성적이 있을 때만 성적을 설정합니다. 그런 다음 Student.SCHOOL과 모든 학생을 출력합니다. Alice A와 Bob 줄에 대해 다음을 출력합니다.
School: Godot High School
Alice has grade A
Bob has grade N/A코드는 student.gd에 작성하세요. main.gd에는 제공된 입력/출력 코드가 있으며 수정할 수 없습니다.
직접 해보기
extends Node
func _ready():
# 제공된 입출력 코드: 그대로 두세요
var count := int(OS.read_string_from_stdin())
var students: Array[Student] = []
for i in count:
var parts := OS.read_string_from_stdin().split(" ", false)
var student := Student.new()
student.student_name = parts[0]
if parts.size() > 1:
student.grade = parts[1]
students.append(student)
print("School: %s" % Student.SCHOOL)
for student in students:
print("%s has grade %s" % [student.student_name, student.grade])
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: 온라인 GDScript 컴파일러