Meta-Object System
Meta-Object System은 Qt Framework의 일부분으로,
Object 간 통신 메커니즘을 위한 Signal/Slot, 런타임 정보, 동적 프로퍼티 시스템을 제공합니다.
Meta-Object System은 아래의 3가지 기능을 기반으로 지원합니다.
1. QObject 클래스 Meta-Object System을 이용할 수 있는 Object에 대한 Base 클래스를 제공합니다.
2. 클래스의 Private 영역에 선언된 Q_OBJECT 매크로는 동적 프로퍼티, Signal / Slot 등의 Meta-Object 기능을 사용할 수 있게 합니다.
3. Meta-Object Compiler (moc)는 QObject의 Subclass로 하여 Meta-Object 기능 구현에 필요한 코드를 제공합니다.
moc 툴은 C++ 헤더 혹은 소스파일로 부터 Q_OBJECT 매크로가 선언된 클래스를 찾고,
각 클래스에 대해 Meta-Object 코드를 포함하는 또다른 C++ 소스를 생성합니다.
이렇게 생성된 코드는 클래스의 소스파일에서 include 하는데, 대게 클래스 구현과 함께 컴파일 및 링크가 되고,
만약 qmake를 사용하여 makefile을 작성하는 경우 moc를 호출하는 빌드 규칙이 포함됩니다.
또한, QObject를 상속받은 Class의 객체는 Parent 객체가 소멸할 때 자동 소멸합니다.
위 내용에 대해 예를 하나 들어보자면, 다음과 같습니다.
ex) 1. QPushButton *btn = new QPushButton(); 2. QPushButton *btn = new QPushButton(this); |
1번의 경우 객체를 생성할 때 Parent를 지정하지 않았으므로 자동소멸이 되지 않는 경우입니다.
2번의 경우 객체를 생성할 때 Parent를 지정하였고 btn 객체의 부모가 소멸될 때 자동으로 소멸됩니다.
객체를 생성할 때 2번과 같이 Parent 객체에 추가한다면 자동으로 Parent가 지정되고, setParent() 함수를 통해 임의로 지정해 줄 수 있습니다.
이처럼 Qt에서 객체 생성 시 Parent와의 관계를 알고 프로그램을 구현한다면 메모리에 대한 고민을 덜 수 있습니다.
객체들 간에 Signal / Slot 통신 메커니즘 및 자동 소멸 등을 제공하는 것이 Meta-Object System의 핵심입니다.
'Qt' 카테고리의 다른 글
동적으로 생성한 QTabWidget 및 QTableView 다루기 (1) | 2020.02.04 |
---|---|
pthread_cancel 취소 요청하기 (5) | 2020.01.31 |
Shared Memory 정리 및 예제 (0) | 2020.01.31 |
Linux 환경 Qwt 라이브러리 설치하기 (0) | 2020.01.29 |
hide(), close() 차이 (0) | 2020.01.28 |