객체 모델
표준 C++ 객체 모델은 객체 패러다임에 대해 매우 효율적인 런타임 지원을 제공합니다. 하지만 그 정적인 특성으로 인해 특정 문제 영역에서는 유연성이 떨어집니다. 그래픽 사용자 인터페이스 프로그래밍은 런타임 효율성과 높은 수준의 유연성을 모두 요구하는 영역입니다. Qt는 C++의 속도와 Qt 객체 모델의 유연성을 결합하여 이를 제공합니다.
Qt는 C++에 다음과 같은 기능을 추가합니다:
- ‘시그널(signals)’과 ‘슬롯( slots)’이라 불리는, 객체 간 원활한 통신을 위한 매우 강력한 메커니즘
- 조회 및 설정이 가능한 객체 속성
- 강력한 이벤트 및 이벤트 필터
- 국제화를 위한 문맥 기반 문자열 번역
- 이벤트 주도형 GUI에서 여러 작업을 우아하게 통합할 수 있게 해주는 정교한 간격 기반 타이머
- 객체 소유권을 자연스러운 방식으로 구성하는 계층적이며 쿼리 가능한 객체 트리
- 참조되는 객체가 소멸될 때 자동으로 0으로 설정되는 가드된 포인터(QPointer). 이는 객체가 소멸되면 매달린 포인터가 되는 일반적인 C++ 포인터와 다릅니다
- 라이브러리 경계를 넘어 작동하는 동적 형 변환.
- 사용자 정의 유형 생성을 지원합니다.
이러한 Qt 기능 중 상당수는 ` QObject`의 상속을 기반으로 한 표준 C++ 기법으로 구현되었습니다. 반면, 객체 통신 메커니즘이나 동적 속성 시스템과 같은 다른 기능들은 Qt 고유의 ` Meta-Object Compiler (moc)`가 제공하는 메타 객체 시스템(Meta-Object System )을 필요로 합니다.
메타 객체 시스템은 C++을 확장하여, 이 언어가 진정한 컴포넌트 기반 GUI 프로그래밍에 더욱 적합하도록 만드는 기능입니다.
중요한 클래스
이 클래스들은 Qt 객체 모델의 기반을 이룹니다.
연관 컨테이너에 대한 타입 에라즈드 액세스를 허용합니다 | |
클래스에 대한 추가 정보 | |
순차적 및 연관 컨테이너에 대한 공통 기능 | |
열거자에 대한 메타데이터 | |
멤버 함수에 대한 메타데이터 | |
Qt 객체에 대한 메타정보를 포함합니다 | |
속성에 대한 메타데이터 | |
순차 컨테이너에 대한 타입 에라즈드(type-erased) 액세스를 허용합니다 | |
메타 객체 시스템에서 명명된 타입을 관리합니다 | |
모든 Qt 객체의 기본 클래스 | |
여러 QObject의 수명을 감시합니다 | |
QObject에 대한 가드된 포인터를 제공하는 템플릿 클래스 | |
QObject::blockSignals()를 둘러싼 예외 안전 래퍼 | |
식별 가능한 발신자의 시그널을 묶어줍니다 | |
가장 일반적인 Qt 데이터 유형에 대한 유니온과 같은 역할을 수행합니다 |
Qt 객체: 정체성 대 값
위에서 언급한 Qt 객체 모델의 추가 기능 중 일부는 Qt 객체를 값이 아닌 정체성으로 간주해야 합니다. 값은 복사되거나 할당되는 반면, 정체성은 복제됩니다. 복제란 기존 정체성의 정확한 복사본이 아닌 새로운 정체성을 생성하는 것을 의미합니다. 예를 들어, 쌍둥이는 서로 다른 정체성을 가집니다. 겉보기에는 똑같아 보일지라도, 이름도 다르고 위치도 다르며, 완전히 다른 사회적 네트워크를 가지고 있을 수도 있습니다.
따라서 정체성을 복제하는 것은 값을 복사하거나 할당하는 것보다 더 복잡한 작업입니다. Qt 객체 모델에서 이것이 무엇을 의미하는지 살펴볼 수 있습니다.
Qt 객체는...
- 고유한 객체 식별자( QObject::objectName)를 가질 수 있습니다. Qt 객체를 복사할 때, 복사본에는 어떤 이름을 부여해야 할까요?
- 객체 계층 구조 내에서 특정 위치를 차지합니다. Qt 객체를 복사할 때, 복사본은 어디에 위치해야 할까요?
- 다른 Qt 객체와 연결되어 신호를 발신하거나, 다른 객체가 발신한 신호를 수신할 수 있습니다. Qt 객체를 복사할 때, 이러한 연결을 복사본으로 어떻게 이전해야 할까요?
- 실행 시점에 C++ 클래스에 선언되지 않은 새로운 속성이 추가될 수 있습니다. Qt 객체를 복사할 때, 복사본에는 원본에 추가된 속성들도 포함되어야 할까요?
이러한 이유로 Qt 객체는 값이 아닌 정체성(identity)으로 취급되어야 합니다. 정체성은 복사되거나 할당되는 것이 아니라 복제되며, 정체성을 복제하는 것은 값을 복사하거나 할당하는 것보다 더 복잡한 작업입니다. 따라서 ` QObject ` 및 ` QObject `의 모든 하위 클래스(직접적이든 간접적이든)에서는 ` copy constructor and assignment operator `가 비활성화되어 있습니다.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.