Up to date
This page is up to date for Godot 4.2
.
If you still find outdated information, please open an issue.
Godot에 객체 지향 원리 적용하기¶
엔진에서는 재사용 가능한 코드를 작성하기 위해 스크립트와 씬 두 가지를 사용할 수 있습니다. 둘 모두 클래스의 기술적인 개념을 내부적으로 정의하는 것은 아닙니다.
하지만 많은 Godot에서의 모범 사례들에서 게임을 제작할 때 스크립트와 씬에 객체 지향 프로그래밍 원리를 적용했습니다. 때문에 이 둘을 클래스처럼 여길 수 있다는 점을 이해하는 것이 유용합니다.
이 가이드에서는 여러분이 스크립트와 씬의 내부적인 동작을 이해할 수 있도록 이들어 어떻게 엔진 내부에서 동작하는지 간단히 설명합니다.
스크립트가 엔진에서 동작하는 방식¶
엔진은 :ref:`Node <class_Node>`같은 내장 클래스를 제공합니다. 스크립트를 이용하면 이를 상속해 파생 타입들을 만들 수 있도록 해줍니다.
스크립트들은 기술적으로는 클래스에 해당하지 않습니다. 대신 스크립트는 엔진의 내장 클래스에 어떤 초기화 절차를 진행해야 하는지 엔진에게 알려주는 리소스입니다.
Godot의 내장 클래스는 :ref:`ClassDB <class_ClassDB>`에 클래스의 데이터를 등록하는 메서드를 갖습니다. 이 데이터베이스는 런타임에 클래스 정보에 액세스 할 수 있도록 해줍니다. ``ClassDB``는 다음과 같은 클래스들의 정보를 포함합니다:
속성(property)
Methods.
Constants.
Signals.
오브젝트들은 속성(property)에 액세스하거나 메서드를 호출할 때 ClassDB
를 확인합니다. 데이터베이스의 기록 및 오브젝트의 부모 타입의 기록을 확인해 오브젝트가 하고자 하는 연산을 지원하는지 확인합니다.
Script <class_Script>`를 오브젝트에 붙이면 ``ClassDB` 에 있는 메서드, 속성(property) 및 시그널을 상속합니다.
참고
Even scripts that don't use the extends
keyword implicitly inherit from the engine's base
RefCounted class. As a result, you can instantiate scripts without the
extends
keyword from code. Since they extend RefCounted
though, you cannot attach them to
a Node.
씬¶
씬의 동작도 클래스와 여러 유사점을 갖고 있으므로 씬을 클래스처럼 여기는 것도 타당합니다. 씬은 재사용이 가능하고, 인스턴스화 할 수 있고, 상속이 가능한 노드들의 집합입니다. 씬을 생성하는 것은 스크립트가 노드를 생성한 후 이를 add_child()
를 사용해 자식으로 추가하는 것과 유사합니다.
We often pair a scene with a scripted root node that makes use of the scene's nodes. As such, the script extends the scene by adding behavior through imperative code.
씬의 구성물은 다음을 정의하는데 도움이 됩니다:
What nodes are available to the script.
How they are organized.
How they are initialized.
What signal connections they have with each other.
자, 왜 이렇게 씬 조직이 중요할까요? 씬의 인스턴스가 바로 오브젝트라는 것을 이해해야합니다. 결과적으로 단일 책임 원칙, 캡슐화 등 코드에 적용할 수 있는 객체 지향 기법을 씬에도 적용할 수 있습니다.
씬은 항상 자신의 루트 노트에 붙은 스크립트를 상속합니다. 따라서 이를 클래스의 일종으로 생각할 수 있습니다.
모범 사례에서 설명된 여러 기법들은 이런 점을 이용합니다.