backend

awt와 swing의 차이점

버리야 2007. 6. 19. 21:26
반응형
java로 응용프로그램을 만들어본게 손에 꼽을 정도라서 awt와 swing의 확실한 차이점을 몰랐습니다. 오늘 배운내용을 이번기회에 확실히 알고 넘어가기 위해서,,

AWT는 Abstract Windows Toolkit의 약자로 '추상 윈도우 개발 도구'라는 뜻으로
운영체제의 자원을 이용하여 control의 외형을 형성합니다.

즉 MS의 윈도우와 유닉스계열에서 GUI가 비슷하게는 나타나지만 같게 보이지는 않습니다.
그래서 'abstract'인거지요.
예로 button component를 생성하면 운영체제마다 그 버튼의 모양과 크기는 조금씩 다르게 나타납니다. 이것이 peer를 통한 component의 생성으로 나타나는 문제입니다.
(현재 운영제체의 각 component를 peer component라고 합니다.AWT는 기반운영시스템에서 Native code를 빌려서 GUI를 생성시킨 Peer 구조를 가집니다.)

운영체제에서 표현하고자 하는것을 중립적으로 표현하기에는 좋지만
다양하게 표현하기엔 힘들다는것이 단점입니다. 그래서 예쁘게 나오기도 힘들구요
제한된 GUI 컴포넌트, 레이아웃 매니저, 이벤트를 가진 매우 단순한 툴킷입니다.

더 자세한 설명


Swing(Part of Java Foundation Classes)은 운영체제에 구애받지 않고 구현할 수 있다.
기존의 awt는 해당 운영체제의 GUI를 빌려쓰는 형식이지만 Swing은 pure java로만
구성되어 있기때문에 리눅스든 윈도우든 솔라리스든간에 인터페이스가 동일하다

다만 단점은 AWT보다 느리다는 것.

AWT component is also known as heavyweight component because all AWT components have its peer, the native GUI components. For example, Button, TextArea, and Label are heavyweight components. They have peer in C code on the native platform.

Swing was developed to enhance the AWT toolkit by allowing user to create lightweight components which do not have the native GUI component. For example, JTabbedPane is a lightweight component of Swing. It has no peer in C code on the native platform.


참고로 eclipse는 swt(Standard Windows Toolkit)로 GUI가 개발되었습니다.

java에서 GUI를 지원하기 위한 도구로 sun에서 개발한 Swing이 널리 사용되고 있었는데, IBM에서 통합개발 플랫폼인 Eclipse를 개발하면서 Swing 대신 자체적으로 개발한 GUI라이브러리를 제작합니다.

swing과 swt의 비교
Swing : J2SE를 위한 GUI 툴킷
SWT : IBM의 공개 프로젝트인 Eclipse 플랫폼의 제작을 위해 별도로 개발된 라이브러리

SWT는 Standard Widget Toolkit의 줄임말로 각 운영체제자체에서 제공되는 위젯 툴킷을 통합한 그래픽 라이브러리다. 이는 각 타겟 플렛폼에 꽤나 의존적이 될 수도 있음을 의미하지만, OS독립적인 API를 제공함으로써 이 문제를 해결하고 있다. 이들 API는 목표가 되는 운영체제 시스템의 GUI코드를 wrapper함으로써 개발자 입장에서는 운영체제에 신경쓰지 않고 동일한 코드를 유지할 수 있게 된다.


덧붙여 설명하자면, Swing은 모든 위젯이 운영체제와 별개를 사용하는데(자바의 모토가 One make All use 아니던가) 그렇기때문에 Swing의 GUI는 웬지 눈에 낯설고 어색해 보이는 면이 있어왔다. 그러나 SWT는 가능한한 사용할 수있는 모든 Native Widget은 사용하고, 그러하지 않는 부분만 자바의 자체 위젯을 사용한다. 때문에 최대한 그 OS의 Native GUI와 비슷한 모습을 보여주는것이다.(Native에서 제공하지 않는 자체 위젯까지 포함하므로 때론 더 이쁠수도 있겠다. 물론 반대인 경우도 있겠지만).


그럼 자바가 시스템에 독립적이지 않은게 아닌가? 하고 반문할지 모르지만 위에 설명된 바와같이 공통적인 API를 사용하므로서 (Abstract Layer라고 볼 수 도 있겠다) OS가 다르다고 해서 소스코드의 변경을 필요로 하지 않는것이다. (VM차원에서 Native Widget를 해당 API로 랩핑해주므로)




참고한 URL

http://www.javastudy.co.kr/docs/yopark/chap08/chap08.html#_Toc466766198
http://abangwithjava.blogspot.com/2006/09/java-gui-awt-swing-and-swt.html
http://blog.naver.com/zzanggoosoft?Redirect=Log&logNo=30009621746
http://www.ibm.com/developerworks/java/library/os-swingswt/index.html

반응형