표준 위젯 툴킷

Standard Widget Toolkit
표준 위젯 툴킷
Eclipse SWT Windows example.png
Windows 10의 데모 어플리케이션
원저작자스티븐 노토버
개발자이클립스 재단
초기 릴리즈2003년 4월, 19년 전(2003-04)
안정된 릴리스
4.23 / 2022년 3월 8일, 5개월 전(2022-03-08)
저장소
기입처자바
운영 체제크로스 플랫폼
플랫폼자바 플랫폼
이용가능기간:다국어
유형Java 플랫폼용 위젯 툴킷
면허증.이클립스 퍼블릭
웹 사이트www.eclipse.org/swt

SWT(Standard Widget Toolkit)는 Java 플랫폼에서 사용하기 위한 그래픽 위젯 툴킷입니다.원래는 IBM의 Stephen Northover가 개발했으며 현재는 Eclipse IDE와 함께 Eclipse Foundation에서 관리하고 있습니다.이는 Java Platform, Standard Edition(J2SE)의 일부로 Sun Microsystems에서 제공하는 AWT(Abstract Window Toolkit) Swing Java Graphical User Interface(GUI) 툴킷의 대안입니다.

GUI 요소를 표시하기 위해 SWT 구현은 운영체제 고유의 Application Programming Interface(API; 응용 프로그램프로그래밍 인터페이스)를 사용하여 작성된 프로그램과 유사한 방법으로 Java Native Interface(JNI; 네이티브인터페이스)를 사용하여 운영시스템의 네이티브 GUI 라이브러리에 액세스합니다.SWT를 호출하는 프로그램은 이식 가능하지만 툴킷의 일부는 Java로 작성되어 있지만 구현은 플랫폼마다 다릅니다.

이 툴킷은 오픈 소스 [1]이니셔티브에 의해 승인된 Eclipse Public License에 따라 배포되는 무료 오픈 소스 소프트웨어입니다.

역사

최초의 Java GUI 툴킷은 Sun Microsystems의 Java 플랫폼의 컴포넌트 중 하나로 Java Development Kit(JDK) 1.0과 함께 도입된 AWT(Abstract Window Toolkit)입니다.원래의 AWT는 메뉴, 윈도, 버튼 등의 네이티브(운영체제 제공) 위젯을 중심으로 한 단순한 Java 래퍼 라이브러리였습니다.

Swing은 Sun이 Java Platform, Standard Edition(J2SE) 1.2에 도입한 차세대 GUI 툴킷입니다.Swing은 AWT보다 풍부한 GUI 소프트웨어 컴포넌트 세트를 제공하기 위해 개발되었습니다.Swing GUI 요소는 네이티브 코드가 없는 올 자바입니다.Swing은 네이티브 GUI 컴포넌트를 랩하는 대신 Java 2D를 사용하여 낮은 수준의 운영체제 그리기 루틴을 호출하여 자체 컴포넌트를 그립니다.

SWT의 뿌리는 1990년대에 OTI(Object Technology International)가 Smalltalk를 위한 멀티플랫폼, 휴대용, 네이티브 위젯 인터페이스를 만들 때 했던 으로 거슬러 올라갑니다. 원래 OTI Smalltalk는 1993년에 IBM Smalltalk가 되었습니다.IBM Smalltalk의 Common Widget 계층은 다른 GUI(Graphical User Interface) 툴킷의 일반적인 최소 공통분모 문제를 겪지 않으면서 여러 플랫폼 위젯 세트에 대한 기본 액세스를 제공했습니다.IBM은 Smalltalk로 작성된 통합 개발 환경(IDE)인 VisualAge를 개발하고 있었습니다.그들은 마이크로소프트 비주얼 스튜디오와 같은 다른 IDE와 경쟁하기 위해 이클립스를 개발하게 된 프로젝트를 오픈 소스로 결정하였습니다.Eclipse는 Java로 작성되었으며, IBM 개발자들은 "네이티브 필"과 "네이티브 성능"을 갖춘 툴킷이 필요하다고 판단하여 SWT를 [2]Swing 대체품으로 만들었습니다.

설계.

Linux에서의 데모 어플리케이션

SWT는 GTK 오브젝트, Motif 오브젝트 등 네이티브코드 오브젝트를 둘러싼 래퍼입니다.이 때문에 SWT 위젯은 종종 "heavyweight"라고[by whom?] 불리며 "heavy" 네이티브 객체 주위에 가벼운 Java 래퍼의 이미지를 떠올리게 합니다.네이티브 플랫폼 GUI 라이브러리가 SWT에 필요한 기능을 지원하지 않는 경우 SWT는 Swing과 마찬가지로 자체 GUI 코드를 Java로 구현합니다.본질적으로 SWT는 AWT의 낮은 수준의 성능과 룩앤필과 [3][4]Swing의 높은 수준의 사용 편의성을 절충한 것입니다.

Eclipse Foundation에 따르면, "SWT와 Swing은 다른 목표를 염두에 두고 만들어진 다른 도구입니다.SWT의 목적은 다양한 플랫폼에서 네이티브 위젯에 액세스하기 위한 공통 API를 제공하는 것입니다.주요 설계 목표는 고성능, 네이티브 룩앤필, 긴밀한 플랫폼 통합입니다.반면 Swing은 모든 [5]플랫폼에서 공통적으로 매우 커스터마이즈 가능한 외관과 느낌을 구현하도록 설계되었습니다."

SWT는 디자인 패턴의 유명[6]에리히 감마(Erich Gamma)에서 영감을 받아 깔끔한 디자인을 특징으로 한다는 주장이[by whom?] 있다.

SWT는 Swing보다 심플한 툴킷으로 일반 [7]개발자에게 불필요한 기능이 적습니다.이 때문에 SWT는 [8]스윙에 비해 기능이 부족하다는 지적이[who?] 나오고 있다.

Java 언어를 만든 James Gosling은 SWT가 너무 단순하고 새로운 플랫폼에 이식하기 어려운 툴킷이라고 주장했습니다.이는 한때 AWT가 포팅에 문제가 있었던 것과 같은 이유에서입니다.그 이유는 SWT가 너무 단순하고 저레벨이며 Win32 GUI API와 연계되어 있기 때문에 SWT API를 다른 GUI나 툴에 적응시키는 데 문제가 발생하기 때문입니다.Kit 등입니다.X [7]카본

SWT는 Swing 및 기타 많은 고급 GUI 툴킷에서 사용되는 인기 모델 컨트롤러(MVC) 아키텍처를 구현하지 않지만, 동일한 Eclipse 프로젝트의 일부로 개발된 JFace 라이브러리는 SWT 위에 크로스 플랫폼, 상위 레벨의 MVC 추상화를 제공합니다.개발자는 JFace를 사용하여 트리, 테이블 및 목록과 같은 복잡한 SWT 제어에 대해 보다 유연하고 추상적인 데이터 모델을 제공하거나 필요에 따라 이러한 제어에 직접 액세스할 수 있습니다.

룩앤필

MacOS에서 동일한 데모 애플리케이션

SWT 위젯은 종종 동일한 기본 위젯이기 때문에 기본 위젯과 모양과 느낌이 동일합니다.이는 모든 위젯이 네이티브 위젯의 에뮬레이션인 Swing 툴킷과는 대조적입니다.경우에 따라 차이가 구별될 수 있습니다.예를 들어, macOS 트리 위젯은 트리가 확장되고 기본 버튼이 실제로 애니메이션으로 펄싱하는 빛을 띠어 사용자의 주의를 집중시킬 때 미묘한 애니메이션을 제공합니다.이러한 위젯의 기본 스윙 버전은 애니메이션화되지 않습니다.

SWT는 네이티브 GUI 코드에 대한 래퍼일 뿐이므로 네이티브 코드를 변경할 때 다수의 업데이트가 필요하지 않습니다.단, 운영체제 벤더는 운영체제 업데이트 시 클라이언트 API를 손상시키지 않도록 주의할 필요가 있습니다.실행 중인 어플리케이션의 모양과 느낌을 '플러그 가능한 모양과 느낌'으로 바꾸는 기능을 지원하는 Swing도 마찬가지입니다.이를 통해 테마를 사용하여 네이티브 플랫폼 사용자 인터페이스를 에뮬레이트할 수 있습니다.테마나 기타 룩앤필 업데이트 등의 운영체제 GUI 변경을 반영하기 위해 업데이트해야 합니다.

SWT는 "심층적인 플랫폼 통합"을 목표로 합니다. 이클립스는 SWT의 네이티브 위젯 사용에 대한 참조입니다.developer.com의 Mauro Marinillia에 따르면, "원어민 플랫폼과의 긴밀한 통합이 필요한 경우 SWT는 플러스가 될 수 있습니다."[9]이러한 긴밀한 통합은 Microsoft Windows에서 SWT가 ActiveX 개체를 래핑할 수 있도록 하는 등 여러 가지 면에서 유용합니다.

프로그래밍

GTK 환경에서 동작하는 SWT를 사용한 심플한 GUI 애플리케이션

다음은 SWT를 이용한 기본적인 Hello World 프로그램입니다.창(Shell)과 라벨이 표시됩니다.

수입품 org.disc.swt.를 참조해 주세요.*; 수입품 org.disc.swt.를 참조해 주세요.위젯을 사용합니다.*;  일반의 학급 안녕 세계 {    일반의 정적인 무효 주된 (스트링[] args)    {       표시 표시 = 신규 표시();       껍데기 껍데기 = 신규 껍데기(표시);       라벨. 라벨. = 신규 라벨.(껍데기, 소프트웨어.없음.);       라벨..setText('헬로 월드');       라벨..포장하다();       껍데기.포장하다();       껍데기.열다.();       하는 동안에 (!껍데기.표시됨())       {          한다면 (!표시.Read And Dispatch(읽기 & 디스패치)()) 표시.수면.();       }       표시.처분하다();    } } 

Swing과는 달리 Display 클래스는 기본 운영 체제에 액세스하기 위해 필요하며, 리소스를 더 이상 사용하지 않을 때는 명시적으로 폐기해야 합니다.

플랫폼 지원

SWT를 사용하는 BitTorrent 클라이언트 Vuze

지원이 필요한 모든 새로운 GUI 라이브러리에 SWT를 이식해야 합니다.Swing이나 AWT와는 달리 SWT는 Java 릴리스에 포함되지 않기 때문에 Java 지원 플랫폼에서는 사용할 수 없습니다.또, Windows 이외의 플랫폼에서는 SWT의 퍼포먼스가 현저하게 [8]저하하고 있다는 증거도 있습니다.SWT는 플랫폼마다 다른 네이티브 라이브러리를 사용하기 때문에 SWT 프로그램은 플랫폼 고유의 버그에 노출될 수 있습니다.

SWT는 Swing보다 더 낮은 수준의 디테일에 프로그램을 노출시킵니다.이는 SWT가 기술적으로 네이티브 라이브러리 상의 레이어일 뿐 GUI 기능에 의해 프로그래머가 네이티브 GUI 코드에 노출되는 것은 SWT의 설계 목적의 일부이기 때문입니다.그 목적은 풍부한 사용자 인터페이스 설계 프레임워크를 제공하는 것이 아니라 가장 얇은 사용자 인터페이스 API를 제공하는 것입니다.풍부한 그래피컬 유저 인터페이스([10]GUI) 애플리케이션을 구축하기에 충분한 기능을 제공하면서도 플랫폼 세트를 제공합니다."

SWT 실장은 플랫폼마다 다르기 때문에 플랫폼 고유의 SWT 라이브러리(JAR 파일)를 각 애플리케이션과 함께 배포해야 합니다.

2018년 현재 SWT는 다음 플랫폼 및/또는 GUI [11]라이브러리를 지원합니다.

2018년 3월 현재 SWT 4.7.3a(및 4.8M6)는 다음 운영 체제(명시적으로 필요한 경우 그래픽 라이브러리 또는 유사한 프로세서)[13]와 공식적으로 호환됩니다.

  • Microsoft Windows (x86 및 x86_64)
  • Linux (GTK/PPC64 및 PPC64)LE)
  • macOS(Cocoa/x86_64)
Windows XP에서의 응용 프로그램 예시

Windows XP는 지금까지 지원되고 있습니다.이전 버전은 공식적으로 s390, Solaris 11(SPARCv9), Solaris 10(x86_64), HP-UX(ia64), AIX(PPC 및 PPC64)[14]를 지원했습니다.

성능

SWT는 고성능 GUI 툴킷으로 설계되어 [15]Swing보다 시스템 리소스 사용률이 빠르고 응답성이 높으며 가볍습니다.

SWT와 Swing에 대한 벤치마킹 시도가 있었습니다.SWT는 Swing보다 효율이 높아야 한다는 결론을 내렸습니다.단, 이 사례에서 벤치마킹된 애플리케이션은 모든 가능한 SWT 또는 Swing [16]사용에 대해 확실한 결론을 도출하기에는 충분히 복잡하지 않았습니다.꽤 철저한 벤치마크에 따르면 Swing과 SWT 어느 쪽도 일반적인 [17]케이스에서 다른 쪽보다 확실히 뛰어난 성능을 발휘하지 못했다.

다른 Java 코드와의 확장성 및 비교

네이티브 코드를 사용하기 때문에 SWT 클래스는 모든 위젯 클래스에 대한 쉬운 상속을 허용하지 않으며, 일부 사용자는 이것이 [9]확장성을 해칠 수 있다고 간주합니다.따라서 SWT에서는 [18]Swing을 사용하는 경우보다 기존 위젯을 커스터마이즈하기가 더 어려울 수 있습니다.두 툴킷 모두 Java 코드만을 사용하여 새로운 위젯을 작성할 수 있지만 SWT에서는 새로운 위젯을 [18]모든 플랫폼에서 작동시키려면 추가 작업이 필요합니다.

SWT 위젯은 다른 대부분의 Java 툴킷과 달리 자동 가비지 수집의 표준 Java 관행과 달리 수동 개체 할당 해제가 필요합니다.SWT 오브젝트의 할당을 명시적으로 해제하려면disposeC언어와 유사한 방법free그렇지 않으면 메모리 누전이나 기타 의도하지 않은 동작이 발생할 수 있습니다.[19]이에 대해 일부에서는 "자원 할당을 명시적으로 해제하는 것은 적어도 평균적인 자바 개발자에게 개발 시간(및 비용)을 한 걸음 후퇴시키는 것일 수 있다"며 "이는 복합적인 축복"이라고 평하고 있습니다.Swing을 [9]사용할 때 자동화(및 속도 저하)를 높이는 대신 SWT 개발자가 제어(및 복잡성)를 높일 수 있다는 것을 의미합니다.SWT를 사용할 때 수동 객체 할당 해제가 필요한 것은 주로 SWT가 네이티브 객체를 사용했기 때문입니다.이러한 개체는 Java JVM에 의해 추적되지 않기 때문에 Java JVM은 이러한 개체의 사용 여부를 추적할 수 없으므로 적절한 시간에 가비지를 수집할 수 없습니다.

실제로 프로그램에서 명시적으로 폐기해야 하는 SWT 오브젝트는 이미지, 컬러,[citation needed] 폰트 오브젝트 등 자원의 서브클래스뿐입니다.

발전

Swing과 SWT의 결합을 가능하게 하는 개발 활동이 있습니다.다음의 2개의 다른 어프로치가 시도되고 있습니다.

  • SwingWT는 대체 Swing 구현을 제공하기 위한 프로젝트다.SWT 백엔드를 사용하여 위젯을 표시하므로 [20]Swing과 동일한 프로그래밍 모델과 함께 SWT의 네이티브 룩앤필과 퍼포먼스 장점을 제공합니다.
  • SWTSwing은 SWT용 스윙 백엔드를 제공하는 프로젝트입니다.실제로 SWT는 GTK나 Windows 네이티브오브젝트 대신 Swing 네이티브오브젝트를 사용하여 실행할 수 있습니다.이를 통해 SWT는 Swing이 [21]지원하는 모든 플랫폼에서 작동할 수 있습니다.

2006년부터 DWT라고 [22]불리는 프로그래밍 언어 D에 대한 SWT-3.2 포트가 있었습니다.이후 프로젝트는 SWT-3.4용 윈도우즈 32비트 및 리눅스 GTK 32비트를 지원합니다.또한 DWT 프로젝트에는 JFace 및 Eclipse [23]Forms 포트를 포함하는 추가 패키지도 있습니다.

JavaFXJava SE 플랫폼의 일부가 되면서 SWTSwing이 Swing에 의존하는 것과 유사한 방식으로 JavaFX에 의존하는 SWT용 백엔드를 개발하는 데 관심이 있었습니다.이를 위해 노력한 대표적인 프로젝트는 2014년에 [24]e(fx)clipse의 일부가 된 JavaFX의 SWT입니다.

사용하다

SWT 를 사용하는 애플리케이션(알파벳 정렬)에는, 다음과 같은 것이 있습니다.

최근 이클립스 커뮤니티의 오픈 소스 대처로 인해 SWT(및 JFace)가 웹에 적합한 위젯 툴킷으로 이식되었습니다.그 결과, Eclipse Remote Application Platform(RAP)은 qooxdoo Ajax 라이브러리를 SWT API와 결합했습니다.다른 Java Ajax 프로젝트(Echo2, Vaadin, Google Web Toolkit 등)와 마찬가지로 SWT API를 사용하면 데스크톱과 거의 동일한 방식으로 웹용 애플리케이션을 빠르게 개발할 수 있습니다.

「 」를 참조해 주세요.

메모들

  1. ^ Open Source Initiative. "Licenses By Name". Retrieved 2007-03-24.
  2. ^ "FAQ: Why does Eclipse use SWT?". Retrieved 2007-03-24.
  3. ^ Steve Northover. "SWT: Implementation Strategy for Java Natives". Retrieved 2001-03-22.
  4. ^ Carolyn MacLeod & Steve Northover. "SWT: Managing Operating System Resources". Retrieved 2001-11-27.
  5. ^ "FAQ: Is SWT better than Swing?". Retrieved 2008-02-16.
  6. ^ Ben Galbraith. "An Introduction to SWT". Retrieved 2007-03-24.
  7. ^ a b Ella Morton. "James Gosling Q & A". Archived from the original on 2006-08-30. Retrieved 2007-03-24.
  8. ^ a b "Performance Benchmarks of Nine Languages". Retrieved 2007-03-24.
  9. ^ a b c Marinilli, Mauro. "Swing and SWT: A Tale of Two Java GUI Libraries". Retrieved 2006-11-07.
  10. ^ "FAQ What is SWT". Eclipsepedia. eclipse.org. Retrieved 2009-10-16.
  11. ^ "4.8M6 - Eclipse Project Downloads". download.eclipse.org. Retrieved 2018-05-01.
  12. ^ "Platform UI/Testing - Eclipsepedia". wiki.eclipse.org. Retrieved 2018-05-01.
  13. ^ "4.7.3a - Eclipse Project Downloads". download.eclipse.org. Archived from the original on 2018-04-16.
  14. ^ "4.6.3 - Eclipse Project Downloads". archive.eclipse.org. Retrieved 2018-05-01.
  15. ^ Akan, Ozgur (November 19, 2004). "Why I choose SWT against Swing". Archived from the original on December 31, 2006. Retrieved 2006-11-07.
  16. ^ 를 클릭합니다"Swing vs. SWT Performance – Have a Look at the Call Stacks". Javalobby.org. 2006-03-03. Retrieved 2009-10-16..
  17. ^ 이고르, Križnar(2005-05-10)."SWT 대 성능 비교 Swing"(PDF).cosylab.com.2008-07-04에 있는 원본(PDF)에서 Archived.2008-05-24 Retrieved.그것은 SWT 또는 그 반대로 스윙을 능가할 것 주먹 구구로 포기하기 어렵다.일부 환경(예:Windows)에서 SWT는 성공작이다.다른 곳에서는 Swing과 그 redraw 최적화보다 SWT 크게(리눅스, VM웨어 Windows를 개최하는).성능에서의 차이는:2과 더 많은 요인, 양쪽 방향으로 흔하다 중요합니다.
  18. ^ a b "Creating Your Own Widgets using SWT". eclipse.org. 2007-03-22. Retrieved 2008-12-13. Subclassing may cause bad system-level bugs, and runs the risk of leaking resources(...)Subclassing Canvas or Composite is the best way to ensure that your widget works on all SWT platforms(...)When subclassing anything other than Composite or Canvas you must override the method protected void checkSubclass() to do nothing
  19. ^ Java 개발자는 Eclipse, 2판, 페이지 359에 대해 설명합니다.
  20. ^ "SwingWT – The Swing/AWT API over SWT library". Swingwt.sourceforge.net. Retrieved 2009-10-16.
  21. ^ "The SWTSwing project". Swtswing.sourceforge.net. Retrieved 2009-10-16.
  22. ^ "DWT – Port of SWT and friends to the D programming language". Dsource.org. Retrieved 2009-10-16.
  23. ^ "Eclipse Forms". Eclipse.org. 2005-01-16. Retrieved 2009-10-16.
  24. ^ "SWT on JavaFX is now at part of e(fx)clipse". 13 March 2014.
  25. ^ "3T MongoChef is now Studio 3T". 8 February 2017.

레퍼런스

외부 링크