이 페이지에서

객체 모델

표준 C++ 객체 모델은 객체 패러다임에 대해 매우 효율적인 런타임 지원을 제공합니다. 하지만 그 정적인 특성으로 인해 특정 문제 영역에서는 유연성이 떨어집니다. 그래픽 사용자 인터페이스 프로그래밍은 런타임 효율성과 높은 수준의 유연성을 모두 요구하는 영역입니다. Qt는 C++의 속도와 Qt 객체 모델의 유연성을 결합하여 이를 제공합니다.

Qt는 C++에 다음과 같은 기능을 추가합니다:

이러한 Qt 기능 중 상당수는 ` QObject`의 상속을 기반으로 한 표준 C++ 기법으로 구현되었습니다. 반면, 객체 통신 메커니즘이나 동적 속성 시스템과 같은 다른 기능들은 Qt 고유의 ` Meta-Object Compiler (moc)`가 제공하는 메타 객체 시스템(Meta-Object System )을 필요로 합니다.

메타 객체 시스템은 C++을 확장하여, 이 언어가 진정한 컴포넌트 기반 GUI 프로그래밍에 더욱 적합하도록 만드는 기능입니다.

중요한 클래스

이 클래스들은 Qt 객체 모델의 기반을 이룹니다.

QMetaAssociation

연관 컨테이너에 대한 타입 에라즈드 액세스를 허용합니다

QMetaClassInfo

클래스에 대한 추가 정보

QMetaContainer

순차적 및 연관 컨테이너에 대한 공통 기능

QMetaEnum

열거자에 대한 메타데이터

QMetaMethod

멤버 함수에 대한 메타데이터

QMetaObject

Qt 객체에 대한 메타정보를 포함합니다

QMetaProperty

속성에 대한 메타데이터

QMetaSequence

순차 컨테이너에 대한 타입 에라즈드(type-erased) 액세스를 허용합니다

QMetaType

메타 객체 시스템에서 명명된 타입을 관리합니다

QObject

모든 Qt 객체의 기본 클래스

QObjectCleanupHandler

여러 QObject의 수명을 감시합니다

QPointer

QObject에 대한 가드된 포인터를 제공하는 템플릿 클래스

QSignalBlocker

QObject::blockSignals()를 둘러싼 예외 안전 래퍼

QSignalMapper

식별 가능한 발신자의 시그널을 묶어줍니다

QVariant

가장 일반적인 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.