Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

코어 유형

Godot는 핵심을 구성하는 풍부한 클래스와 템플릿 세트를 갖고 있으며, 모든 것이 그 위에 구축됩니다.

이 참고문헌은 더 나은 이해를 돕기 위해 그것들을 나열하려고 노력할 것입니다.

메모리 할당

Godot에는 메모리 안전을 보장하고 메모리 사용량을 추적하기 위한 많은 트릭이 있습니다. 이 때문에 일반 C 및 C++ 라이브러리 호출을 사용하면 안 됩니다. 대신 몇 가지 대체품이 제공됩니다.

C 스타일 할당을 위해 Godot는 몇 가지 매크로를 제공합니다:

memalloc(size)
memrealloc(pointer)
memfree(pointer)

이는 C 표준 라이브러리의 일반적인 malloc(), realloc()``free()``와 동일합니다.

C++ 스타일 할당의 경우 특수 매크로가 제공됩니다.

memnew(Class)
memnew(Class(args))
memdelete(instance)

memnew_arr(Class, amount)
memdelete_arr(pointer_to_array)

이는 각각 new, delete, new[]``delete[]``와 동일합니다.

memnew/``memdelete``는 또한 약간의 C++ 마법을 사용하여 초기화 후 및 출시 전 기능을 자동으로 호출합니다. 예를 들어, 객체가 생성된 직후와 삭제되기 직전에 객체에 알리는 데 사용됩니다.

컨테이너

Godot는 자체 컨테이너 세트를 제공하는데, 이는 std::string``std::vector``와 같은 STL 컨테이너가 일반적으로 코드베이스에서 사용되지 않음을 의미합니다. 자세한 내용은 :ref:`doc_faq_why_not_stl`를 참조하세요.

📜 아이콘은 해당 유형이 :ref:`Variant <doc_variant_class>`의 일부임을 나타냅니다. 이는 스크립팅 API에 노출된 메서드의 매개변수 또는 반환 값으로 사용될 수 있음을 의미합니다.

Godot 편집기

가장 가까운 C++ STL 데이터 유형

주석

문자열

: String

이를 "기본" 문자열 유형으로 사용하십시오. ``String``는 고정된 문자 크기 덕분에 처리를 단순화하기 위해 UTF-32 인코딩을 사용합니다.

벡터

Vector2[]

이를 "기본" 벡터 유형으로 사용합니다. COW(기록 중 복사) 의미 체계를 사용합니다. 이는 일반적으로 속도가 느리지만 거의 무료로 복사할 수 있음을 의미합니다. COW가 필요하지 않고 성능이 중요한 경우 대신 ``LocalVector``를 사용하십시오.

HashSet

또는 순서가 없는 집합이 될 수 있습니다:

이를 "기본" 세트 유형으로 사용하세요.

AHashMap

std::unordered_map

이를 "기본" 지도 유형으로 사용하세요. 삽입 순서를 유지하지 않습니다. 맵에 대한 포인터와 반복자는 돌연변이에 따라 안정적이지 않습니다. 이러한 어포던스 중 하나가 필요한 경우 대신 ``HashMap``를 사용하세요.

StringName 📜

: String

빠른 비교를 위해 문자열 인터닝을 사용합니다. 자주 참조되고 엔진의 여러 위치에서 사용되는 정적 문자열에 대해 이를 사용하십시오.

벡터

Vector2[]

의미론적으로 ``std::vector``에 더 가깝고 COW(기록 중 복사)를 사용하지 않으므로 ``Vector``보다 빠릅니다. 저렴하게 복사할 필요가 없으면 ``Vector``보다 선호합니다.

Array 📜

Vector2[]

값은 모든 Variant 유형이 될 수 있습니다. 정적 타이핑이 적용되지 않습니다. ``std::shared_ptr``와 유사한 공유 참조 카운팅을 사용합니다. 내부적으로 Vector<Variant>를 사용합니다.

타입 있는 배열

Vector2[]

``Array``의 하위 클래스이지만 해당 요소에 대한 정적 유형 지정이 있습니다. 내부적으로 ``Vector``인 ``Packed*Array``와 혼동하지 마십시오.

지역 변수(Local Variables)

Vector2[]

Vector``의 별칭, 예: ``PackedColorArray = Vector<Color>. 제한된 목록의 압축형 배열 유형만 사용할 수 있습니다(그렇지 않으면 TypedArray 사용).

List

: String

연결리스트 유형. 일반적으로 다른 배열/벡터 유형보다 느립니다. ``List``를 사용하면 유형 변환이 필요하지 않는 한 새 코드에서 다른 유형을 사용하는 것이 좋습니다.

벡터

Array

고정된 용량을 갖는 벡터(``boost::container::static_vector``와 더 유사) 이 컨테이너 유형은 힙을 할당하지 않기 때문에 다른 벡터형 유형보다 더 효율적입니다.

Span

: String

데이터를 복사할 필요 없이 연속 배열에 대한 읽기 전용 액세스를 나타냅니다. Span``는 고성능 API로 설계되었습니다. 다른 Godot 컨테이너에서 사용했던 것과 같은 방식으로 매개변수 정확성 검사를 수행하지 않습니다. 주의해서 사용하세요. `Span`는 배열과 유사한 대부분의 컨테이너(예: ``vector.span())에서 구성할 수 있습니다.

RBSet

std::set

더 빠른 액세스를 위해 `레드-블랙 트리 <https://en.wikipedia.org/wiki/Red-black_tree>`__를 사용합니다.

VSet

std::flat_set

COW(기록 중 복사) 의미 체계를 사용합니다. 이는 일반적으로 속도가 느리지만 거의 무료로 복사할 수 있음을 의미합니다. ``VSet``의 성능 이점은 확립되지 않았으므로 다른 유형을 사용하는 것이 좋습니다.

HashMap

std::unordered_map

방어적인(견고하지만 느린) 지도 유형입니다. 삽입 순서를 유지합니다. Pointers to keys and values, as well as iterators, are stable under mutation. 이러한 어포던스 중 하나가 필요할 때 이 지도 유형을 사용하세요. 그렇지 않으면 ``AHashMap``를 사용하세요.

RBMap

std::map

Map type that uses a red-black tree to find keys. The performance benefits of RBMap aren't established, so prefer using other types.

딕셔너리

std::unordered_map

키와 값은 모든 Variant 유형이 될 수 있습니다. 정적 타이핑이 적용되지 않습니다. ``std::shared_ptr``와 유사한 공유 참조 카운팅을 사용합니다. 삽입 순서를 유지합니다. 내부적으로 ``HashMap<Variant>``를 사용합니다.

TypedDictionary 📜

std::unordered_map

``Dictionary``의 서브클래스이지만 해당 키와 값에 대한 정적 유형 지정이 있습니다.

Pair

: String

단일 쌍을 저장합니다. 읽기 전용 키를 사용하는 동일한 파일의 ``KeyValue``도 참조하세요.

액션 세트

Godot의 컨테이너는 해당 요소가 `사소한 재배치 가능 <https://open-std.org/JTC1/SC22/WG21/docs/papers/2020/p1144r5.html>`__이라고 가정합니다.

이는 자신에 대한 포인터가 있거나 사소하게 재배치 가능하지 않은 데이터 유형을 저장하는 경우, Godot가 충돌할 수 있음을 의미합니다. 일부 Object 서브클래스와 같이 쉽게 재배치할 수 없는 객체에 **포인터**를 저장하는 것은 문제가 없으며 지원됩니다.

사소한 재배치를 가정하는 이유는 memcpy 또는 ``realloc``에 의한 재배치와 같은 중요한 최적화 기술을 사용할 수 있게 해주기 때문입니다.

https://github.com/godotengine/godot-demo-projects

멀티 스레딩

더 보기

스레드에 대한 자세한 정보는 멀티스레드 사용하기를 참조하세요.

Godot의 컨테이너 중 어느 것도 스레드로부터 안전하지 않습니다. 여러 스레드가 액세스할 것으로 예상되는 경우 다중 스레드 보호를 사용해야 합니다.

여기에 나열된 유형 중 일부는 바인딩을 통해서도 사용할 수 있지만 바인딩 유형은 class_RefCounted`(``CoreBind::` 네임스페이스에 있음)로 래핑됩니다. 효율성을 위해 가능하면 여기에 나열된 기본 형식을 선호하세요.

Godot 편집기

가장 가까운 C++ STL 데이터 유형

주석

Mutex

또는 순서가 없는 집합이 될 수 있습니다:

재귀적 뮤텍스 유형. 잠그려면 ``MutexLock lock(mutex)``를 사용하세요.

BinaryMutex

: String

비재귀적 뮤텍스 유형입니다. 잠그려면 ``MutexLock lock(mutex)``를 사용하세요.

RWLock

std::shared_mutex

읽기-쓰기 인식 뮤텍스 유형입니다. RWLockRead lock(mutex) 또는 ``RWLockWrite lock(mutex)``를 사용하여 잠급니다.

SafeBinaryMutex

: String

``ConditionVariable``와 함께 사용할 수 있는 재귀적 뮤텍스 유형입니다. 잠그려면 ``MutexLock lock(mutex)``를 사용하세요.

인스턴스 편집하기

연결(Connections)

``SafeBinaryMutex``와 함께 사용되는 조건 변수 유형입니다.

예제

: String

가져오기 리소스 타입 변경하기

SafeNumeric

: String

숫자용으로 설계된 템플릿 기반 원자 유형입니다.

SafeFlag

: String

Bool 원자 유형.

SafeRefCount

: String

참조 계산을 위해 설계된 원자 유형입니다. 참조 카운트가 0이면 증가를 거부합니다.

수학 유형

core/math 디렉토리에는 여러 가지 선형 수학 유형을 사용할 수 있습니다.

노드 경로

이는 씬 트리에 경로를 저장하고 이를 최적화된 방식으로 참조하는 데 사용되는 특수 데이터 유형입니다.

RID

RID는 *리소스 ID*입니다. 서버는 이를 사용하여 저장된 데이터를 참조합니다. RID는 불투명합니다. 즉, RID가 참조하는 데이터에 직접 액세스할 수 없습니다. RID는 다양한 유형의 참조 데이터에 대해서도 고유합니다.