Menu
CoddyTech

기본 상속

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

상속을 사용하면 한 클래스가 다른 클래스의 변수와 메서드를 이어받을 수 있습니다. 이를 물려주는 클래스는 부모이고, 물려받는 클래스는 자식입니다.

다음은 별도의 파일에 있는 부모 클래스입니다:

# animal.gd
class_name Animal
extends RefCounted

var animal_name: String

func _init(n: String) -> void:
	animal_name = n

func info() -> void:
	print("I am ", animal_name, ", an animal")

자식 클래스는 extends 뒤에 부모 클래스를 지정합니다. 부모의 class_name은 전역이므로 dog.gd에는 import 줄이 필요하지 않습니다.

# dog.gd
class_name Dog
extends Animal

이 Dog에는 자체 코드가 없지만 animal_name, info() 및 Animal의 생성자가 있습니다:

var creature := Animal.new("Creature")
var buddy := Dog.new("Buddy")
creature.info()
buddy.info()
I am Creature, an animal
I am Buddy, an animal

자식 클래스는 상속받은 메서드 옆에 자체 메서드를 추가할 수 있습니다. 그 안에서는 상속받은 변수가 자식 클래스에서 선언한 것처럼 작동합니다.

# dog.gd
class_name Dog
extends Animal

func bark() -> void:
	print(animal_name, " says Woof!")
var buddy := Dog.new("Buddy")
buddy.info()
buddy.bark()
I am Buddy, an animal
Buddy says Woof!

상속은 한 방향으로만 이루어집니다. Animal은 Dog이 추가하는 내용을 물려받지 않으므로, Animal 객체에서 bark()를 호출하면 오류가 발생합니다.

지금까지 작성한 클래스에는 extends RefCounted라고 되어 있었습니다. 이 클래스들은 Godot에 내장된 클래스인 RefCounted의 자식 클래스였습니다.

challenge icon

챌린지

쉬움

부모 클래스와 자식 클래스를 만드세요.

  • vehicle.gd에서 Vehicle에 String 변수 brand와 model을 선언하세요. 생성자는 두 인수를 해당 변수에 저장하고, info()는 Vehicle: BRAND MODEL을 반환합니다.
  • car.gd에는 이미 extends Vehicle이 있습니다. 메서드 honk()를 작성하세요. Car가 상속받은 변수를 사용해 BRAND MODEL says Beep beep!을 반환합니다.

Car에는 생성자가 필요하지 않습니다. Car.new("Honda", "Civic")는 Vehicle의 생성자를 사용합니다.

제공된 코드는 뒤따르는 차량의 수를 읽은 다음 차량마다 한 줄씩 읽습니다. 각 줄에는 vehicle 또는 car, 브랜드, 모델이 들어 있습니다. 모든 차량에 대해 info()를 출력하고, 자동차라면 honk()도 출력합니다. vehicle Toyota Corolla와 car Honda Civic을 입력하면 다음을 출력합니다.

Vehicle: Toyota Corolla
Vehicle: Honda Civic
Honda Civic says Beep beep!

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

직접 해보기

extends Node

func _ready():
	# 제공된 입출력 코드: 그대로 유지하세요
	var count := int(OS.read_string_from_stdin())
	for i in count:
		var parts := OS.read_string_from_stdin().split(" ")
		if parts[0] == "car":
			var car := Car.new(parts[1], parts[2])
			print(car.info())
			print(car.honk())
		else:
			var vehicle := Vehicle.new(parts[1], parts[2])
			print(vehicle.info())
quiz icon실력 점검

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

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

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