WIPIVERSE

GObject

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 등 다양한 유틸리티 제공.

참고 문헌

이상은 GObject에 대한 객관적인 기술이며, 현재까지 확인된 공신력 있는 자료를 기반으로 작성하였다.

둘러보기

더 찾아볼 만한 주제

    전체 문서 보기