속성 설정자
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 = valuevalue의 타입은 생략하세요. set(value: int):는 오류입니다. 프로퍼티 자체의 타입에 이미 어떤 값을 담는지 명시되어 있습니다.
챌린지
쉬움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)
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: 온라인 GDScript 컴파일러