속성 접근자
Coddy GDScript 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 65개 중 12번째.
get: 블록인 프로퍼티의 getter는 프로퍼티를 읽을 때마다 실행되며, 반환하는 값이 읽는 쪽에서 받는 값입니다. 다른 프로퍼티로부터 계산되는 값에 사용하세요:
# rectangle.gd
var width: int = 4
var height: int = 3
var area: int:
get:
return width * heightvar r := Rectangle.new()
print(r.area) # 12
r.width = 10
print(r.area) # 30r.area는 괄호 없이 변수처럼 읽지만, 읽을 때마다 다시 계산되므로 항상 현재 너비와 높이에 맞게 유지됩니다.
속성에는 두 블록이 모두 있을 수 있습니다. 여기서 fahrenheit는 변환만 합니다. 읽으면 celsius에서 변환하고, 값을 할당하면 다시 변환한 결과를 celsius에 저장합니다.
# temperature.gd
var celsius: float = 0.0
var fahrenheit: float:
get:
return celsius * 9 / 5 + 32
set(value):
celsius = (value - 32) * 5 / 9t.celsius = 25.0
print(t.fahrenheit) # 77.0
t.fahrenheit = 98.6
print(t.celsius) # 37.0get:만 있는 속성은 관례상 읽기 전용입니다. 여기에 값을 할당해도 오류는 아니지만, getter는 할당된 값을 무시합니다. r.area = 100을 실행한 후에도 r.area는 여전히 30을 반환합니다.
챌린지
쉬움temperature.gd의 Temperature 클래스를 완성하세요. 이 클래스는 celsius라는 하나의 값을 저장하고, 그 값으로부터 다른 온도 단위를 계산합니다.
fahrenheit: getter는celsius * 9 / 5 + 32를 반환하고, setter는(value - 32) * 5 / 9를celsius에 저장합니다.kelvin: getter가celsius + 273.15를 반환하는 읽기 전용 속성입니다.
제공된 코드는 이어지는 명령의 개수를 읽은 다음, 한 줄에 하나씩 읽습니다. c VALUE는 celsius를 설정하고 f VALUE는 fahrenheit를 설정합니다. 각 명령을 실행한 후 소수점 이하 두 자리까지 세 속성을 출력합니다. c 25, f 98.6, c -40을 입력하면 다음을 출력합니다.
25.00 C | 77.00 F | 298.15 K
37.00 C | 98.60 F | 310.15 K
-40.00 C | -40.00 F | 233.15 K코드는 temperature.gd에 작성하세요. main.gd에는 제공된 입력/출력 코드가 있으며 수정할 수 없습니다.
직접 해보기
extends Node
func _ready():
# 제공된 입출력 코드: 그대로 유지하세요
var temp := Temperature.new()
var count := int(OS.read_string_from_stdin())
for i in count:
var parts := OS.read_string_from_stdin().split(" ")
if parts[0] == "c":
temp.celsius = float(parts[1])
else:
temp.fahrenheit = float(parts[1])
print("%.2f C | %.2f F | %.2f K" % [temp.celsius, temp.fahrenheit, temp.kelvin])
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: 온라인 GDScript 컴파일러