구조체 및 생성자 (Structs & Constructors)
이 문서는 구조체와 생성자에 대한 기본 개념과 활용 방법을 설명합니다. 구조체는 여러 변수를 묶어 관리하는 데 유용하며, 다양한 데이터 타입을 포함할 수 있습니다. 구조체의 생성과 접근 방법, 생성자 함수에 대한 내용도 포함됩니다.
구조체란?
구조체는 여러 변수를 하나의 단위로 묶는 것입니다. 이러한 변수는 어떤 데이터 타입이든지 포함할 수 있으며, 구조체가 선언된 후 값을 읽거나 쓸 수 있습니다. 또한, 선언 후에도 변수를 추가할 수 있습니다.
구조체의 구문은 다음과 같습니다:
<변수> = { <변수>:<값>, <변수>:<값>, ... };
예제
구조체를 정의하고 사용하는 기본적인 예제는 다음과 같습니다:
mystruct = {a: 20, b: "Hello World"};
위 코드는 mystruct라는 변수 이름으로 구조체를 생성하고 값으로 초기화합니다.
비어있는 구조체 생성
아래와 같이 빈 구조체를 만들고 나중에 변수를 추가할 수 있습니다:
mystruct = {}; // 비어있는 구조체 생성
mystruct.newItem = "Some Text"; // 나중에 변수 추가
구조체의 변수 접근
구조체의 변수에 접근하려면 "점" 표기법을 사용합니다:
mystruct = {a: 20, b: "Hello World"};
mystring = mystruct.b + string(mystruct.a);
이 외에도 구조체는 중첩 구조체를 가질 수 있습니다:
mystruct = {
a: {aa: "This is an example"},
b: {bb: "And another one"}
};
var _str = mystruct.a.aa + " " + mystruct.b.bb;
show_debug_message(_str);
생성자 함수
구조체를 생성하는 함수를 정의할 수 있으며, 이를 위해 constructor 키워드를 사용해야 합니다. 생성자 함수의 예는 아래와 같습니다:
function Vector2(_x, _y) constructor {
x = _x;
y = _y;
}
이렇게 정의한 생성자는 new 키워드를 이용해 호출할 수 있습니다:
v2 = new Vector2(10, 10);
상속
구조체 생성자는 상속을 지원합니다. 부모 생성자에서 변수를 상속받을 수 있습니다:
function Vector3(_x, _y, _z):Vector2(_x, _y) constructor {
z = _z;
}
이렇게 하면 Vector3는 Vector2의 변수 x와 y를 상속받습니다.
상속 예제
부모 생성자를 호출하면 특정 자식 생성자가 항상 같은 값을 전달할 수 있습니다.
function item(damage) constructor {
my_damage = damage;
}
function basic_sword() : item(10) constructor {}
// 기본적인 검 인스턴스 생성
var _basic_sword = new basic_sword();
show_debug_message(_basic_sword.my_damage); // 출력: 10
구조체와 생성자의 차이점
- 구조체는 변수를 묶어주는 자료구조이고, 생성자는 이러한 구조체를 생성하기 위한 함수입니다.
- 구조체는 이벤트를 가지지 않으며, 오직 코드에서 호출되어야만 작동합니다.
- 객체와 인스턴스는 구조체와 생성자와는 다르게, 이벤트를 통해 작동합니다.
기타 정보
- 구조체의 데이터를 접근할 때는
with문을 사용할 수 있습니다. - 변수를 삭제할 때는
delete연산자를 사용하여 메모리에서 제거합니다.
예제 - 구조체 삭제
// 생성 이벤트
mystruct = {pos_x: x, pos_y: y, count: 1000};
// 정리 이벤트
delete mystruct;
구조체 출력 커스터마이징
구조체의 디버깅 정보를 커스터마이즈할 수 있습니다. 아래와 같이 toString 메서드를 정의할 수 있습니다:
mystruct = {
a: 20,
b: "Hello World",
toString: function() {
return "이 구조체는 " + b + ", " + string(a) + " 번 나타냅니다!";
}
};
show_debug_message(mystruct); // 커스터마이즈된 메시지 출력
결론
구조체와 생성자에 대한 이해를 바탕으로, 다양한 데이터 구조를 효과적으로 관리하고 사용할 수 있습니다. 이 문서에서 제시한 예제와 사용법을 활용하여 보다 복잡한 데이터 구조를 효율적으로 설계할 수 있습니다.
더 많은 정보와 예제는 GameMaker 문서에서 확인할 수 있습니다!