Swing과 AWT의 차이점은 무엇입니까?


답변:


235

AWT는 OS에있는 기본 시스템 GUI 코드에 대한 Java 인터페이스입니다. 모든 시스템에서 동일하게 작동하지는 않지만 시도합니다.

Swing은 다소 순수한 Java GUI입니다. AWT를 사용하여 운영 체제 창을 만든 다음 단추, 레이블, 텍스트, 확인란 등의 그림을 해당 창에 페인트하고 모든 마우스 클릭, 키 입력 등에 응답하여 수행 할 작업을 결정합니다. 운영 체제가 처리하도록하는 대신 따라서 Swing은 100 % 이식 가능하며 플랫폼 전체에서 동일합니다 (스키닝 가능하고 "플러그 가능한 모양과 느낌"이있어 기본 창과 위젯의 모양과 다소 비슷하게 보일 수 있습니다).

GUI 툴킷에 대한 접근 방식은 크게 다르며 많은 결과를 초래합니다. 귀하의 질문에 대한 완전한 대답은 그 모든 것을 탐구하려고 시도 할 것입니다. :) 여기 몇 가지 있습니다 :

AWT는 플랫폼 간 인터페이스이므로 기본 OS 또는 기본 GUI 툴킷을 기능으로 사용하더라도 해당 툴킷으로 수행 할 수있는 모든 것에 대한 액세스를 제공하지는 않습니다. 한 플랫폼에 존재할 수있는 고급 또는 최신 AWT 위젯은 다른 플랫폼에서 지원되지 않을 수 있습니다. 모든 플랫폼에서 동일하지 않은 위젯의 기능은 지원되지 않거나 악화 될 수 있으며 각 플랫폼에서 다르게 작동 할 수 있습니다. 사람들은 AWT 애플리케이션이 여러 플랫폼에서 일관되게 작동하도록 많은 노력을 기울였습니다. 예를 들어 Java에서 네이티브 코드를 호출하려고 할 수 있습니다.

AWT는 기본 GUI 위젯을 사용하므로 OS는 위젯을 알고이를 서로 앞에 놓는 등을 처리하는 반면, 스윙 위젯은 OS 관점에서 볼 때 의미없는 픽셀입니다. Swing 자체는 위젯의 레이아웃과 스태킹을 처리합니다. AWT와 Swing을 혼합하는 것은 매우 지원되지 않으며 Swing으로 만든 다른 모든 것들이 있기 때문에 대화 상자에있는 다른 모든 것을 모호하게하는 기본 버튼과 같은 우스운 결과를 초래할 수 있습니다.

Swing은 기본 GUI 창에서 제공하는 매우 원시적 인 그래픽 루틴 이외의 다른 모든 작업을 Java에서 시도하기 때문에 AWT와 비교했을 때 상당한 성능 저하가 발생했습니다. 이로 인해 불행하게도 Swing을 따라 잡을 수 없었습니다. 그러나 이것은 더 최적화 된 JVM, 더 빠른 머신 및 Swing 내부의 (가정) 최적화로 인해 지난 몇 년 동안 크게 줄었습니다. 오늘날 Swing 응용 프로그램은 서비스 가능하거나 까다로울 정도로 빠르게 실행될 수 있으며 기본 위젯을 사용하는 응용 프로그램과 거의 구별 할 수 없습니다. 어떤 사람들은이 시점에 도달하는 데 너무 오래 걸렸다 고 말하지만 대부분은 그만한 가치가 있다고 말할 것입니다.

마지막으로, SWT (Eclipse에 사용되는 GUI 툴킷 및 AWT 및 Swing의 대안)를 확인하고 싶을 수도 있습니다. 이는 Java를 통해 기본 위젯에 액세스한다는 AWT 아이디어로 다소 되돌아갑니다.


음 ... 여러 플랫폼에서 상당히 광범위한 Swing을 수행 한 결과 플랫폼에서 그다지 동일하지 않다는 것을 알 수 있습니다. 비슷한? 확실한. 같은? 절대 안돼.
cletus 2018 년

1
헤비급 / 건전성 문제는 Java 6 업데이트 12에서 사라집니다 ( java.dzone.com/news/a-farewell-heavyweightlightwei 참조 ).
Dan Dyer

와. 나는 그들이 그것을 고칠 수 있다고 믿을 수 없으며 여전히 가볍고 무거운 구성 요소를 혼합하는 것이 바람직하다고 믿을 수 없습니다. 그러나 그들이 고칠 수 있다는 것은 놀라운 일입니다.
skiphoppy

둘 다 잊어 버려 WPF를 살펴보십시오. :)
Alper Ozcetin 2009

3
다음은 혼합이 수정되었음을 확인하는 공식 Java 기사입니다. oracle.com/technetwork/articles/java/…
user193130

35

이미 모든 사람들이 언급 한 기본 차이는 하나는 무겁고 다른 하나는 가벼운 것 입니다. 기본적으로 무거운 중량이라는 용어의 의미는 awt 구성 요소를 사용할 때 뷰 구성 요소를 얻는 데 사용되는 기본 코드 가 운영 체제에 의해 생성되므로 OS에서 OS로 모양과 느낌이 바뀌는 이유 입니다. 스윙 컴포넌트에서 컴포넌트 의 뷰를 생성하는 것은 JVM 의 책임입니다 . 내가 본 또 다른 진술은 스윙은 MVC 기반이며 awt는 아닙니다.


14
실제로 Swing은 MVC 방식에서 파생 된 Model-Delegate 방식을 사용합니다. MVC 방식에서 View와 Controller가 델리게이트 구조를 위해 결합되었습니다
Purushottam

15

스윙 대 AWT . 기본적으로 AWT가 가장 먼저 나타 났으며 헤비급 UI 구성 요소 세트 (운영체제 객체의 래퍼임을 의미 함) 인 반면, Swing은 더 가벼운 구성 요소 세트로 AWT 위에 구축되었습니다.

심각한 Java UI 작업은 주로 애플릿에 사용 된 AWT가 아닌 Swing에서 수행됩니다.


1
awt가 더 유용하고 사용하는 것이 권장되는 경우가 있습니까?
Samiksha

1
10 년 전과 관련이있었습니다.
bart

@Pacerier 그는 SWT가 아니라 AWT에 대해 이야기했습니다

11

AWT가 Swing보다 더 유용한 경우

  • Swing을 지원하지 않는 이전 JVM 또는 플랫폼을 대상으로 할 수 있습니다. 애플릿을 만들 때 실제로 사용되었습니다. 최소 공통 분모를 목표로 삼아 사람들이 최신 Java 플러그인을 설치할 필요가 없었습니다. 현재 가장 널리 설치된 Java 플러그인 버전이 무엇인지 잘 모르겠습니다. 오늘과 다를 수 있습니다.
  • 어떤 사람들은 Swing의 '정확하지 않은'플랫폼 스킨보다 AWT의 기본 모양을 선호합니다. (Swing의 구현 BTW보다 타사의 기본 스킨이 더 좋습니다.) 많은 사람들이 Swing의 FileChooser보다 AWT의 FileDialog를 선호합니다. 왜냐하면 대부분의 사람들이 '이상한'사용자 정의 Swing 것보다는 플랫폼 파일 대화 상자를 제공했기 때문입니다.

2
그러나 마지막으로 Windows 파일 대화 상자와 비슷하지만 자동 완성 기능이없는 FileChooser를 만들 수도 있습니다. stackoverflow.com/q/17630055/2534090
JavaTechnical

9

AWT와 Swing의 차이로 인해 몇 가지 결과가 발생합니다.

AWT는 OS 위에있는 얇은 코드 레이어 인 반면 Swing은 훨씬 더 큽니다. Swing에는 또한 훨씬 더 풍부한 기능이 있습니다. AWT를 사용하면 Swing에 내장되어있는 동안 많은 것을 직접 구현해야합니다. GUI를 많이 사용하는 작업의 경우 AWT는 Swing과 비교하여 작업하는 것이 매우 원시적이라고 생각합니다. Swing은 호스트 OS에 의존하지 않고 GUI 기능 자체를 구현하기 때문에 Java가 실행되는 모든 플랫폼에서보다 풍부한 환경을 제공 할 수 있습니다. 모든 플랫폼이 동일한 방식으로 동일한 모양의 컨트롤을 구현하는 것은 아니기 때문에 AWT는 모든 플랫폼에서 동일한 기능을 제공하는 데 더 제한적입니다.

Swing 구성 요소는 기능을 구현하기 위해 기본 OS 개체가 필요하지 않기 때문에 "경량"이라고합니다. JDialog그리고 JFrame그들이 피어를 할 수 있기 때문에, 헤비급이다. 구성 요소가 같은 JButton, JTextArea그들이 OS 피어가 없기 때문에, 등, 경량입니다.

피어는 그러한 버튼 객체 또는 입력 필드 오브젝트로서 운영체제에 의해 제공되는 위젯이다.


7

그네:

  1. Swing은 Java 기초 클래스의 일부입니다.
  2. 스윙 구성 요소는 플랫폼 독립적입니다.
  3. 스윙 구성 요소는 경량 구성 요소입니다. 스윙은 awt 상단에 위치하기 때문입니다.

AWT :

  1. AWT를 추상 창 도구라고합니다.
  2. AWT 구성 요소는 플랫폼에 따라 다릅니다.
  3. AWT 구성 요소는 중량 구성 요소입니다.

5
  • 스윙 구성 요소는 모델 뷰 컨트롤러 (mvc)를 따르기 때문에 훨씬 유연한 사용자 인터페이스를 제공합니다.
  • awt는 mvc 기반이 아닙니다.
  • 스윙이 더 빨리 작동합니다.
  • awt가 더 빨리 작동하지 않습니다.
  • 스윙 부품은 경량입니다.
  • awt 성분은 중량이 무겁습니다.
  • 스윙은 적은 메모리 공간을 차지합니다.
  • awt는 더 많은 메모리 공간을 차지합니다.
  • 스윙 컴포넌트는 플랫폼에 독립적입니다.
  • awt는 플랫폼에 따라 다릅니다.
  • swing에는 javax.swing 패키지가 필요합니다.
  • awt에는 javax.awt 패키지가 필요합니다.

10
AWT는 이미 OS에있는 네이티브 코드 (gui 코드)를 사용하지만 스윙은 처음부터 모든 구성 요소를 빌드하기 때문에 스윙이 AWT보다 빠르게 작동한다고 생각하지 않습니다. 따라서 AWT가 더 빠를 수 있습니다. 스윙이 더 빨리 작동 한다고 말하는 당신의 관점은 무엇 입니까? 감사.
JavaTechnical

3

AWT 1. AWT는 더 많은 메모리 공간을 차지합니다 2. AWT는 플랫폼에 따라 다릅니다 3. AWT에는 javax.awt 패키지가 필요합니다

그네 1. 스윙은 적은 메모리 공간을 차지합니다 2. 스윙 구성 요소는 플랫폼 독립적입니다 3. Swing에는 javax.swing 패키지가 필요합니다


1
AWT가 더 많은 메모리 공간을 차지하는 방법을 알려주시겠습니까? 네이티브 코드를 사용하기 때문에?
JavaTechnical

AWT는 java.awt의가 필요합니다. *
abhisekp
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.