최근 수정 시각 : 2025-12-27 12:39:23

QML


[[프로그래밍 언어|'''프로그래밍 언어
{{{#!wiki style="font-family: Times New Roman, serif; display: inline;"
]]
{{{#!wiki style="min-height: calc(1.5em + 5px); margin: 0 -10px -5px"
{{{#!wiki style="display: inline-table; min-width: 40%; min-height: calc(1.5em + 5px)"
{{{#!folding [ 목록 ]
{{{#!wiki style="margin: -5px -1px"
<colbgcolor=royalblue><colcolor=#fff> ※ 나무위키에 등재된 프로그래밍 언어 목록
AActionScript · AdaT · AgdaTP · ALGOLT · ApexT · APL · awk · AssemblyT
BBASIC
C파일:C언어 로고.svg CT · 파일:C C#T · 파일:C++ 로고.svg C++T · CarbonT · 파일:clojure_logo.png ClojureS · COBOLT · CoffeeScript · Common LispS · CrystalT
D파일:external/upload.wikimedia.org/D_programming_language_logo.png DT · 파일:Dart 심볼.svg DartT
EElixir · 파일:Elm_logo.svg.png elmT · Erlang
F파일:fsharp-logo.png F#T · Factor · 파일:fennel-logo.svg FennelS · 파일:forth.png Forth · FortranT
GGNU Octave · 파일:Go 로고.svg GoT · Groovy
H파일:Haskell 로고 심볼.svg HaskellT · HolyCT · Haxe
I
J파일:Java 로고.svg JavaT · 파일:JavaScript 로고.svg JavaScript · 파일:julia-dots.svg Julia
K파일:Kotlin 심볼.svg KotlinT
LLeanTP · 파일:LISP_logo.svg LISPS · 파일:Lua 로고.svg Lua
MMATLAB · MaxV · MojoT · Moonlight
N파일:Nim 왕관 로고.svg NimT · 파일:Nix 로고.svg Nix
OOberonT · Objective-CT · 파일:ocaml.svg OCamlT
PPascalT · Perl · 파일:PHP 로고.svg PHP · Processing · Prolog · 파일:Python 심볼.svg Python
QQ#T · QML
R파일:R 로고.svg R · 파일:racket-logo.svg RacketS · Raku · ReasonMLT · 파일:rocq.png RocqTP · 파일:Ruby 로고.svg Ruby · 파일:Rust 로고.svg파일:Rust 로고 화이트.svg RustT
SSAS · 파일:Scala 로고.png ScalaT · SchemeS · 파일:스크래치(교육 플랫폼) 로고.svg ScratchV · sed · Shell Script · Smalltalk · SQL · 파일:Swift 심볼 배경.svg SwiftT
T파일:Typescript_logo_2020.svg TypeScriptT
UUdon
VVisual Basic · Visual Basic .NET · Visual Basic for Applications · vvvvV
WWave
XXSharp
Y
ZZenScript · 파일:Zig 로고마크.svg ZigT
한글누리 · V · 씨앗 · 약속 · 파일:엔트리 아이콘.svg 엔트리V · 창조
T: 정적 타입 프로그래밍 언어 · P: 증명 보조 언어 · S: LISP 방언 및 S-표현식 기반 언어 · V: 시각적 프로그래밍 언어 }}}}}}}}}{{{#!wiki style="display: inline-table; min-width: 40%; min-height: calc(1.5em + 5px)"
{{{#!folding [ 순위 ]
{{{#!wiki style="margin: -5px -1px -10px"
{{{#!wiki style="min-height: calc(1.5em + 5px); margin: 0 -10px -5px"
{{{#!wiki style="display: inline-table; min-width: 25%; min-height: calc(1.5em + 5px)"
{{{#!folding [ IEEE Spectrum 2025 ]
{{{#!wiki style="margin: -5px -1px"
<tablewidth=100%><tablebgcolor=transparent><colbgcolor=#11a500><colcolor=#fff> 스펙트럼 부문 상위 10개 프로그래밍 언어 <colbgcolor=#ff1100><colcolor=#fff> 직업 부문 상위 10개 프로그래밍 언어
1 Python 1 Python
2 Java 2 SQL
3 C++ 3 Java
4 SQL 4 JavaScript
5 C# 5 TypeScript
6 JavaScript 6 C#
7 TypeScript 7 C++
8 C 8 HTML
9 Shell 9 Go
10 Go 10 Shell }}}}}}}}}{{{#!wiki style="display: inline-table; min-width: 25%; min-height: calc(1.5em + 5px)"
{{{#!folding [ Stack Overflow 2025 ]
{{{#!wiki style="margin: -5px -1px"
<colbgcolor=#ffa500><colcolor=#fff> 2025년 Stackoverflow 설문조사 상위 25개 프로그래밍 언어
1 JavaScript <colbgcolor=#ffa500><colcolor=#fff> 14 Rust
2 HTML & CSS 15 Kotlin
3 SQL 16 Lua
4 Python 17 어셈블리어
5 Bash/Shell 18 Ruby
6 TypeScript 19 Dart
7 Java 20 Swift
8 C# 21 R
9 C++ 22 Groovy
10 PowerShell 23 Visual Basic
11 C 24 VBA
12 PHP 25 MATLAB
13 Go }}}}}}}}}{{{#!wiki style="display: inline-table; min-width: 25%; min-height: calc(1.5em + 5px)"
{{{#!folding [ TIOBE 2025 ]
{{{#!wiki style="margin: -5px -1px"
<colbgcolor=#2777c2><colcolor=#fff> 2025년 10월 TIOBE 검색어 점유율 상위 20개 프로그래밍 언어
1 Python <colbgcolor=#2777c2><colcolor=#fff> 11 Fortran
2 C 12 Perl
3 C++ 13 R
4 Java 14 PHP
5 C# 15 Assembly language
6 JavaScript 16 Rust
7 Visual Basic 17 MATLAB
8 Go 18 Scratch
9 Delphi / Object Pascal 19 Ada
10 SQL 20 Kotlin }}}}}}}}}{{{#!wiki style="display: inline-table; min-width: 25%; min-height: calc(1.5em + 5px)"
{{{#!folding [ PYPL 2025 ]
{{{#!wiki style="margin: -5px -1px -10px"
<colbgcolor=green><colcolor=#fff> 2025년 11월 PYPL 검색어 점유율 상위 20개 프로그래밍 언어
1 Python <colbgcolor=green><colcolor=#fff> 11 Ada
2 Java 12 TypeScript
3 C++ 13 MATLAB
4 Objective-C 14 Kotlin
5 R 15 PowerShell
6 JavaScript 16 Go
7 C# 17 Dart
8 Swift 18 Ruby
9 PHP 19 Lua
10 Rust 20 VBA }}}}}}}}}}}} }}}}}}}}}}}}
실행 방식 · 분류 · 언어 목록(분류:프로그래밍 언어 문법) · 언어별 예제 · 틀:프로그래밍 언어 문법 · 틀:난해한 프로그래밍 언어
<colcolor=#41cd52,#1b9e3f> QML
개발 노키아 → Digia → The Qt Company
패러다임 선언형, 반응형(속성 바인딩), 스크립팅(JS)
확장자 .qml, .qmltypes, .js, .ui
https://doc.qt.io/qt-6/qtqml-index.html


1. 개요2. 특징3. 실행 방식4. 활용 및 평가


1. 개요

#!syntax javascript
import QtQuick

Window {
    width: 640
    height: 480
    visible: true

    title: qsTr("Hello World")
}

QML(큐엠엘, Qt Modeling/Meta-object Language)은 QtQt Quick 모듈에서 제공하는 선언형 UI 언어이다. 2009년에 모바일 장치 및 터치 디바이스 환경에서의 GUI 개발을 지원하기 위해 처음 릴리즈되었다. 화면 구성 요소를 트리 구조로 기술하고, 속성 바인딩(Property Binding) 등을 통해 값이 변하면 자동으로 UI가 반응하도록 설계되었다. Qt 프레임워크를 사용하는 데스크톱, 모바일, 임베디드 등 다양한 플랫폼에서 활용되지만, 특히 임베디드 GUI 개발 분야에서 강점을 보인다.

2. 특징

QML은 3가지 언어적 요소를 포함하고 있다. 첫째, GUI 컴포넌트 선언부는 JSONCSS와 유사한 스타일로 작성된다. 둘째, GUI의 동적인 로직은 JavaScript로 작성된다. 셋째, 성능이 중요한 데이터나 백엔드 로직 등은 주로 C++로 작성한 후 QML로 노출하여 사용한다. 마치 웹의 프로트엔드 개발 방식에서 성능과 관련된 부분을 C++로 작성하는 느낌이다.
이러한 특징이 주는 장점은 가독성과 성능이다. 언어적 특징이 코드 구조를 어느 정도 강제화하는 부분이 있기 때문에, UI 컴포넌트, 동적 로직, 백엔드 로직이 주로 명확히 분리되어 가독성이 높아진다. 또한 백엔드 로직이 C++로 작성되어 타 스크립트 기반 UI 언어 대비 실시간 성능이 우수하다.
반대로 단점은 학습 곡선과 타입 안정성이다. 3가지 언어적 요소를 포함하기에, 이를 모두 배우고 어플리케이션에 적합한 구조를 설계하기까지는 학습 시간이 타 언어 대비 많이 소요된다. 또한 JavaScript(ECMAScript) 기반의 제한적인 타입 검증으로 런타임 오류가 발생하기 쉽다.

3. 실행 방식

QML 엔진은 기본적으로 인터프리팅 방식으로 동작하지만, 그 과정에서 JIT(Just-In-Time) 컴파일 방식을 적용하여 실행시간을 최적화 하고 있다. QML 엔진은 QML 코드를 앱 실행 전 미리(Ahead-Of-Time) 컴파일하여, 런타임시 바로 실행가능한 QV4(Qt 자체 구현 JavaScript/QML 실행 엔진) 바이트코드 혹은 C++ 코드를 생성한다. 이렇게 생성된 데이터는 캐싱되어 이후 실행 시 재사용되며, 초기 로드 속도를 크게 개선한다. 또한 자주 실행되는 바이트코드를 평가해 머신 코드로 변환함으로써 더 빠르게 실행될 수 있도록 한다.
실행 구조상 QML 코드는 두 계층으로 나뉜다. QV4 바이트코드 영역은 QML의 JavaScript 로직을 처리하며, 이 영역의 메모리는 엔진 내부의 가비지 콜렉터(GC) 가 자동으로 관리한다. 반면 C++ 객체 영역은 QQuickItem, QObject 등의 실체를 포함하며, Qt의 객체 소유권 모델을 통해 메모리가 관리된다.
JIT 컴파일은 환경 변수(QV4_FORCE_INTERPRETER)를 통해 활성화 여부를 제어할 수 있다. JIT이 비활성화된 경우, QV4 바이트코드는 순수 인터프리팅 방식으로 실행된다.

4. 활용 및 평가

QML은 모바일 및 터치 디바이스를 주요 대상으로 설계된 만큼, 현재는 주로 임베디드 시스템 분야에서 활용된다. 예시로 한국에서는 LG전자, 현대자동차 등에서 차량용 클러스터 및 IVI(In-Vehicle Infotainment) 개발에 사용되고 있다. 반면 데스크톱 애플리케이션 영역에서는 여전히 Qt Widgets 기반 개발이 주류를 이룬다.
QML은 비교적 이른 시기에 등장한 선언형 GUI 언어로서 높은 가독성과 산업용 요구에 부합하는 성능을 제공한다. 그러나 언어 구성의 복합성과 높은 설계 난이도로 인해 학습 곡선이 가파르며, 대규모 프로젝트에서는 타입 안정성과 구조화 관리가 중요하게 요구된다.