Object Model/ko: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
No edit summary
(Add "cleanup" tag)
Line 1: Line 1:
{{Cleanup | reason=Auto-imported from ExpressionEngine.}}
'''한국어''' | ["English":http://doc.qt.io/qt-5.1/qtcore/object.html]
'''한국어''' | ["English":http://doc.qt.io/qt-5.1/qtcore/object.html]



Revision as of 16:12, 3 March 2015

This article may require cleanup to meet the Qt Wiki's quality standards. Reason: Auto-imported from ExpressionEngine.
Please improve this article if you can. Remove the {{cleanup}} tag and add this page to Updated pages list after it's clean.

한국어 | ["English":http://doc.qt.io/qt-5.1/qtcore/object.html]

Object Model

표준 C++ 객체 모델은 객체 패러다임에 매우 효율적인 런타임 지원을 제공합니다. 하지만, 그 고정적인 특성으로 인해 특정 문제 분야에서는 유연성이 떨어집니다.

GUI 프로그래밍 분야는 런타임 효율성과 고수준의 유연성을 동시에 요구하는 분야입니다. Qt는 C+의 속도와 Qt 객체 모델의 유연함을 결합하여 이를 제공해 줍니다.

Qt는 C에 다음 기능을 추가합니다:

이 Qt 기능 중 많은 것이 "QObject":http://doc.qt.io/qt-5.1/qtcore/qobject.html에서의 상속을 기반으로 한, 표준 C++ 기술로 구현되었습니다. 객체 통신 메커니즘과 동적 속성 시스템 등등은, Qt가 소유한 "Meta-Object Compiler (moc)":http://doc.qt.io/qt-5.1/qtdoc/moc.html#moc에 의해 제공되는 "Meta-Object System":http://doc.qt.io/qt-5.1/qtcore/metaobjects.html#meta-object-system을 필요로 합니다.

Meta-object system은, C++ 언어를 진정한 컴포넌트 GUI 프로그램에 더 잘 맞도록 해주는, 언어 확장입니다.

중요 클래스들

이 클래스들은 Qt 개체 모델의 근간을 이룹니다.

{background:#ddd}. | "QMetaObject":http://doc.qt.io/qt-5.1/qtcore/qmetaobject.html | Qt object에 대한 메타 정보를 포함 | | "QMetaMethod":http://doc.qt.io/qt-5.1/qtcore/qmetamethod.html | 멤버 함수에 대한 메타 데이터 | {background:#ddd}. | "QMetaEnum":http://doc.qt.io/qt-5.1/qtcore/qmetaenum.html | enumerator 에 대한 메타 데이터 | | "QMetaProperty":http://doc.qt.io/qt-5.1/qtcore/qmetaproperty.html | property에 대한 메타 데이터 | {background:#ddd}. | "QMetaClassInfo":http://doc.qt.io/qt-5.1/qtcore/qmetaclassinfo.html | class 클래스에 대한 추가 정보 | | "QMetaType":http://doc.qt.io/qt-5.1/qtcore/qmetatype.html | meta-object system의 명명된 타입을 관리 | {background:#ddd}. | "QObject":http://doc.qt.io/qt-5.1/qtcore/qobject.html | 모든 Qt 객체의 기반 클래스 | | "QObjectCleanupHandler":http://doc.qt.io/qt-5.1/qtcore/qobjectcleanuphandler.html | 다수의 QObject의 생명주기를 감시 | {background:#ddd}. | "QPointer":http://doc.qt.io/qt-5.1/qtcore/qpointer.html | QObject에 대한 보호 포인터를 제공하는 템플릿 클래스 | | "QSignalMapper":http://doc.qt.io/qt-5.1/qtcore/qsignalmapper.html | 인식 가능한 송신자로부터의 신호 묶음 | {background:#ddd}. | "QVariant":http://doc.qt.io/qt-5.1/qtcore/qvariant.html | 가장 대표적인 Qt 데이터 타입들에 대한 union처럼 동작 |

Qt 객체: ID (Identity)냐 값이냐

Qt 객체 모델에 대해서 위에 나열된 추가 기능 중 몇 가지는, Qt 객체를 값이 아닌 ID로 생각하기를 요구합니다.

값은 복사되거나 할당되고, ID는 복제됩니다. 복제라 함은, 이전과 완벽히 동일한 복사본이 아니라 새 ID를 생성한다는 것을 의미합니다. 예를 들어, 쌍둥이는 서로 다른 ID를 갖습니다. 그들은 똑같아 보이지만, 서로 다른 이름을 갖고 있고, 서로 다른 곳에 살며, 완전히 다른 인맥을 갖습니다.

때문에, ID를 복제하는 것은 복사나 값 할당 보다 더 복잡한 작업입니다. 우리는 이 것의 의미를 Qt 객체 모델에서 볼 수 있습니다.

하나의 Qt 객체는…

만약 우리가 Qt 객체를 복사한다면, 이 사본의 이름을 뭐라고 지어야 할까요?

만약 우리가 Qt 객체를 복사한다면, 이 사본은 어디에 위치시켜야 할까요?

  • 다른 Qt 객체에 신호를 발신하거나 수신하기 위해 연결될 수 있습니다.

만약 우리가 Qt 객체를 복사한다면, 이 연결들을 어떻게 복사본으로 이전해야 할까요?

만약 우리가 Qt 객체를 복사한다면, 이 복사본도 원본에 추가된 속성을 포함해야 할까요?

이러한 이유로, Qt 객체는 값이 아닌 ID로 취급되어야 합니다. ID는 복사나 할당이 아니라 복제되며, ID의 복제는 복사나 값의 할당보다 더 복잡한 작업입니다. 때문에, "QObject":http://doc.qt.io/qt-5.1/qtcore/qobject.html와 모든 QObject의 직간접적 서브 클래스들의 복사생성자 및 할당연산자("copy constructor and assignment operator":http://doc.qt.io/qt-5.1/qtcore/qobject.html#no-copy-constructor)는 비활성 상태로 되어 있습니다.