Qt 입문자 및 Qt for Python을 위한 작은 소개
안녕하세요. 반갑습니다. j2doll(aka Jay Two) 입니다.
이 글에서는 Qt 입문자 및 Qt for Python을 위한 작은 소개를 적을 예정입니다.
또한 첫 글에 대한 운영자님의 촌철 리뷰를 반영하여 글을 약간 자세히 적어보도록 하겠습니다. ^^;
제가 Qt를 상업용 프로젝트에 적용한지는 십여년 정도 된 것 같습니다. 그동안 반추해 보면 개발자들이 Qt를 개발 프레임워크(Framework)로 선택하려는 이유는 매우 다양했던 것 같습니다. 그 중 Qt 입문자가 Qt를 선택하려는 이유를 제 관점에서 추려보면 다음과 같을 것 같습니다.
- 다양한 운영체제(OS) 별 개발 소요를 최소화하기 위한 C++ CLI 응용 프로그램 개발
- 데스크탑 어플리케이션을 개발하기 위한 C++ 및 QML 개발
- 안드로이드 및 아이폰 개발 등의 스마트폰 앱 개발을 위한 QML 개발
- C++ 이외 언어(Python 등) 기반의 GUI 프로그래밍 개발
그러면 각 경우에 대한 입문 방법과 장단점, 배경 지식 등을 간략히 소개해 보겠습니다.
1) 다양한 운영체제(OS) 별 개발 소요를 최소화하기 위한 C++ CLI 응용 프로그램 개발
1번은 Qt를 사용하는 일반적인 방법입니다. Qt를 이용하여 Hello World를 만드시는 것을 생각하시면 됩니다. 주로 콘솔(Console) 프로그램의 개발에 유용하며, 물론 데몬형 서버 개발에도 많이 활용해도 됩니다.
이 경우 C++ 언어에 대한 기본적인 이해가 필수적입니다. C++ 기본 문법, 객체지향 프로그래밍(OOP), STL과 유사한 콘테이너 및 알고리즘에 대한 프로그래밍 등의 지식이 개발을 위한 필수 지식에 해당됩니다.
2) 데스크탑 어플리케이션을 개발하기 위한 C++ 및 QML 개발
2번은 Qt를 개발 프레임워크로 선택하는 가장 일반적인 경우 중 하나입니다. 최근 수년동안 Qt Company(구 Digia, Nokia, Trolltech)는 C++ 이외 QML 및 python 등을 이용한 Qt의 접근법을 제시하고 있습니다. 이 경우 C++ 지식을 보유하여도 되며, QML이나 Python 만의 지식을 보유하여도 됩니다. 그리고 Qt Company에서 제시하는 다양한 프로그래밍 언어 사용 방법은 다언어 사용에 대한 배경 지식을 함께 요구하기도 합니다.
QML은 Qt를 위한 모델링 언어이며, 자바스크립트도 사용하는 선언형 언어입니다. 선언형 언어는 명령형 언어인 JAVA,C++ 등과 다르게 시간의 흐름에 대한 기술이 없습니다. Prolog, HTML 등이 대표적인 선언형 언어입니다. QML은 Qt의 한계를 웹 프론트 엔드 기술의 힘을 빌려 해결하기 위한 Qt Company의 개발 접근 방법 중 하나입니다.
3) 안드로이드 및 아이폰 개발 등의 스마트폰 앱 개발을 위한 QML 개발
3번을 설명하기 전에 QML 개발이 대두되기 시작한 간략한 이유를 설명드리겠습니다. 아이폰 및 안드로이드폰으로 구성된 스마트폰이 정보통신 시장을 혁신한 것은 누구나 잘 아실겁니다. 초기 앱 개발자들은 오브젝티브 씨와 넥스트 스텝 기반의 아이폰 개발과 자바와 달빅 기반의 안드로이드 개발을 위하여 두가지 개발을 분리된 코드로 수행할 수 밖에 없었습니다.
그 후 두 가지 스마트폰 운영체제에서의 개발을 단일 코드로 시도하는 PhoneGap(Cordova) 등의 하이브리드 앱 개발 방법이 모색되었습니다. 기본 구성은 HTML 및 JavaScript를 사용하는 웹 브라우저 엔진을 이용하는 것입니다. 하지만 웹 브라우저 엔진은 일종의 샌드박스입니다. 보안 상의 이유로 브라우저 외부를 제어할 수는 없게 되어 있지요. 그래서 네이티브 코드를 자바스크립트 등의 웹 언어와 바인드하여 스마트폰의 카메라, 사진, 위치(GPS) 등에 접근할 수 있도록 하는 것이 하이브리드 앱 개발의 주요 개념입니다.
QML도 비슷한 원리로 작동합니다. QML은 객체(사각형 , 텍스트 등)를 정의하기만 하면 됩니다. 그러면 Qt는 QML을 웹 브라우저처럼 GUI로 렌더링합니다. 웹 브라우저로 HTML을 그래픽하게 렌더링하시는 것으로 생각하시면 됩니다.
4) C++ 이외 언어(Python 등) 기반의 GUI 프로그래밍 개발
4번은 Qt를 C++ 이외의 언어에서 접근하는 방법이다. C++는 여러가지 단점이 지적되어 왔습니다. 그중 대표적인 것들로 높은 학습곡선(learning curve), 메모리 관리, 정적 타이핑 언어(Statically typed language), 인터프리터 미지원 등을 들 수 있습니다.
반면에 Python은 태생부터 데스크탑 GUI 개발에 좋지는 않습니다. 왜냐하면 대부분의 초기 데스크탑 운영체제의 UI 개발은 C, C++, Pascal, Objective C 등의 언어를 선정했기 때문이죠.
그래서, 그후 등장한 PyQt나 PySide 등의 라이브러리는 주 언어를 Python으로 선택하고, GUI 컴포넌트를 Qt로 사용하는 방법으로 만들어 지기 시작했습니다.
4번 중 PyQt가 가장 유명합니다. 그런데 PyQt는 Qt Company에서 만든 것은 아닙니다. 그래서 Qt Company에서 기존의 PySide를 업드레이드하여 PySide2를 내놓았습니다. PySide2라는 이름은 Py만 강조되고 Qt는 안 보입니다.--; 그래서 ‘Qt for Python’이라는 새로운 이름의 프로젝트를 시작한 것입니다.
서두가 참 길죠. ^^;
이 글을 보시고 '헬로우 큐트 포 파이썬 (Hello Qt for Python)'을 보시면 이해가 용이하실 겁니다.
향후 소개 계획...
이번 글(들)을 작성하게 된 동기는 국내에 Qt for Python에 대한 소개글이 없어서 였습니다. 현재 큐트 컴패니에서 수행하는 한글 개발자 지원은 전무한 편이어서 지식 기반 자료를 쌓기도 쉽지 않습니다. 또한 국내 총판을 맡고 계신 업체(들)도 영업적인 내용만 관심이 있으시기에, 개발자들에게 실질적인 도움이 없는 것도 안타까운 현실입니다.
이러한 글들이 전문가들이 보시기에는 미흡한 글이겠지만, 글들이 모여 입문자 여러분을 위한 도움말이 되었으면 하는 바람입니다.
향후 Shiboken을 적용하는 Qt for Python의 예제 설명 등을 소개하도록 하겠습니다. 끝까지 읽어 주셔서 감사합니다.