Java 에서 GUI 를 만드는 방법은 크게 두 가지로 설명할 수 있다.
바로 Swing 과 SWT/JFace 이다. Swing 과 SWT/JFace 는 비슷한 외양을 보여주지만 목표와 구현 방법에 차이가 있다.
1. Swing
Swing 의 가장 큰 특징은 OS와 무관하게 일관된 외양을 보여준다는 것이다. 바로 Java의 기본 신념을 가장 잘 표현한 것이 아닐까 한다. 이렇게 이로간된 외양을 보여주기 위해 JVM 은 Swing 의 사용자 인터페이스를 그리는 과정에 전적으로 개입한다.
때문에 이 특징이 Java가 느리다는 편견을 만드는 가장 큰 주범일 것이다.(물론 최근의 고사양의 하드웨어의 발달로 이부분에 대한 성능 저하가 느끼기 어렵다.)
Swing 의 각 컴포넌트들은 상위 수준에서 구현하기 때문에 경량 컴포넌트 라고 부른다. 이는 JVM 이 어떤 OS 위에서 돌아가든 똑같이 보인다. 즉, Swing 은 기본적으로 플랫폼과 무관하게 같은 외양을 보여준다.
하지만 Swing 단점으로는 개발과정이 너무 복잡하고 실행 과정이 느리다는 것이다.
2. SWT/JFace
SWT/JFace는 Java 기반의 플랫폼에 독립적인 GUI 를 만든다는 것은 같다. 하지만 Swing 이 OS 마다 같은 GUI 를 보여주는 것이라면 SWT/JFace 는 각 OS에 해당하는 모양으로 GUI 를 나타낸다. SWT/JFace는 GUI 의 그래픽을 직접 만들기 보다는 OS의 중량 컴포넌트를 그대로 사용한다. 따라서 각 플랫폼에 해당하는 GUI가 만들어 진다.
이것은 Java 의 JNI 에 의존한다. JNI를 사용하여 OS의 네이티브 리소스를 사용하는 것이다.
SWT/JFace의 또 다른 특성은 자동 가비지 컬렉션을 하지 않는다는 것이다. 즉, 사용한 자원을 명시적으로 해제해야한다. 이는 JNI 를 사용하여 얻어온 자원을 자동 가비지 컬렉션을 사용하여 해제하기 상당히 어렵기 때문이다. SWT/JFace를 사용하는 또 다른 이유는 OS에 직접 접근이 가능하다는 것이다.
하지만 OS에 직접 접근하려면 JNI라는 단계를 더 거쳐야 한다.
3. Swing 과 SWT/JFace 의 차이
1) GUI 생성방식
Swing 은 경량 컴포넌트를 사용하여 GUI를 직접 생성한다. (모든 OS 에 같은 GUI 를 보여준다.)
SWT/JFace 는 중량 컴포넌트를 직접 사용한다. (각 OS 에 해당하는 모양으로 GUI를 보여준다.)
2) GC
Swing 은 자동 가비지 컬렉션을 사용하고 SWT/JFace 는 리소스 해제를 직접한다.
3) Layout
- Swing 은 JPanel 을 사용하여 Layout 을 레이어처럽 쌓아놓는 방법을 사용한다. 이러한 방식은 쌓이는 만큼 비효율적으로 자원을 많이 소모하지만 설계는 쉽다.
- SWT/JFace 는 Layout 을 최소화 하기 위해 속성과 수정자를 사용하여 위젯의 위치를 제어한다. 설계시간은 좀더 길어질 수 있지만 자원소비는 적다.
SWT/JFace 는 기본적으로 SDK 에 포함된 라이브러리가 아니다.
패키지명에서도 알 수 있듯이, Eclipse 에서 별도로 만든 plugin 이다.
그래서 몇몇 귀찮은 설정을 아래와 같이 해 주어야 한다.
Reference 추가하기
1. 일단 java 프로젝트를 만듦
2. 프로젝트 우클릭 -> Properties 메뉴 클릭
3. 아래 화면의 메뉴로 접근
5. 하단 'Configure Variables...' 클릭
6. 'New' 클릭
7. 하단의 창이 뜨면, 'Folder...' 클릭
9. OK 를 눌러서 아래 화면으로 빠져나옴
11. 항목에서 'plugins' 의 트리를 확장시킴
이렇게 하면 swt/jface 사용을 위한 환경설정이 모두 끝이 납니다.
프로젝트를 열어보면, "Referenced Libraries" 에 위 7개 항목이 들어간 것을 확인 하실 수 있습니다.
'SWT/JFACE' 카테고리의 다른 글
SWT Table component row 삭제시 갱신 안될 때 (refresh) 시키기 (0) | 2012.05.17 |
---|---|
SWT, Widget 이 들어있는 Table 의 row 삭제하기 (0) | 2012.05.15 |
SWT 에서 Table Sort 정렬 하기! (0) | 2012.05.15 |
Eclipse ResourceBundle Plugin 으로 사용하기 (0) | 2012.05.04 |
SWT/Jface 다국어 (MultiLanguage) 지원 (0) | 2012.05.04 |