Menu
CoddyTech

속성 설정자

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

속성은 값이 할당될 때마다 코드를 실행할 수 있습니다. 선언 뒤에 콜론을 붙이고 들여쓴 set(value): 블록을 추가합니다. 이를 setter라고 합니다.

# player.gd
var health: int = 100:
	set(value):
		health = clampi(value, 0, 100)

value는 할당되는 값입니다. setter 안에서 health를 할당하면 해당 값이 속성에 저장되며, setter가 다시 실행되지는 않습니다. 이 setter는 프로그램의 나머지 부분에서 무엇을 할당하든 health를 0과 100 사이로 유지합니다:

var p := Player.new()
p.health -= 30
print(p.health) # 70
p.health = 250
print(p.health) # 100
p.health -= 500
print(p.health) # 0

세터는 클래스 내부에서도 대입할 때마다 실행됩니다. Player의 메서드에서 health -= 10을 사용하거나 _init()에서 health = start_health를 사용하면 둘 다 세터를 거칩니다. 선언에서 = 뒤에 지정한 초기값만 세터를 호출하지 않고 저장됩니다.

세터는 값을 거부할 수도 있습니다. 속성에 값을 할당하지 않으면 이전 값이 그대로 유지됩니다:

var level: int = 1:
	set(value):
		if value > level:
			level = value

value의 타입은 생략하세요. set(value: int):는 오류입니다. 프로퍼티 자체의 타입에 이미 어떤 값을 담는지 명시되어 있습니다.

challenge icon

챌린지

쉬움

player.gd에 있는 Player 클래스의 health 속성에 다음을 수행하는 세터를 추가하세요.

  • 저장되는 체력이 0과 max_health 사이가 되도록 합니다. 더 큰 값은 max_health로 저장하고 음수 값은 0으로 저장합니다.
  • 새 체력이 0이고 이전 체력이 0보다 컸을 때 Player is down!를 출력합니다.

제공된 코드는 이어지는 명령의 개수를 읽은 다음, 한 줄에 하나씩 명령을 읽습니다. 명령은 damage N(player.health -= N), heal N(player.health += N) 또는 set N(player.health = N)입니다. 각 명령을 실행한 후 체력을 출력합니다. damage 30, heal 50, damage 120 및 heal 10을 실행하면 다음을 출력합니다.

Health: 70
Health: 100
Player is down!
Health: 0
Health: 10

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

직접 해보기

extends Node

func _ready():
	# 제공된 입출력 코드: 그대로 유지하세요
	var player := Player.new()
	var count := int(OS.read_string_from_stdin())
	for i in count:
		var parts := OS.read_string_from_stdin().split(" ")
		var amount := int(parts[1])
		if parts[0] == "damage":
			player.health -= amount
		elif parts[0] == "heal":
			player.health += amount
		elif parts[0] == "set":
			player.health = amount
		print("Health: %d" % player.health)
quiz icon실력 점검

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

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

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