| [[프로그래밍 언어|'''프로그래밍 언어 {{{#!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> ※ 나무위키에 등재된 프로그래밍 언어 목록 | |
| A | ActionScript · AdaT · AgdaTP · ALGOLT · ApexT · APL · awk · AssemblyT | |||||||
| B | BASIC | |||||||
| C | ||||||||
| D | ||||||||
| E | Elixir · | |||||||
| F | ||||||||
| G | GNU Octave · | |||||||
| H | ||||||||
| I | ||||||||
| J | ||||||||
| K | ||||||||
| L | LeanTP · | |||||||
| M | MATLAB · MaxV · MojoT · Moonlight | |||||||
| N | ||||||||
| O | OberonT · Objective-CT · | |||||||
| P | PascalT · Perl · | |||||||
| Q | Q#T · QML | |||||||
| R | ||||||||
| S | SAS · | |||||||
| T | ||||||||
| U | Udon | |||||||
| V | Visual Basic · Visual Basic .NET · Visual Basic for Applications · vvvvV | |||||||
| W | Wave | |||||||
| X | XSharp | |||||||
| Y | ||||||||
| Z | ZenScript · | |||||||
| 한글 | 누리 · 숨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. 개요
#!syntax javascript
import QtQuick
Window {
width: 640
height: 480
visible: true
title: qsTr("Hello World")
}
QML(큐엠엘, Qt Modeling/Meta-object Language)은 Qt의 Qt Quick 모듈에서 제공하는 선언형 UI 언어이다. 2009년에 모바일 장치 및 터치 디바이스 환경에서의 GUI 개발을 지원하기 위해 처음 릴리즈되었다. 화면 구성 요소를 트리 구조로 기술하고, 속성 바인딩(Property Binding) 등을 통해 값이 변하면 자동으로 UI가 반응하도록 설계되었다. Qt 프레임워크를 사용하는 데스크톱, 모바일, 임베디드 등 다양한 플랫폼에서 활용되지만, 특히 임베디드 GUI 개발 분야에서 강점을 보인다.
2. 특징
QML은 3가지 언어적 요소를 포함하고 있다. 첫째, GUI 컴포넌트 선언부는 JSON 및 CSS와 유사한 스타일로 작성된다. 둘째, 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 언어로서 높은 가독성과 산업용 요구에 부합하는 성능을 제공한다. 그러나 언어 구성의 복합성과 높은 설계 난이도로 인해 학습 곡선이 가파르며, 대규모 프로젝트에서는 타입 안정성과 구조화 관리가 중요하게 요구된다.