이 페이지에서

Qt Quick Compiler

Qt Quick Compiler 을 사용하면 런타임이 아닌 컴파일 시점에 QML 및 JavaScript 코드를 처리할 수 있습니다. 이를 통해 다음과 같은 이점을 얻을 수 있습니다:

  • 애플리케이션 시작 속도 향상
  • 바인딩 및 함수의 더 빠른 평가

Qt Quick Compiler 는 다음 두 가지 구성 요소로 이루어져 있습니다:

참고: qmltc, qmlsc 및 qmlcachegen은 내부 빌드 도구입니다. 이 도구들의 호출 방식을 신경 써야 한다면, 빌드 시스템을 직접 작성하고 있거나 뭔가 잘못된 작업을 하고 있는 것입니다.

QML 타입 컴파일러

QML 타입 컴파일러 (qmltc) 는 QML 타입을 C++ 클래스로 컴파일합니다. 이렇게 생성된 C++ 클래스는 애플리케이션에 추가되며, 다른 C++ 코드에서 인스턴스화할 수 있습니다. 이를 통해 QQmlComponent 를 사용하여 QML 타입의 인스턴스를 생성할 때 발생하는 오버헤드를 상당 부분 줄일 수 있습니다. qmltc의 이점을 누리려면 C++ 코드를 수정하여 새로운 클래스를 활용해야 합니다.

qmltc는 QML 문서의 구조를 완전히 이해할 수 있는 경우에만 컴파일할 수 있습니다. 지원되지 않는 언어 기능이 발견되면 컴파일이 실패합니다. 다만, 바인딩 및 함수 내의 JavaScript 코드는 이해할 필요가 없습니다.

QML 스크립트 컴파일러

QML 스크립트 컴파일러(qmlsc 및 qmlcachegen)는 바인딩과 함수를 효율적인 바이트 코드와 C++ 함수로 모두 컴파일합니다. qt_add_qml_module을 사용하여 QML 모듈을 지정하는 경우, 이 과정은 백그라운드에서 자동으로 수행됩니다. QML 컴파일의 다양한 측면을 제어하는 사용 가능한 옵션에 대한 자세한 내용은 ‘컴파일된 QML 소스 캐싱’을 참조하십시오.

컴파일 시, 각 QML 또는 자바스크립트 문서에 대해 해당 C++ 파일이 생성되어 애플리케이션에 빌드됩니다. 이 C++ 파일에는 다음으로 구성된 QML 컴파일 유닛이 포함됩니다:

  • 문서 구조를 효율적으로 표현한 형태
  • 문서 내 모든 함수 및 바인딩에 대한 바이트 코드
  • 컴파일러가 완전히 이해하는 함수 및 바인딩에 대한 C++ 코드

QML 엔진은 실행 시점에 QML 또는 JavaScript 소스 코드를 다시 컴파일하지 않고, 미리 빌드된 컴파일 유닛을 사용하여 QML 컴포넌트와 그 함수 및 바인딩을 더 빠르게 로드합니다. C++로 컴파일된 함수와 바인딩 또한 더 빠르게 실행될 수 있습니다. 그 외의 바인딩과 함수는 바이트 코드에서 직접 해석되거나, 런타임에 JIT(Just-In-Time) 컴파일 단계를 거쳐 기계어로 컴파일됩니다. 컴파일 시점에서는 보다 정교한 유형 분석이 수행될 수 있습니다. 따라서 생성된 C++ 코드는 일반적으로 JIT 컴파일 결과보다 더 효율적입니다.

JavaScript 구문 중 C++로 컴파일할 수 있는 항목에는 제한이 있습니다. 이러한 제한 사항에 대한 자세한 내용은 ‘JavaScript를 C++로 컴파일할 때의 제한 사항’을 참조하십시오. QML 프로젝트의 컴파일 효율성에 대한 통계는 ‘함수 및 바인딩 컴파일 통계 확인’을 참조하십시오.

Qt Quick Compiler 확장 기능이 설치된 경우, qmlcachegen 대신qmlsc가 사용됩니다. qmlsc는 qmlcachegen에 비해 다음과 같은 추가 기능을 제공합니다:

  • 다이렉트 모드(Direct Mode)에서 문서를 컴파일할 수 있습니다. 이 경우, 다른 QML 컴포넌트의 기반이 되는 타입의 C++ 헤더가 직접 포함되며 해당 타입의 메서드가 직접 호출됩니다. 반대로, 간접 모드(Indirect Mode)에서는 qmlcachegen이나 qmlsc가 인터프리터와 JIT에서도 사용되는 조회 메커니즘을 통해 메서드를 호출합니다.
  • 정적(Static) 모드에서 문서를 컴파일할 수 있습니다. 이 경우, qmlsc는 C++에 노출된 어떤 유형의 속성도 파생 유형에 의해 가려질 수 없다고 가정합니다. 이를 통해 더 많은 바인딩과 함수를 컴파일할 수 있지만, 속성이 가려진 경우 유효하지 않은 코드가 생성됩니다.

qmlsc와 qmlcachegen은 C++을 출력하는 대신 .qmlc, .jsc 및 .mjsc "캐시 파일"을 생성할 수도 있습니다. 이 파일들은 여전히 각각 하나의 QML 컴파일 유닛을 포함하고 있으며, 재컴파일을 피하기 위해 QML 엔진에서 로드될 수 있습니다. 다만, 이 파일들에는 문서 구조와 바이트 코드만 포함될 수 있습니다. 캐시 파일이 생성되면 C++에 대한 바인딩 및 함수의 컴파일은 생략됩니다. Qt에서 제공하는 CMake나 qmake 빌드 시스템 모두 이 기능을 노출하지 않습니다.

요약

다음 표는 qmltc, qmlcachegen 및 qmlsc 간의 차이점을 요약한 것입니다:

qmltcqmlcachegenqmlsc
QML 타입을 C++ 클래스로 컴파일합니다QML 문서를 QML 컴파일 유닛으로 컴파일합니다QML 문서를 QML 컴파일 유닛으로 컴파일합니다
생성된 출력은 ` QQmlComponent` 기반 객체 생성에 비해 더 빠른 대안 역할을 합니다.생성된 출력은 재컴파일을 방지하고 실행 속도를 높이기 위해 QML 엔진에서 내부적으로 사용됩니다.생성된 출력은 QML 엔진에서 내부적으로 재컴파일을 방지하고 실행 속도를 높이기 위해 사용됩니다. 직접 모드와 정적 모드를 사용하면 애플리케이션 속도를 더욱 높일 수 있습니다.
모든 Qt 버전에서 사용 가능모든 버전의 Qt에서 사용 가능상업용 고객에게 제공

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.