Menu
CoddyTech

_to_string 메서드

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

클래스에 _to_string()이 정의되어 있지 않은 객체를 출력하면 클래스와 내부 ID만 표시되며, 이 ID는 실행할 때마다 달라집니다: <RefCounted#-9223372009541466673>. _to_string()을 정의하고 대신 표시할 텍스트를 반환하세요:

# card.gd
class_name Card
extends RefCounted

var rank: String
var suit: String

func _init(new_rank: String, new_suit: String) -> void:
	rank = new_rank
	suit = new_suit

func _to_string() -> String:
	return rank + " of " + suit

Godot은 객체가 텍스트로 변환될 때마다 이 메서드를 호출합니다. print(), str(), 형식 문자열의 %s를 사용할 때, 그리고 출력된 Array나 Dictionary 안의 각 객체에 대해 호출합니다:

var card := Card.new("Queen", "hearts")
print(card) # 하트 퀸
print(str(card)) # 하트 퀸
print("You drew %s" % card) # 하트 퀸을 뽑았습니다
print([card, Card.new("7", "clubs")]) # [하트 퀸, 클럽 7]

"You drew " + card는 여전히 오류입니다. +는 두 문자열을 연결하는데 card는 객체이기 때문입니다. 먼저 변환하세요: "You drew " + str(card).

하위 클래스는 _to_string()을 재정의하고 super()를 사용해 부모 클래스의 텍스트를 사용할 수 있습니다:

# wild_card.gd
class_name WildCard
extends Card

func _to_string() -> String:
	return "Wild " + super()

print(WildCard.new("King", "spades"))는 Wild King of spades를 출력합니다.

_to_string()은 텍스트를 반환하며, 그 자체로는 아무것도 출력하지 않습니다. 객체를 사용하는 코드에서 텍스트를 출력할지, 더 긴 줄에 이어 붙일지, 아니면 저장할지 결정합니다.

challenge icon

챌린지

쉬움

두 클래스에 _to_string() 메서드를 만드세요.

  • playing_card.gd의 PlayingCard에는 2부터 14까지의 rank와 suit가 있습니다. 텍스트는 rank, of , suit 순서이며, 예를 들면 7 of clubs입니다. 11, 12, 13, 14 rank는 각각 J, Q, K, A로 표기합니다. 예: Q of hearts.
  • hand.gd의 Hand는 카드를 _cards에 보관합니다. 텍스트는 Hand (N): 뒤에 카드 텍스트를 , 로 이어 붙인 것이며, 카드가 없으면 Hand (0): empty입니다.

제공된 코드는 빈 손을 출력하고, 카드 수를 읽은 다음 카드마다 RANK SUIT 형식의 한 줄을 읽습니다. 각 카드를 손에 추가하고 Drew와 카드를 출력한 뒤, 마지막으로 손을 출력합니다. 카드가 7 clubs와 12 hearts일 때 다음을 출력합니다.

Hand (0): empty
Drew 7 of clubs
Drew Q of hearts
Hand (2): 7 of clubs, Q of hearts

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

직접 해보기

extends Node

func _ready():
	# 제공된 입력/출력 코드: 그대로 유지하세요
	var hand := Hand.new()
	print(hand)
	var count := int(OS.read_string_from_stdin())
	for i in count:
		var parts := OS.read_string_from_stdin().split(" ")
		var card := PlayingCard.new(int(parts[0]), parts[1])
		hand.add(card)
		print("Drew %s" % card)
	print(hand)
quiz icon실력 점검

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

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

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