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