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.
Checking the stable version of the documentation...
Godot에 객체 지향 원리 적용하기
엔진에서는 재사용 가능한 코드를 작성하기 위해 스크립트와 씬 두 가지를 사용할 수 있습니다. 둘 모두 클래스의 기술적인 개념을 내부적으로 정의하는 것은 아닙니다.
하지만 많은 Godot의 모범 사례들이 게임을 제작할 때 스크립트와 씬에 객체 지향 프로그래밍 원리를 적용합니다. 때문에 이 둘을 클래스처럼 생각하는 것이 도움이 됩니다.
이 가이드에서는 여러분이 스크립트와 씬의 내부적인 동작을 이해할 수 있도록 이들어 어떻게 엔진 내부에서 동작하는지 간단히 설명합니다.
스크립트가 엔진에서 동작하는 방식
엔진은 :ref:`Node <class_Node>`같은 내장 클래스를 제공합니다. 스크립트를 이용하면 이를 상속해 파생 타입들을 만들 수 있도록 해줍니다.
스크립트들은 기술적으로는 클래스에 해당하지 않습니다. 대신 스크립트는 엔진의 내장 클래스에 어떤 초기화 절차를 진행해야 하는지 엔진에게 알려주는 리소스입니다.
Godot의 내장 클래스는 ClassDB에 클래스의 데이터를 등록하는 메서드를 갖습니다. 이 데이터베이스는 런타임에 클래스 정보에 접근할 수 있도록 해줍니다. ClassDB는 다음과 같은 클래스들의 정보를 포함합니다:
속성.
메서드.
상수.
시그널.
오브젝트는 속성에 접근하거나 메서드를 호출할 때 ClassDB를 확인합니다. 데이터베이스의 기록 및 오브젝트의 부모 타입의 기록을 확인해 오브젝트가 하고자 하는 연산을 지원하는지 확인합니다.
Script를 오브젝트에 붙이면 ClassDB에 있는 메서드, 속성 및 시그널을 상속합니다.
참고
extends 키워드를 사용하지 않는 스크립트도 묵시적으로 엔진의 기본 RefCounted 클래스를 상속합니다. 결과적으로 extends 키워드를 사용하지 않고 스크립트를 인스턴스화할 수 있습니다. 스크립트가 RefCounted를 상속하기 때문에 Node에는 붙일 수 없습니다.
씬
씬의 동작도 클래스와 여러 유사점을 갖고 있으므로 씬을 클래스처럼 여기는 것도 타당합니다. 씬은 재사용이 가능하고, 인스턴스화할 수 있고, 상속이 가능한 노드들의 집합입니다. 씬을 생성하는 것은 스크립트가 노드를 생성한 후 이를 add_child()를 사용해 자식으로 추가하는 것과 유사합니다.
종종 씬과 씬의 노드들을 사용하는 (루트 노드에 연결된)스크립트를 짝지어 생각합니다. 이렇게 보면 스크립트는 씬에 필요한 동작을 추가함으로써 씬을 상속하는 것이기도 합니다.
씬의 구성물은 다음을 정의하는데 도움이 됩니다:
스크립트에서 사용 가능한 노드는 무엇인지.
노드가 어떻게 조직되어있는지.
노드가 어떻게 초기화되는지.
노드가 서로 어떤 시그널 연결을 가지고 있는지.
왜 씬의 조직에 이런 사항들이 중요할까요? 이는 씬의 인스턴스가 곧 오브젝트이기 때문입니다. 결과적으로 단일 책임 원칙, 캡슐화 등 코드에 적용할 수 있는 객체 지향 기법이 씬에도 적용될 수 있습니다.
씬은 항상 자신의 루트 노트에 붙은 스크립트를 상속합니다. 따라서 이를 클래스의 일종으로 생각할 수 있습니다.
모범 사례에서 설명하는 여러 기법들은 이런 점에 기반하고 있습니다.