한국어
Qt
 

General and Desktop Q_D매크로와 d-pointer

makersweb 2019.05.07 21:53 조회 수 : 454

pimpl 이디엄(관용구)에 대해서 알고있다면 d-pointer가 새롭지 않을것이다. (이를 종종 불투명한 포인터라고 부르기도 한다.)

 

먼저 Pimpl이란 "pointer to implementation" 이라는 문장의 약자로 클래스의 자료 멤버들을 구현 클래스를 가리키는 포인터로 대체하고 구현클래스(자료 멤버 및 함수들)는 .cpp로 옮겨서 구체적인 코드를 외부로 노출하지 않는 것이다. 제프 섬너(Jeff Sumner)에 의해 제일 먼저 사용되었다.

 

이 Pimpl 이디엄을 Qt에서는 d-pointer로 불린다. 구현에 대한 변경이 사용자에게 영향을 주지않도록 할 수있으며 API 라이브러리를 동적으로 링크되는 응용프로그램을 다시 컴파일 하지 않고 계속 실행 될 수 있게 호환성을 유지하도록 하는 설계에 적합하다.

 

Qt의 소스코드를 보면 다음과 같은 코드를 많이 볼 수 있다.

Q_D(xyz);

 

Q_D 와 같은 매크로는 구현클래스의 포인터(d-pointer를 반환) 제공한다.

qglobal.h

#define Q_D(Class) Class##Private * const d = d_func()

 

예제:

qdpointer.zip

 

참고 링크:

https://en.wikipedia.org/wiki/Opaque_pointer#cite_note-4

https://wiki.qt.io/D-Pointer

번호 제목 글쓴이 날짜 조회 수
공지 Qt프로그래밍(QtQuick) Beginner를 위한 글 읽는 순서 운영자 2019.01.05 24098
78 MCU용 Qt에 대해서 makersweb 2019.08.22 1071
77 [Qt News] Qt for Python을 위한 기술 비전 j2doll 2019.08.20 1089
76 열거형(enum)을 QML에서 사용하는 방법과 문자열(QString)로 얻기 makersweb 2019.08.20 1459
75 [Qt News] Qt 6 기술 비전 (Technical vision for Qt 6) [2] j2doll 2019.08.08 1220
74 [Qt News] Qt6 Git 개발 초기 단계 시작하기 j2doll 2019.08.02 1398
73 [Qt] Google Play의 향후 요구 사항을 준수하는 방법 [2] j2doll 2019.07.29 680
72 Qt기반의 오픈소스 프로젝트들 - 2 운영자 2019.07.21 1123
71 QML, 이미지, 폰트등을 바이너리 리소스로 만들기 makersweb 2019.06.24 1892
70 Qt Creator에서 임베디드 장치로 deploy설정(Custom Process Step) file makersweb 2019.06.15 1387
69 Qt Quick Controls 2사용 및 스타일 설정 file makersweb 2019.06.07 3295
68 QML 강좌 - 동적 Listing (ListView) file makersweb 2019.06.01 5502
67 QtInstallerFramework로 온라인 설치프로그램(Online Installer)만드는 방법 [4] file makersweb 2019.05.28 1071
66 QtCreator Design으로 GUI만들기 (QML로 만드는 Hello World -2) [1] file makersweb 2019.05.26 6893
65 QML에서 멀티 스레드(multithreading) 프로그래밍 file makersweb 2019.05.25 1402
64 QtSerialPort를 사용한 시리얼(Serial)통신 [3] makersweb 2019.05.21 5102
63 Qt기반의 오픈소스 프로젝트들 makersweb 2019.05.15 3147
» Q_D매크로와 d-pointer file makersweb 2019.05.07 454
61 가상키보드(Qt Virtual Keyboard)를 사용하는 방법 [26] file makersweb 2019.05.03 4181
60 Windows에서 Qt D-Bus를 사용하여 프로세스간 통신(IPC) file makersweb 2019.05.02 2126
59 QML과 QtQuick 모듈 개념과 기본 타입들 makersweb 2019.04.26 8505