레이블이 SWT&JFace인액션인 게시물을 표시합니다. 모든 게시물 표시
레이블이 SWT&JFace인액션인 게시물을 표시합니다. 모든 게시물 표시

2010년 3월 2일 화요일

[02] SWT와 JFace로 시작하기

$1. SWT 프로그래밍

● Display 클래스

Display 클래스가 외관을 보여주진 않지만 GUI 자원을 관리하며 운영체제와의 소통을 담당한다. 즉, 윈도우를 표시하고 이동하며 다시 그리는 방식에 대해 관여한다. 또한 마우스 클릭이나 키보드를 누르는 이벤트를 적절한 위젯에 보내는지를 확인한다.

Display 클래스를 사용하는 부분이 코드 몇 줄에 불과하지만, 그 기능은 반드시 알아둬야 할 정도로 중요하다. Display 클래스는 코드에 있는 SWT/JFace 명령을 하위 수준의 호출로 바꾸어 운영체제에 전달하는 일을 한다. 이 과정은 Display 클래스의 인스턴스를 생성하면 시작되며, Display 객체는 플랫폼의 운영체제를 나타내는 OS 클래스의 인스턴스를 생성하고 자바의 네이티브 메소드를 사용하여 컴퓨터의 하위 수준의 자원에 접근한다. 이후 Display 객체는 이러한 메소드를 이용하여 전화교환원처럼 명령을 운영체제에 전달하고 사용자 입력을 애플리케이션에 전달한다.

만일 운영체제에 SWT와 통합하지 않은 기능이 있으면 JNI를 이용하여 손수 덧붙일 수 있다는 점을 기억하자. 다음은 Display 클래스의 중요 메소드를 보여준다.


● Shell 클래스

Shell 클래스는 GUI의 기본 윈도우처럼 동작한다. 또한 Display 객체와는 달리 Shell 인스턴스는 시각적인 부분을 구현한다. Shell 클래스는 주요 윈도우를 열거나, 활성화, 최대화, 최소화하거나 닫는 것을 추적할 때만 접근한다. 즉, Shell 클래스의 주요기능은 컨테이너, 위젯, 이벤트와 GUI를 연동하기 위한 연결 고리를 제공하는 것이다.

Shell 인스턴스는 여러 속성을 각고 있어 사용자들이 상태를 변경하거나 정보를 읽을 수 있는데 이러한 속성들의 모음을 구성요소의 스타일이라고 한다. GUI에서 셀, 위젯 등의 스타일 비트를 설정할 수 있으며, 각 스타일 비트를 '|' 연산자로 결합할 수 있다.

끝으로 모든 플랫폼이 GUI 구성요소의 속성을 제공하지는 않으므로, SWT가 스타일 설정을 규정이 아닌 가이드라인으로만 다룬다른 것을 이해해야 한다.

$2. SWT/JFace 프로그래밍

● 모델 기반 어댑터

JFace 클래스를 언급할 떄 Helper classes와 모델 기반 어댑터라는 두 가지 용어를 사용한다. 여기에서는 모델 기반 어댑터(JFace 어댑터)라는 용어만 사용하기로 한다. 어댑터는 다음과 같이 분류할 수 있다.


가장 많이 사용하는 모델 기반 어댑터의 부류는 Viewer 클래스이며 이에 대해서는 추후에 상세히 다루도록 한다.

$3. JFace와 SWT/JFace의 코딩

SWT만으로 구현한 코드와 SWT와 JFace를 모두 사용한 코드의 차이점을 살펴보자. 주요한 차이점은 SWT는 Shell 클래스에서 GUI의 외양과 동작을 함께 기술하는 반면에, SWT/JFace는 GUI의 외양과 동작을 분리한다. 이런 모듈화된 구조로 코드를 재사용할 수 있고, 한 개발자가 윈도우 뷰를 설계하면서 다른 개발자는 윈도우 동작을 구현할 수 있다.

윈도우 외양은 createContents() 메소드의 환경을 설정하는 Composite에서 제어한다.

$4.
ApplicationWindow
ApplicationWindow 클래스

윈도우 작동을 수행하는 클래스인 ApplicationWindow 클래스는 SWT/JFace에서 매우 중요하다.
ApplicationWindow 클래스는 자체적으로 생성하는 Shell 만들고 SWT/JFace는 개발자 Shell을 만들어 준다. 이처럼 JFace 윈도우를 사용하는 이점은 큰 사용자 인터페이스를 구축할 때 명확하게 보인다. 이점을 구체적으로 이야기 해보면 ApplicationWindow는 GUI의 외양과 동작을 분리한다. 또한 설계자에게 유용한 윈도우를 설정하는 여러 방법을 제공한다. Shell 클래스가 크기와 스타일을 변경하는 메소드를 가지고 있지만,
ApplicationWindow
ApplicationWindow 클래스의 메소드를 사용해서 휠씬 더 편리하게 설정시킬 수 있다. 다음 표에서 보듯이 ApplicationWindow 클래스 메소드를 보면 알 수 있다.













[01] SWT와 JFace의 개요

$ 스윙과 SWT/JFace 좀 더 깊이 살펴보기

스윙은 GUI 설계 과정에서 MVC를 구현하도록 되어있다. 즉 사용자 인터페이스 컴포넌트를 그 상태 정보, 화면에 보이는 모습, 외부 이벤트에 응답하는 능력의 세 부분으로 나눈다. 이러한 관점을 Model, View, Controller라고 명한다. 스윙 설계자는 아래그림과 같이 MVC 아키텍처를 수정하여 모델위임자 아키텍처를 작성했다.


모델 정보를 외양과 분리함으로써, 스윙은 프로그래밍 방법론적으로 좀더 유연하고 재사용 가능한 코드를 산출할 수 있도록 했다.

느려 터진 스윙에 대한 불만을 가진 이클립스 설계자들은 네이티브 애플리케이션과 같은 성능으로 자바 UI를 실행할 수 있는 도구인 SWT와 JFace를 직접 만들기로 하였다.

SWT/JFace의 가장 탁월한 면은 운영체제에 직접 접근이 가능하다는 것이다. 즉, SWT/JFace와 운영체제의 상호 소통은 자바 네이티브 인터페이스(JNI)를 사용하여 수행한다.

SWT/JFace의 또 다른 중요한 특성은 자동 가비지 콜렉션에 의존하지 않는 점이다. 이는 다음과 같은 두가지 이유에서이다.

1. 프로그램이 작동하는 동안 메모리 할당을 자동적으로 해제하는 과정은 예측할 수 없고, 할당을 해제     한 자원을 언제 사용할 수 있는지에 대해서도 알 수 있는 방법이 없다.

2. 운영체제 자원을 위해 자동 가비지 컬렉션을 사용하는 것은 어렵다. 상위 수준에 있는 가벼운 컴포넌     트를 사용할 때는 문제가 되지 않지만, 낮은 수준의 자원에 대한 자동 처리는 에러를 일으키기 쉽고,     플랫폼이 다를 경우 정상적으로 동작하지 않을 수도 있다.

따라서 할당과 해제를 SWT/JFace에서는 개발자가 결정해야 하며, 이러한 과정을 단순화하기 위해 컴포넌트 클래스에서 dispose() 메소드를 제공한다. 또한 부모 자원에 대한 할당을 해제하면, 자식자원들도 자동적으로 할당 해제된다.

이렇게 자동해제를 하지 않음을 강조하지만 실제 애플리케이션에서 명시적으로 해제하는 호출은 거의 필요하지 않다. 따라서 SWT/JFace 자원관리는 반자동이라고 할 수 있다.

$ 라이센싱과 플랫폼 지원

EPL(Eclipse Public License)하에 이클립스를 공개했다. 이 라이센스는 OSI 라이센싱 개념과 호환가능하며, 완전한 상업적인 사용을 허락하고 로열티에서 자유로운 소스코드와 전 세계에 배포가능한 권리를 허가한다.


$ WidgetWindow

앞으로 전체를 설계한 애플리케이션을 WidgetWIndow라고 부르겠다.





2009년 9월 17일 목요일

[소개] SWT/JFace 인 액션 : 이클립스 스타일로 만드는 자바 GUI 애플리게이션

——————————————————————————————————————————————
저자 : Matthew Scarpino, Stephen Holder, Stanford Ng, Laurent Mihalkovic
역자 : 이선아, 제갈호준 출판사 : 에이콘 ISBN: 978-89-89975-97-7
가격 : ₩30,000
——————————————————————————————————————————————
[목차]

펼쳐두기..