Menu
CoddyTech

인스턴스 변수와 정적 변수

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

클래스의 일반 var는 인스턴스 변수입니다. 각 객체가 자체 변수를 가집니다. static var는 대신 클래스에 속합니다. 값이 하나만 있으며 모든 객체가 공유합니다.

# student.gd
class_name Student
extends RefCounted

static var school: String = "Godot High"
static var count: int = 0
var student_name: String

func _init(new_name: String) -> void:
	student_name = new_name
	count += 1
var ada := Student.new("Ada")
var bo := Student.new("Bo")
print(Student.count) # 2
print(ada.student_name, " and ", bo.student_name) # Ada and Bo
Student.school = "Godot Academy"
print(ada.school) # Godot Academy
print(bo.school) # Godot Academy

Student.count처럼 클래스 이름을 통해 정적 변수를 읽으면 객체가 필요하지 않습니다. 클래스 내부에서는 클래스 이름을 사용하세요. _init()에서 count += 1은 지금까지 생성된 모든 학생을 셉니다.

Student.school을 변경하면 모든 학생의 값이 한 번에 바뀝니다. ada.school = "Night School"도 같은 결과를 냅니다. school은 하나뿐이기 때문입니다. 클래스 이름을 쓰면 이 점이 분명해집니다.

const도 같은 방식으로 공유되지만 절대 변경할 수 없습니다. 카운터나 모든 객체가 따르는 설정처럼 프로그램이 실행되는 동안 변경되는 공유 데이터에는 static var를 사용하세요.

challenge icon

챌린지

쉬움

다음과 같이 bank_account.gd의 BankAccount 클래스를 완성하세요:

  • 모든 계정이 공유하며 2로 시작하는 정적 int 변수 interest_percent
  • 0으로 시작하는 정적 int 변수 account_count; 생성자는 새 계정이 만들어질 때마다 여기에 1을 더합니다
  • describe()는 계정의 holder와 balance, 그리고 공유되는 interest_percent를 사용해 HOLDER: $BALANCE at PERCENT%를 반환합니다

제공된 코드는 이어지는 계정 수와 각 계정의 holder balance 한 줄을 읽은 다음, 새 이자율을 읽습니다. BankAccount.account_count와 모든 계정을 출력하고, BankAccount.interest_percent를 새 이자율로 설정한 다음 모든 계정을 다시 출력합니다. Alice 1000, Bob 2000과 이자율 3을 입력하면 다음을 출력합니다:

Accounts opened: 2
Alice: $1000 at 2%
Bob: $2000 at 2%
After the rate change:
Alice: $1000 at 3%
Bob: $2000 at 3%

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

직접 해보기

extends Node

func _ready():
	# 제공된 입출력 코드: 그대로 유지하세요
	var accounts: Array[BankAccount] = []
	var count := int(OS.read_string_from_stdin())
	for i in count:
		var parts := OS.read_string_from_stdin().split(" ")
		accounts.append(BankAccount.new(parts[0], int(parts[1])))
	print("Accounts opened: %d" % BankAccount.account_count)
	for account in accounts:
		print(account.describe())
	BankAccount.interest_percent = int(OS.read_string_from_stdin())
	print("After the rate change:")
	for account in accounts:
		print(account.describe())
quiz icon실력 점검

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

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

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