맨위로가기

위젯 툴킷

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

위젯 툴킷은 그래픽 사용자 인터페이스(GUI)를 구성하는 데 사용되는 도구 모음이다. 윈도우 시스템, 이벤트 기반 프로그래밍을 사용하며, 주요 위젯 툴킷으로는 wxWidgets, GTK, Qt 등이 있다. 운영체제 내장 툴킷, 운영체제 상 분리 계층 툴킷, 고수준 툴킷으로 분류되며, macOS, iOS, Windows, Android 등 각 운영체제에 특화된 툴킷과 크로스 플랫폼 툴킷이 존재한다.

더 읽어볼만한 페이지

  • 위젯 툴킷 - Tk (소프트웨어)
    Tk는 Tcl 스크립팅 언어의 크로스 플랫폼 GUI 툴킷으로, 다양한 플랫폼 이식과 여러 프로그래밍 언어 바인딩을 지원하며 사용자 정의 가능한 위젯들을 제공한다.
  • 위젯 툴킷 - 윈도우 API
    윈도우 API는 마이크로소프트 윈도우 운영 체제에서 응용 프로그램이 시스템 기능에 접근하도록 돕는 인터페이스 집합이며, 다양한 버전으로 발전해 왔고, 현재 Win32가 널리 사용되며, 유연성을 제공하지만 복잡하다는 단점을 보완하기 위해 다양한 래퍼 라이브러리가 개발되었다.
  • 그래픽 사용자 인터페이스 - 메트로 (디자인 언어)
    마이크로소프트가 스위스 그래픽 디자인과 런던 지하철 표지판에서 영감을 받아 개발한 메트로 디자인 언어는 큰 텍스트, 간결한 타이포그래피, 라이브 타일 등의 특징을 가지며 Windows, Xbox, Microsoft Office 등 다양한 제품에 적용되었고, 상표권 문제와 함께 명칭 변경 및 MDL2로 진화하며 사용자 경험에 대한 엇갈린 평가를 받았다.
  • 그래픽 사용자 인터페이스 - 작업 표시줄
    작업 표시줄은 윈도우 운영체제에서 화면 하단에 위치하여 프로그램 실행, 창 관리, 시스템 상태 확인 기능을 제공하는 사용자 인터페이스 요소이며, 윈도우 95부터 도입되어 다양한 사용자 정의 설정을 지원하며 발전해 왔다.
위젯 툴킷

2. 윈도우 시스템

윈도우는 그래픽 제어 요소로 간주된다. 일부 윈도우 시스템에서 윈도우는 캔버스에 윈도우 매니저에 의해 직접 추가되며, 다양한 방법을 통해 서로 위에 쌓이고 계층화될 수 있다.[1] 각 윈도우는 해당 캔버스에 추가된 위젯을 제어하는 특정 애플리케이션과 연결되어 있으며, 연결된 애플리케이션에서 이를 감시하고 수정할 수 있다.

3. 이벤트 기반 프로그래밍

대부분의 위젯 툴킷은 상호 작용 모델로 이벤트 기반 프로그래밍을 사용한다.[1] 툴킷은 사용자가 버튼을 클릭하는 경우와 같은 사용자 이벤트를 처리한다. 이벤트가 감지되면 애플리케이션으로 전달되어 처리된다. 이러한 툴킷의 설계는 이벤트-액션의 지나치게 단순화된 모델을 조장하여 프로그래머가 오류가 발생하기 쉽고 확장하기 어렵고 지나치게 복잡한 애플리케이션 코드를 생성하게 한다는 비판을 받아 왔다.[2] 유한 상태 기계 및 계층적 상태 기계는 반응형 프로그램의 상호 작용 상태 변경을 나타내는 상위 수준 모델로 제안되었다.

4. 주요 위젯 툴킷

주요 위젯 툴킷은 운영체제에 내장되거나, 별도 계층으로 구현되거나, 크로스 플랫폼을 지원하는 방식으로 제공된다.

표준 위젯 툴킷(Standard Widget Toolkit)을 사용하는 창


널리 사용되는 주요 위젯 툴킷은 다음과 같다:

일부 툴킷은 언어 바인딩을 통해 다른 프로그래밍 언어에서도 사용할 수 있다. GUI 빌더는 사용자 인터페이스 마크업 언어를 사용하여 WYSIWYG 방식으로 GUI 제작을 쉽게 한다.

대부분의 위젯 툴킷은 이벤트 기반 프로그래밍을 상호 작용 모델로 사용한다.[1] 사용자 이벤트가 발생하면, 툴킷은 이 이벤트를 감지하여 애플리케이션에 전달하여 처리한다.

4. 1. 운영체제 내장 툴킷


  • 클래식 Mac OS의 툴박스 또는 과거에는 ROM에 내장되어 있던 매킨토시의 API. Mac OS X에서의 개선판은 '''Carbon'''이다.
  • Windows에서 사용되는 '''Windows API'''. 그리기 기능을 담당하는 GDI라고 불리는 하위 레벨 레이어 위에 윈도 시스템을 담당하는 상위 레벨 레이어가 구축되어 있다. 주로 C 언어 형식 함수군 또는 COM 컴포넌트 형태로 공개 · 제공된다.
  • Android의 Activity/View
  • '''X 윈도 시스템'''은 기본적인 구성 요소(Xt)를 포함하고 있으며[3], 모티프(Motif)는 이를 사용하지만, GTK나 Qt 등 대부분의 툴킷은 이를 사용하지 않고, 직접 Xlib을 사용한다.
  • AmigaOS의 '''인튜이션'''(Intuition)은 Amiga의 ROM에 포함되어 있으며, 약간 높은 수준의 위젯을 사용하여 Amiga의 GUI인 워크벤치(Workbench)를 호출한다. Amiga OS 2.0부터는 디스크 상의 객체 지향 라이브러리가 되었다. 동시에 워크벤치와 아이콘도 디스크 기반이 되었다.

4. 2. 운영체제 상 분리 계층 툴킷

X 윈도 시스템 (Xt, 모티프): 모티프는 Xt를 사용하며, GTK+나 Qt는 Xlib을 직접 사용한다. AmigaOS Intuition: Amiga ROM에 포함되어 있다. Workbench GUI를 호출하며, 객체 지향 라이브러리로 발전했다.[1][2]

4. 3. 고수준 툴킷

일부 툴킷은 언어 바인딩을 사용하여 다른 언어에서도 사용할 수 있다. 예를 들어 Glade Interface Designer와 같은 GUI 빌더는 사용자 인터페이스 마크업 언어를 사용하여 WYSIWYG 방식으로 GUI 제작을 쉽게 한다.

프로그램의 GUI는 일반적으로 그래픽 제어 요소가 서로 위에 직접 추가되는 방식으로 계단식으로 구성된다.

대부분의 위젯 툴킷은 상호 작용 모델로 이벤트 기반 프로그래밍을 사용한다.[1] 툴킷은 사용자가 버튼을 클릭하는 경우와 같은 사용자 이벤트를 처리한다. 이벤트가 감지되면 애플리케이션으로 전달되어 처리된다. 이러한 툴킷의 설계는 이벤트-액션의 지나치게 단순화된 모델을 조장하여 프로그래머가 오류가 발생하기 쉽고, 확장하기 어렵고, 지나치게 복잡한 애플리케이션 코드를 생성하게 한다는 비판을 받아 왔다.[2] 유한 상태 기계 및 계층적 상태 기계는 반응형 프로그램의 상호 작용 상태 변경을 나타내는 상위 수준 모델로 제안되었다.

윈도우는 그래픽 제어 요소로 간주된다. 일부 윈도우 시스템에서 윈도우는 장면 그래프(캔버스)에 윈도우 매니저에 의해 직접 추가되며, 다양한 방법을 통해 서로 위에 쌓이고 계층화될 수 있다. 각 윈도우는 해당 캔버스에 추가된 위젯을 제어하는 특정 애플리케이션과 연결되어 있으며, 연결된 애플리케이션에서 이를 감시하고 수정할 수 있다.

4. 3. 1. macOS

Cocoa는 macOS 앱 개발에 사용되며(''Aqua''도 참조), UI 프레임워크로 '''AppKit'''을 포함한다.[4][5]

SwiftUI는 Swift만 사용하여 UI를 선언적으로 작성할 수 있는 프레임워크이다.[7]

4. 3. 2. iOS

iOS/iPadOS/tvOS/watchOS 앱 개발에 사용되는 '''코코아 터치'''는 UIKit UI 프레임워크를 포함한다.[4][8][9] '''SwiftUI'''는 코코아 터치와 함께 iOS 앱 개발에 사용되는 또 다른 프레임워크이다.

4. 3. 3. Windows


  • '''마이크로소프트 파운데이션 클래스(MFC)'''는 1990년대부터 존재해 온 Windows 전용 C++ 프레임워크로, Windows API의 얇은 래퍼이며 독립적인 툴킷은 아니다.
  • '''Windows Template Library(WTL)'''는 ATL의 확장이며, C++ 템플릿을 기반으로 한 Windows API의 래퍼이다. MFC보다 가벼운 프레임워크를 제공한다.
  • '''Windows Forms(WinForms)'''는 .NET Framework에서 관리되는 코드를 위한 Windows API의 래퍼이며, GUI 제어용 클래스 라이브러리로 구성된다. Microsoft Visual Studio에 통합된 RAD를 지원한다. Mono에 의한 호환 구현도 존재한다.[10]
  • '''Windows Presentation Foundation(WPF)'''는 .NET Framework 3.0 이후에 사용할 수 있는 그래픽스 서브 시스템으로, Direct3D에 의한 하드웨어 렌더링 가속을 지원한다. WPF에서의 사용자 인터페이스는 XML 기반의 XAML 언어를 사용하여 정의할 수 있다.
  • '''Windows 런타임(WinRT)''' 및 '''Windows UI Library(WinUI)'''는 Windows 8에서 구현된 Modern UI 애플리케이션 개발·실행을 위한 COM 기반 프레임워크이다. WPF와 마찬가지로 XAML을 이용한 UI 정의가 가능하다.

4. 3. 4. Android


  • 레이아웃 XML - 독자적인 XML 형식을 사용하여 레이아웃 및 사용자 정의 부품을 정의할 수 있다.[11]
  • '''Jetpack Compose''' - Kotlin만 사용하여 UI를 선언적으로 기술할 수 있는 프레임워크이다.[12] SwiftUI와 유사한 컨셉을 가진다.

4. 3. 5. 크로스 플랫폼


  • XML영어 기반
  • '''XUL'''
  • '''XAML''' 및 .NET 기반
  • .NET Multi-platform App UI (.NET MAUI)
  • AJAX 기반
  • [http://qooxdoo.org/ Qooxdoo] (웹용 Qt)
  • jQuery
  • [http://dojotoolkit.org/ Dojo Toolkit]
  • 구글 웹 툴킷
  • [http://developer.yahoo.com/yui/ Yahoo! UI Library]
  • Ext JS
  • Java 기반
  • '''추상 윈도우 툴킷 (AWT)''' (자바 애플리케이션에서 사용, 플랫폼별 위젯 툴킷 전환)
  • '''Swing''' (썬 마이크로시스템즈가 AWT를 개량·확장)
  • '''표준 위젯 툴킷 (SWT)''' (이클립스 계획의 일환으로 IBM에서 개발, 작동 환경의 위젯 사용, 100% Pure Java는 아님)
  • JavaFX
  • C 언어/C++C++ 기반 및 멀티 언어 기반
  • '''크로스 플랫폼용 컴포넌트 라이브러리 (CLX)''' (Component Library for Cross-platform영어, 보랜드의 Delphi, C++Builder, Kylix에서 사용, Qt 기반, Visual Component Library (VCL) 툴킷과 매우 유사한 인터페이스)
  • '''GTK (툴킷)''' (오픈 소스 (LGPL), 주로 X Window System에서 사용, 다른 플랫폼에서도 이식 또는 에뮬레이터 존재, GNOME 및 Xfce 데스크톱 환경에서 사용)
  • '''Qt''' (오픈 소스 (LGPL), Unix/Linux (X Window System), Windows, macOS, 임베디드 시스템에서 사용, 상용 버전 (QPL)도 존재, KDE에서 사용)
  • '''Tk''' (Tcl 또는 다른 스크립트 언어 (Python 등)에서 사용)
  • '''wxWidgets'''(이전 명칭은 wxWindows, 오픈 소스(느슨한 LGPL), C++, Python, Perl에서 사용 가능한 크로스 플랫폼 툴킷)
  • '''FLTK''' (오픈 소스 (LGPL), 작고 빠른 것이 특징)

참조

[1] 논문 Past, Present and Future of User Interface Software Tools https://www.cs.cmu.e[...] ACM Transactions on Computer-Human Interaction
[2] 웹사이트 Who Moved My State? http://www.ddj.com/c[...] C/C++ Users Journal, The Embedded Angle column 2003-04-01
[3] 서적 X Toolkit プログラミング 株式会社トッパン 1990-07-30
[4] 웹사이트 Cocoa (Touch) | Apple Documentation Archive https://developer.ap[...]
[5] 웹사이트 AppKit | Apple Developer Documentation https://developer.ap[...]
[6] 웹사이트 Developer - MacApp http://developer.app[...] Apple 2022-03-13
[7] 웹사이트 SwiftUIの概要 - Xcode - Apple Developer https://developer.ap[...]
[8] 웹사이트 UIKit | Apple Developer Documentation https://developer.ap[...]
[9] 웹사이트 UIKit - 日本語ドキュメント - Apple Developer https://developer.ap[...]
[10] 웹사이트 WinForms | Mono http://www.mono-proj[...]
[11] 웹사이트 レイアウト | Android デベロッパー | Android Developers https://developer.an[...]
[12] 웹사이트 Jetpack Compose | Android Developers https://developer.an[...]



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com