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.

자, 왜 이렇게 씬 조직이 중요할까요? 씬의 인스턴스가 바로 오브젝트라는 것을 이해해야합니다. 결과적으로 단일 책임 원칙, 캡슐화 등 코드에 적용할 수 있는 객체 지향 기법을 씬에도 적용할 수 있습니다.

씬은 항상 자신의 루트 노트에 붙은 스크립트를 상속합니다. 따라서 이를 클래스의 일종으로 생각할 수 있습니다.

모범 사례에서 설명된 여러 기법들은 이런 점을 이용합니다.