GObject는 GNOME 프로젝트와 GTK+ 및 기타 GLib 기반 라이브러리에서 사용되는 객체 지향 프로그래밍 프레임워크이다. C 언어로 구현되었으며, 동적 타입 시스템, 신호·슬롯 메커니즘, 레퍼런스 카운팅, 인터페이스 및 상속 등을 제공한다.
개요
- 소속: GLib(General-purpose utility library) 의 하위 모듈
- 언어: C (C++ 바인딩 및 다른 언어 바인딩 존재)
- 주요 기능
- 동적 타입 시스템: 런타임에 객체의 타입을 확인하고, 타입에 따라 동작을 다르게 할 수 있다.
- 레퍼런스 카운팅:
g_object_ref()와g_object_unref()를 통해 메모리 관리 자동화. - 신호·슬롯: 객체가 특정 사건(신호)을 발생시키면, 연결된 콜백(슬롯)이 실행되는 이벤트 기반 메커니즘.
- 상속·인터페이스: 단일 상속과 다중 인터페이스 구현을 지원하여 코드 재사용성을 높인다.
역사
- GObject는 1998년 이후 GNOME 데스크톱 환경의 핵심 라이브러리인 GTK+와 함께 발전해 왔다. 초기 버전은 GLib의 기본 객체 시스템으로 시작했으며, 이후 GLib 2.0에 통합되어 현재까지 유지·보수되고 있다.
주요 API
| 기능 | 대표 함수 | 설명 |
|---|---|---|
| 객체 생성 | g_object_new() |
지정된 타입의 새 객체를 동적으로 할당 |
| 레퍼런스 관리 | g_object_ref(), g_object_unref() |
객체의 참조 카운트를 증가·감소 |
| 속성 접근 | g_object_set(), g_object_get() |
객체 속성을 설정·조회 |
| 신호 연결 | g_signal_connect() |
객체 신호에 콜백 함수를 연결 |
| 타입 확인 | G_TYPE_CHECK_INSTANCE_TYPE() 등 |
객체의 타입을 검사 |
사용 예시 (C)
/* MyObject 라는 GObject 파생 클래스 선언 */
typedef struct _MyObject MyObject;
typedef struct _MyObjectClass MyObjectClass;
struct _MyObject {
GObject parent_instance;
/* 사용자 데이터 */
int value;
};
G_DEFINE_TYPE(MyObject, my_object, G_TYPE_OBJECT)
static void
my_object_class_init(MyObjectClass *klass)
{
/* 클래스 초기화 */
}
static void
my_object_init(MyObject *self)
{
self->value = 0;
}
/* 사용 */
MyObject *obj = g_object_new(MY_TYPE_OBJECT, NULL);
g_object_set(obj, "value", 42, NULL);
int v;
g_object_get(obj, "value", &v, NULL);
g_object_unref(obj);
언어 바인딩
GObject는 다양한 언어 바인딩을 제공한다. 예를 들어, Python 용 PyGObject, JavaScript 용 GJS, Ruby 용 Ruby‑GObject 등으로, 각 언어에서 GObject 기반 라이브러리를 직접 사용할 수 있다.
관련 프로젝트
- GTK+: 그래픽 UI 툴킷, GObject를 기반으로 위젯 클래스를 구현.
- GStreamer: 멀티미디어 프레임워크, 플러그인 및 파이프라인 객체가 GObject를 사용.
- GLib: GObject 외에도 데이터 구조, 스레드, 파일 I/O 등 다양한 유틸리티 제공.
참고 문헌
- GNOME 공식 문서: https://developer.gnome.org/gobject/
- GLib API 레퍼런스: https://developer.gnome.org/glib/
- “The GObject System” (GNOME project whitepaper)
이상은 GObject에 대한 객관적인 기술이며, 현재까지 확인된 공신력 있는 자료를 기반으로 작성하였다.