1. AWT와 Swing의 차이
1> Swing의 등장배경
AWT는 사용하기에는 쉽지만 어느정도 한계가 있다. 가령 버튼에 롤오버 이미지를 사용한다던지 풍선말 기능 등 실제로 많이 사용하는 기능들을 AWT로 구현하기란 쉽지가 않다. 또한 운영체제마다 매우 다른 GUI 구현 방식 때문에 AWT의 컴포넌트를 사용함에 있어서 많은 버그가 발견되고 있다. 즉 AWT는 모든 컴포넌트를 운영체제의 자원을 사용한다. 따라서 각기 다른 운영체제에서는 문제가 발생할 수 밖에 없다. 이런 이유 때문에 나온 것이 Swing 이다. Swing은 Top-Level 컨테이너만을 운영체제의 자원을 사용할 뿐 그 하부에 있는 모든 컴포넌트는 직접 자바 코드에 의해 그리는 방식을 가지고 있다.
1> AWT와 Swing의 차이
AWT |
Swing | |
사용 구조 |
Heavy-weight Componet |
Light-weight Componet |
지원 패키지 | java.awt.*; | javax.swing.*; |
장점 |
- 컴포넌트를 추상화함으로써 각 운영체제에서 구현하는것이 편하다. |
-운영체제의 자원을 빌리지 않고 직접 화면에 그리므로 이질적인 운영체제간에 발생한 버그를 자동적으로 해결 |
단점 |
- 운영체제에 따른 미묘한 버그 발생 |
- 실행 속도가 느려진다. 실행시 메모리를 많이 차지함 --> JDK1.4 부터 보완됨, |
http://www.javastudy.co.kr/docs/getjava/swing/1-awtswing.htm
AWT, SWT, Swing 라이브러리의 다양한 특징들을 비교했다.
표 1. AWT, SWT, Swing 비교
기능/역할/양상 | AWT | Swing | SWT (style) |
---|---|---|---|
정적 텍스트 디스플레이 | Label | JLabel | Label, CLabel |
멀티 라인 정적 텍스트 디스플레이 | Multiple Labels | Multiple JLabels 또는 JLabel과 HTML content | Multiple Labels 또는 Label과 newlines |
멀티 라인 포맷의 정적 텍스트의 디스플레이 | Multiple Labels와 다양한 폰트 | JLabel과 HTML content | Multiple Labels와 다양한 폰트 |
싱글 라인 텍스트 엔트리 | TextField | JTextField | Text(SWT.SINGLE) |
멀티 라인 텍스트 엔트리 | TextArea | JTextArea | Text(SWT.MULTI) |
이미지 디스플레이 | N/A | JLabel | Label |
텍스트와 이미지 디스플레이 | N/A | JLabel | CLabel |
ToolTip 팝업 도움말 | N/A | setToolTip on component, subclass JToolTip | setToolTip on control |
텍스트 엔트리 스타일링 | N/A | JEditorPane | StyledText |
아이템 리스트 선택하기 | List | JList | List |
푸쉬 버튼과 텍스트 | Button | JButton | Button(SWT.PUSH) |
푸쉬 버튼, 텍스트/이미지 | N/A | JButton | Button(SWT.PUSH) |
그리기 영역 | Canvas | JPanel | Canvas |
On/off 체크박스 | CheckBox | JCheckBox | Button(SWT.CHECK) |
라디오 선택 | CheckBoxGroup | ButtonGroup과 메뉴 | Group과 메뉴 |
드롭다운 리스트 선택 | Choice | JComboBox | Combo, CCombo |
텍스트 입력하기 또는 드롭다운 리스트에서 선택하기 | N/A | JComboBox | Combo, CCombo |
스크롤 영역 | ScrollPane | JScrollPane | Create Scrollable subclass |
탑 레벨 윈도우 | Dialog, Frame, Window | JDialog, JFrame, JWindow | Shell과 different styles |
기본 윈도우 | Window | JWindow | Shell |
프레임 윈도우 | Frame | JFrame | Shell(SWT.SHELL_TRIM) |
다이얼로그 윈도우 | Dialog | JDialog | Shell(SWT.DIALOG_TRIM) |
메뉴 | Menu | JMenu | Menu |
MenuItem | MenuItem | JMenuItem | MenuItem |
메뉴 단축 | 키 스트로크 | AWT와 동일 | host dependent mnemonics과 accelerators |
팝업 메뉴 | PopupMenu | JPopupMenu | Menu(SWT.POPUP) |
메뉴 바 | MenuBar | JMenuBar | Menu(SWT.BAR) |
삽입 기호 디스플레이 | N/A | Caret | Caret |
웹 브라우저 | N/A | JTextPane (HTML 3.2) | Browser (임베디드 브라우저) |
웹 페이지에 컨트롤 삽입하기 | Applet | JApplet | Host control (ex. OLE) |
기타 컨트롤의 컨테이너 | Panel | JPanel | Composite |
기타 컨트롤과 보더의 컨테이너 | Panel (직접 그릴 경우) | JPanel과 Border | Composite(SWT.BORDER) |
기타 컨트롤과 보더와 타이틀의 컨테이너 | N/A | JPanel과 TitledBorder | Group |
라디오 버튼 | Checkbox | JRadioButton | Button(SWT.RADIO) |
라디오 버튼의 확장 제어 | CheckboxGroup | RadioButtonGroup | Group |
화살표 버튼 | N/A | JButton과 image | Button(SWT.ARROW) |
국제 텍스트 지원 | via ComponentOrientation | AWT와 동일 | 많은 컴포넌트들이 지원하고 있음 |
포커스 트래버스 | Policy와 Manager objects | AWT와 동일 | Next on control |
커스텀 다이얼로그 | Dialog subclass | JDialog subclass | Dialog subclass |
시스템 이벤트로의 액세스 | EventQueue services | AWT와 동일 | Display services (AWT 보다 덜함) |
시스템 액세스 다이얼로그 | FileDialog | JColorChooser, JFileChooser | ColorDialog, DirectoryDialog, FileDialog, FontDialog, PrintDialog |
간단한 메시지 다이얼로그 디스플레이 | N/A (Dialog 분류 필수) | JOptionPane static methods | MessageBox와 다양한 스타일 |
프롬프트 다이얼로그 디스플레이 | N/A (Dialog 분류 필수) | JOptionPane static methods | N/A (JFace에는 존재하지 않음) |
레이아웃 매니저 | BorderLayout, CardLayout, FlowLayout, GridLayout, GridBagLayout | AWT plus BoxLayout, CenterLayout, SpringLayout | FillLayout, FormLayout, GridLayout, RowLayout, StackLayout |
기본 그리기 제어 | Canvas | JPanel | Canvas |
기본 그리기 | Graphics와 Graphics2D 객체 – 기본 모양과 텍스트, 임의의 Shapes와 Strokes, Bezier, 파일 등 | AWT와 동일 | GC object – 기본 모양과 텍스트 |
그리기 변형 | Affine, composites | AWT와 동일 | N/A |
오프 스크린 그리기 | BufferedImage, drawImage | AWT와 동일 | Image, drawImage |
더블 버퍼링 | 수동 | 자동/수동 | 호스트 컨트롤이 없을 경우 수동 |
프린팅 | PrintJob과 PrintGraphics | AWT와 동일 | Printer 장치 |
커스텀 컬러 | Color | AWT와 동일 | Color |
커스텀 폰트 | Font, FontMetrics | AWT와 동일 | Font |
커서 선택 | Cursor | AWT와 동일 | Cursor |
이미지 기능 | load from file, create dynamically, extensive edits | AWT와 동일 | load from file, create dynamically, basic edits |
인풋 자동화 | Robot | AWT와 동일 | N/A |
툴바 디스플레이 | N/A | JToolBar | ToolBar, CoolBar |
프로그레스 바 디스플레이 | N/A | JProgressBar | ProgressBar |
영역 간 공간 분리 | N/A | JSplitPane | Sash 또는 SashForm |
탭 영역 디스플레이 | N/A | JTabbedPane | TabFolder, CTabFolder |
테이블 형태 정보 디스플레이 | N/A | JTable | Table |
테이블 칼럼 포맷 | N/A | TableColumn | TableColumn |
계층적 정보 디스플레이 | N/A | JTree | Tree |
값 범위에서 선택하기 | N/A | JSlider | Slider |
분리된 값의 범위에서 선택하기 | N/A | JSpinner | Scale |
베이스 디스플레이로 액세스 하기 | Toolkit, GraphicsConfiguration, GraphicsDevice | AWT와 동일 | Display |
시스템 트레이에 아이템 추가하기 | N/A | N/A | Tray |
SWT Swing AWT 툴킷을 비교해 보았다. 이 글이 자신에게 맞는 GUI 툴을 선택하는데 도움이 되었기 바란다.
대부분의 경우 Swing과 JFace와 결합한 SWT를 선택한다. 일반적으로 이들 툴킷들은 완벽한 기능을 갖춘 GUI를 구현하기에 충분하다. 하지만 Swing은 SWT 단독(JFace 없음)보다 우수하다. Swing은 자바에 구현된다는 장점이 있다. 완벽히 이식 가능하고 아키텍처도 뛰어나다. Swing은 또한 고급 그래픽 애플리케이션도 갖추고 있다. SWT는 SWT 기반 GUI의 퍼포먼스와 원시 호환성을 높이는 애플리케이션으로서 구현된다는 장점이 있다.
한 개의 플랫폼만을 위해 개발하고 있다면 호스트 호환성 측면에서는 SWT가 낫다. ActiveX 컨트롤 같은 호스트 기능과도 통합된다.
자바를 이용해서 데스크탑 애플리케이션을 개발하는 경우 SWT를 이용해서 구현할 것인가? Swing을 이용한 것인가?
SWT가 네이티브(native) UI를 제공하는 것이 목적이라면, Swing은 플랫폼에 독립적인(동일한) UI를 제공하기 위해서 만들어졌습니다. (UI 관점에서...)
물론 SWT 역시 플랫폼 독립적인 API를 제공합니다. SWT는 일종의 네이티브 API의 랩퍼(wrapper) 역할을 하고 있습니다. 그러므로 플래폼 별로 소스 코드가 동일하다는 것을 의미입니다. (아직 확인해보지 않았습니다)
SWT은 그 구조가 단순하기 때문에 Swing과 비교해서 상대적으로 이용 진입 장벽이 낮다고 볼 수 있습니다. 그러나 SWT에서 사용된 자원들은 garbage colleting되지 않기 때문에 명시적으로 de-allocating해야하는 번거로움이 있습니다. 그러나 이점은 오히려 전화위복이 될 수 있습니다. 자원을 빨리 반환하기 때문에 그만큼 시스템 성능이 향상되기 때문입니다. 반면 SWT이 Swing보다 유연성과 확장성이 떨어지는 것은 당연한 결과입니다.
만약 진행중인 프로젝트가 자바를 사용하지만, 특정 플랫폼에 편중되어 있는 경우 SWT가 적합합니다. 예를 들어 사용자의 대부분이 MS 윈도우를 사용하며, 나머지 일부가 Mac을 사용하는 경우입니다. 그러나 다양한 플랫폼을 지원하면서 UI 스타일의 비중이 그리 높지 않는 경우 Swing을 이용하는 것이 좋습니다.
끝으로 UI 스타일에 민감한 사용자의 관점에서는 Swing의 UI는 다소 불만족스러울 수 있습니다. 윈도우 사용자가 볼 때 Swing의 UI는 심플하지만 왠지 이질적이며, 이미 눈이 높아져버린 Mac 사용자의 입장에서 Swing은 덜 세련되어 보일 수 있습니다. 물론 Swing의 장점인 Pluggable Look and Feel을 활용할 수 있지만, 왠만한 기업에서 MS 윈도우나 Mac보다 멋진 UI를 만들기는 쉽지 않을 것 같습니다. ^^;
<출처>
http://kimswave-textcube.blogspot.com/2010/03/awt-swt-swing-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC%EC%9D%98-%EB%8B%A4%EC%96%91%ED%95%9C-%ED%8A%B9%EC%A7%95%EB%93%A4%EC%9D%84-%EB%B9%84%EA%B5%90.html
'old drawer > Java' 카테고리의 다른 글
[Java] Runable과 Thread의 차이점 (0) | 2011.06.11 |
---|---|
[Java] Painting in AWT and Swing (0) | 2011.06.08 |
Java에서 implements Serializable(객체 직렬화)란? (0) | 2011.05.24 |
Java Platform, Standard Edition 6 API Specification (0) | 2011.05.24 |
java 파일 입출력 (0) | 2011.05.24 |