한국어
Qt
 

General and Desktop Q_D매크로와 d-pointer

makersweb 2019.05.07 21:53 조회 수 : 761

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 86028
79 QThread 소개 및 예제 makersweb 2019.12.25 19525
78 ApplicationWindow 와 메뉴바(MenuBar)구성 file makersweb 2020.01.04 1502
77 Qt 멀티 스레드 프로그래밍 시 유의해야 할 몇 가지 makersweb 2020.01.13 4880
76 Qt로 XML 파싱 : Qt 6에서 업데이트된 (Parsing XML with Qt: Updates for Qt 6) [1] j2doll 2020.01.16 979
75 2020년에 변경되는 Qt 오퍼 (Qt offering changes 2020) [2] j2doll 2020.01.31 721
74 QOpenGLWidget 을 투명하게 적용 file makersweb 2020.02.05 1041
73 라즈베리파이4에 대한 Qt 5.14.1 크로스컴파일 [1] file makersweb 2020.02.12 4450
72 QLabel의 텍스트 색과 배경색을 변경 makersweb 2020.02.25 6643
71 Qt로 작성된 안드로이드 APP에 Splash Screen을 추가 file makersweb 2020.03.10 885
70 컨테이너 클래스 - QVector makersweb 2020.03.17 2852
69 콘솔에서 사용자 입력받기 file makersweb 2020.03.22 51851
68 Qt 5.15 및 Qt 6의 출시 일정 makersweb 2020.04.09 934
67 재진입(Reentrancy) 및 스레드 안전성(Thread-Safety) makersweb 2020.04.19 1218
66 Qt기반의 서버와 클라이언트간 SOAP(Simple Object Access Protocol) file makersweb 2020.05.11 974
65 ShaderEffect QML Type을 이용한 버튼 클릭 효과 file makersweb 2020.05.22 1092
64 Embedded Linux 에서 Qt 및 Graphics Stack file 운영자 2020.05.27 614
63 Qt MQTT 에 대해서 file makersweb 2020.06.02 961
62 최초의 Qt 6.0 스냅샷 제공 (First Qt 6.0 Snapshot Available) j2doll 2020.06.21 592
61 Qt로 데이터를 직렬화(serialization)하는 방법 makersweb 2020.08.04 2066
60 UI 폼(Form)작성 시 탭 순서(Tab Order) 설정 file makersweb 2020.08.24 2797