이미 소장하고 있다면 판매해 보세요.
|
1장 SWT와 JFace의 개요
1.1 SWT/JFace는 무엇인가? [1.1.1] SWT를 이용한 GUI 구축 [1.1.2] JFace를 이용한 GUI 개발 간소화 1.2 좀더 깊이 살펴보기 [1.2.1] 영원한 후보선수, 스윙 [1.2.2] 떠오르는 신예, SWT/JFace [1.2.3] SWT냐 스윙이냐 1.3 SWT/JFace: 라이센싱과 플랫폼 지원 [1.3.1] Eclipse Public License [1.3.2] 지원 플랫폼 1.4 WidgetWindow 1.5 요약 2장 SWT와 JFace로 시작하기 2.1 SWT 프로그래밍 [2.1.1] HelloSWT 프로그램 [2.1.2] Display 클래스 [2.1.3] Shell 클래스 2.2 SWT/JFace 프로그래밍 [2.2.1] 모델 기반 어댑터 [2.2.2] HelloSWT_JFace 프로그램 [2.2.3] JFace와 SWT/JFace의 코딩 [2.2.4] ApplicationWindow 클래스 2.3 WidgetWindow 애플리케이션 시작하기 2.4 요약 3장 위젯: 1부 3.1 Widget과 Control 클래스의 소개 [3.1.1] Widget의 이해 [3.1.2] Control 객체로 작업하기 3.2 레이블 [3.2.1] 스타일과 구분자 [3.2.2] Label 메소드 3.3 버튼과 사용자 동작 [3.3.1] 푸시 버튼과 SWT.PUSH [3.3.2] 화살표 버튼과 SWT.ARROW [3.3.3] 토글 버튼과 SWT.TOGGLE [3.3.4] 체크 버튼과 SWT.CHECK [3.3.5] 라디오 버튼과 SWT.RADIO 3.4 컴포지트를 이용한 컴포넌트의 포함 [3.4.1] Composite 클래스의 이해 [3.4.2] Group [3.4.3] SashForm [3.4.4] TabFolder 3.5 WidgetWindow 업데이트 [3.5.1] Ch3_Composite 클래스 생성 [3.5.2] WidgetWindow의 TabFolder 생성 3.6 요약 4장 이벤트 처리 4.1 SWT에서의 이벤트 처리 [4.1.1] 유형 리스너와 이벤트 사용 [4.1.2] 어댑터 [4.1.3] 키보드 이벤트 [4.1.4] 무형 이벤트로 맞춤 이벤트 처리하기 [4.1.5] SWT 리스너/이벤트 애플리케이션 4.2 JFace의 이벤트 처리 [4.2.1] 액션과 컨트리뷰션 이해하기 [4.2.2] Action 클래스 생성 [4.2.3] ApplicationWindow에서 컨트리뷰션 구현하기 [4.2.4] 컨트리뷰션과 연결하기 [4.2.5] Action 클래스 살펴보기 4.3 WidgetWindow 업데이트 [4.3.1] 4장의 Composite 빌드하기 [4.3.2] Ch_Composite 추가하기 4.4 요약 5장 위젯: 2부 5.1 SWT를 이용한 텍스트 편집 [5.1.1] 기본 Text 위젯 [5.1.2] StyledText 위젯 5.2 JFace의 텍스트 지원 [5.2.1] JFace 텍스트 패키지 획득 [5.2.2] TextViewer와 문서 [5.2.3] JFace 예제 5.3 Combo 위젯 5.4 ToolBarManager [5.4.1] ControlContribution [5.4.2] 툴바의 수동 생성 5.5 CoolBar 5.6 슬라이더 5.7 ProgressBar 5.8 ProgressIndicator 5.9 요약 6장 레이아웃 6.1 필 레이아웃 6.2 행 레이아웃 [6.2.1] 각 레이아웃 셀의 사용자 지정 6.3 그리드 레이아웃 [6.3.1] GridData 6.4 폼 레이아웃 [6.4.1] 폼 데이터의 사용 [6.4.2] FormAttachment를 사용한 관계 명시 [6.4.3] 폼 레이아웃을 사용한 컨트롤의 배치 6.5 맞춤 레이아웃 [6.5.1] 레이아웃의 크기 계산 [6.5.2] 위젯 배치 [6.5.3] WidgetWindow 업데이트 6.6 요약 7장 그래픽 7.1 그래픽 컨텍스트 [7.1.1] GC 객체의 생성 [7.1.2] Canvas에 도형 그리기 [7.1.3] 페인팅과 PaintEvent [7.1.4] 클립핑과 캔버스 스타일 7.2 색상 프로그래밍 [7.2.1] SWT로 색상 개발하기 [7.2.2] JFace로 색상 관련 추가 기능 7.3 폰트를 사용한 텍스트 표시 [7.3.1] SWT의 폰트 사용 [7.3.2] 폰트의 코딩 [7.3.3] JFace의 향상된 폰트 관리 7.4 그래픽에 이미지 통합 [7.4.1] 이미지의 할당 [7.4.2] 이미지를 이용한 그래픽 코딩 [7.4.3] ImageData를 이용한 비트맵의 생성 [7.4.4] ImageData를 이용한 이미지 조작 [7.4.5] JFace를 이용한 이미지 관리 7.5 WidgetWindow 업데이트 [7.5.1] 7장의 컴포지트 구축 [7.5.2] WidgetWindow에 Ch7_Composite의 추가 7.6 요약 8장 트리와 리스트 8.1 뷰어와 뷰어 프레임워크 [8.1.1] 프로바이더 [8.1.2] 리스너 [8.1.3] 필터와 정렬기 8.2 트리 [8.2.1] SWT 트리 [8.2.2] JFace TreeViewer 8.3 리스트 위젯의 사용 [8.3.1] SWT 리스트 [8.3.2] JFace ListViewer 8.4 WidgetWindow 업데이트 8.5 요약 9장 테이블과 메뉴 9.1 테이블 [9.1.1] SWT 테이블 이해하기 [9.1.2] JFace TableViewer 9.2 메뉴의 생성 [9.2.1] 단축키 [9.2.2] SWT에서 메뉴 생성 [9.2.3] JFace 액션을 이용한 메뉴의 추가 9.3 WidgetWindow 업데이트 9.4 요약 10장 대화창 10.1 SWT 대화창 [10.1.1] ColorDialog [10.1.2] DirectoryDialog [10.1.3] FileDialog [10.1.4] FontDialog [10.1.5] MessageBox 10.2 JFace 대화창 [10.2.1] 메시지 대화창 [10.2.2] 에러 대화창 [10.2.3] 입력 대화창 [10.2.4] 진행 모니터 대화창 [10.2.5] 맞춤 대화창 10.3 WidgetWindow 업데이트 10.4 요약 11장 마법사 11.1 멀티페이지 대화창 [11.1.1] IDialogPage 인터페이스 [11.1.2] IWizardPage 인터페이스 [11.1.3] WizardPage 클래스 11.2 마법사 [11.2.1] IWizard 인터페이스 [11.2.2] Wizard 클래스 11.3 통합 작업 [11.3.1] 마법사 컨테이너 [11.3.2] WizardDialog 클래스 11.4 마법사 결합하기 [11.4.1] WizardSelectionPage 클래스 [11.4.2] IWizardNode 인터페이스 11.5 마법사 데이터 유지 [11.5.1] DialogSettings 클래스 11.6 WidgetWindow 업데이트 11.7 요약 12장 고급 기능 12.1 데이터 전송 [12.1.1] Transfer 클래스 [12.1.2] 드래그앤드롭 기능 [12.1.3] 클립보드 사용 [12.1.4] 파일 시스템 브라우저 12.2 사용자 환경설정 [12.2.1] 환경설정 페이지 [12.2.2] 필드 편집기 [12.2.3] 환경설정 페이지 컨테이너 [12.2.4] 환경설정 저장 12.3 레이블 데코레이터 [12.3.1] ILabelDecorator 인터페이스 [12.3.2] DecoratingLabelProvider 클래스 [12.3.3] 예제 12.4 Browser 위젯 12.5 요약 13장 리치 클라이언트 플랫폼: 이클립스 RCP 13.1 RCP 워크벤치 이해 [13.1.1] 편집기를 사용한 데이터 입력 [13.1.2] 뷰를 이용한 정보의 표시 [13.1.3] 퍼스펙티브로 편집기와 뷰 통합하기 13.2 RCP: 독립형 애플리케이션 만들기 [13.2.1] RCP 프로젝트의 생성과 설정 [13.2.2] 애플리케이션 클래스 만들기 [13.2.3] WorkbenchAdvisor 추가 13.3 뷰와 퍼스펙티브 추가 [13.3.1] 뷰 구축 [13.3.2] 퍼스펙티브로 워크벤치 윈도우 배치 [13.3.3] RCP 애플리케이션 실행 [13.3.4] RCP 과정 검토 13.4 이클립스 폼 위젯으로 폼 생성 [13.4.1] 폼 툴킷과 이클립스 폼 컨테이너 사용 [13.4.2] 하이퍼링크를 이용한 텍스트 기반 이벤트의 발생 13.5 독립형 RCP 애플리케이션 만들기 [13.5.1] RCPExample을 애플리케이션 디렉토리로 내보내기 [13.5.2] 애플리케이션 디렉토리에 플러그인 추가 [13.5.3] 애플리케이션 실행 13.6 요약 부록 A SWT/JFace로 프로젝트 만들기 부록 B SWT/JFace에서의 OLE와 액티브X 부록 C Draw2D를 이용한 가변형 GUI 부록 D 그래픽 편집 프레임워크(GEF) |
|
이 책을 쓰는 목적은 단 한 가지, SWT와 JFace 툴셋을 간단하면서도 명쾌하게 소개하기 위함이다. 지금까지 문서들이 SWT와 JFace 라이브러리의 많은 부분을 다루고 있지만, 실망스럽게도 아직까지 체계적으로 정리되지 않은 부분이 많았다(특히 그래픽과 관련해서는 더욱 그렇다). 그래서 2003년 말 우리 저자 4명은 SWT/JFace에 관한 고차원적인 이론과 통합된 개발 툴에 대해 좀더 자세히 다루는 책을 쓰기 위해 의기투합하게 됐다.
eclipse.org 구성원의 노고 덕분에, SWT와 JFace는 자바 커뮤니티에서 주목을 받기 시작했고, 논쟁의 대상이 되기도 했다. 대부분은 Java 2 platform의 표준 컴포넌트인 스윙과 원시코드를 사용하는 비표준 라이브러리인 SWT의 장점을 비교하는 데에 집중되었다. 그러나 다시 생각해 보면, SWT/JFace을 사용한다는 것은 "한번 작성하면 어디서든 실행돼야 한다(write once run anywhere)"는 자바 개발자들의 모토와는 맞지 않는 접근방법인 셈이다. 그러나 스윙이 아무리 장점이 많다 하더라도, 애플리케이션 사용자 인터페이스를 개발할 때, 스윙과 SWT/JFace 중 어느 것을 선택해야 할지는 굉장히 고민스런 일일 것이다. 이 책은 스윙 개발자뿐 아니라 단순한 커맨드 입력 창을 탈피한 화려한 애플리케이션을 만들고 싶어하는 초보 자바 개발자들을 위한 책이다. 예제 코드를 제공하고 그래픽 사용자 인터페이스 개발을 위한 기본적인 이론을 설명하기 위해 최선을 다했으며, 특히 그래픽 애플리케이션의 신뢰성과 유지보수성을 높이는 모델-뷰-컨트롤러 패러다임에 대해 깊이 설명했다. SWT로 개발했던 여러 경험을 독자들과 공유하고자 노력했으니, SWT와 JFace를 채택한 프로젝트를 수행할 때 많은 도움이 되어 SWT/JFace의 효율적인 사용에 보탬이 되길 바란다. --- 저자 서문 |
|
『SWT/JFace 인 액션』 책을 처음 접한 것은 이클립스 플러그인 소프트웨어 중 하나인 리플렉션 프로그램의 코드를 분석하던 때였다. 코드 중 그래픽 사용자 인터페이스 부분을 구분하기 위한 기본 상식을 닦고자 SWT/JFace에 관련한 책을 웹에서 뒤졌는데, 많은 책이 있었지만 그 중 초심자가 체계적으로 배울 수 있는 책이라는 어구에 나를 확 끌어당겼다. 그렇게 처음 만나게 된 이 책은 역시나 내 기대를 저버리지 않았다.
『SWT/JFace 인 액션』은 코드와 설명이 절묘하게 어우러진 책이다. 프로그래밍 책들은 일반적으로 개념에 따라 단편적인 코드를 보이거나 매우 긴 코드를 넣어 놓고 코드를 설명하지만, 양 쪽 방식 모두 독자들에게는 불편할 뿐이다. 개념을 이해한다 쳐도 이를 어떻게 활용해야 할지를 파악하려면 오랜 시간이 걸리며, 또한 긴 코드를 설명과 비교하면서 읽는 것도 고역이다. 『SWT/JFace 인 액션』의 저자들은 각 장의 개념과 코드를 어떻게 배치할지 오랜 시간 고민해 하나의 프로젝트를 고안했으며 각 장마다 조금씩 살을 붙여 나아갔다. 아무리 역설해도 이 책을 직접 읽기 전에는 이 책의 방식이 얼마나 이해하기 쉬운지 의심스러운 눈초리로 바라볼 수밖에는 없을 것이다. 하지만 이러한 의혹은 이 책을 직접 손에 들고 간결하고 쉬운 설명과 핵심적인 예제를 직접 접해 보면 저절로 풀릴 것이다. 역자로서 독자들이 가장 쉽게 이해할 수 있는 글로 옮기고자 노력했다. 여러 번역서를 탐탁하지 않게 여겼던 만큼 첫 번역서로서 그런 경험을 독자들이 느끼지 않도록 노력했으나 막상 해보니 생각만큼 쉽지는 않은 작업이었다. 혹시 있을지 모를 오류는 역자에게 메일을 보내거나 에이콘출판사 홈페이지의 오탈자 신고 페이지를 이용하기 바란다. --- 역자 서문 |
|
★ 이 책의 특징 ★
이클립스 그래픽 라이브러리인 SWT와 JFace를 사용하면 날렵하고 효과적인 자바 GUI 애플리케이션을 개발할 수 있다. 또한 Draw2D와 GEF를 쓰면 정적인 애플리케이션을 뛰어 넘어 강력한 기능을 자랑하는 시각적인 편집기를 창조할 수 있다. 리치 클라이언트 플랫폼(RCP)으로 기존 인터페이스의 기능을 훨씬 능가하는 자신만의 워크벤치를 구축할 수 있다. SWT/JFace 인 액션은 간단한 위젯에서 복잡한 그래픽 애플리케이션까지 폭넓은 내용을 다룬다. 이클립스 기반 GUI를 개발하는 과정을 배울 수 있으며, 사용자가 감탄할만한 강력한 기능의 애플리케이션을 구축할 수 있는 방법도 살펴볼 수 있다. 저자들은 경험에서 우러나온 지식을 유용하고 읽기 쉬운 형식으로 독자들과 공유하고자 노력했다. 이 책은 독자가 직접 실행해보며 배울 수 있게 구성하였다. 실제 애플리케이션에서 어떻게 SWT/JFace가 작동하는지 예제 코드에서 직접 확인할 수 있다. 이러한 예제들은 독자의 이해를 도울 뿐 아니라, 실제 애플리케이션에서 바로 가져다 쓸 수 있을 만큼 실용적이다. ★ 이 책의 구성 ★ 이 책은 SWT와 JFace에 포함된 각 컴포넌트의 세부사항을 보여주는 예제 애플리케이션인 WidgetWindow를 개발하는 과정을 중심으로 구성되어 있다. 애플리케이션은 각 장에서의 정보를 담은 코드 들이 묶음으로 이뤄져 있으며, 각 장의 마지막 부분에서는 WidgetWindow 프로젝트에 추가할 수 있는 코드를 제공한다. 초반부에 해당하는 장이 애플리케이션의 기초를 만드는 부분이기는 하지만, 앞 장의 코드가 없어도 책 후반부 각 장의 코드는 독립적으로 동작할 수 있다. 따라서 독자들이 각자 관심 있는 주제에만 집중할 수 있기를 바란다. 그리고 위젯 윈도우 애플리케이션의 프레임워크를 사용해서 코드를 만들고 각 컴포넌트에 입력되는 다양한 매개변수의 효과를 확인할 수 있게 되기 바란다. 책 전반에 걸쳐 툴을 소개하는 것 외에, 다음과 같은 SWT/JFace의 여러 기능에 대해 다루겠다. (1) SWT와 JFace의 관계: 이 두 라이브러리를 처음 접하게 될 때, 언제 어떤 것을 사용해야 하는지, JFace가 왜 필요한지를 이해하기란 쉽지 않은 일이다. 두 라이브러리의 공통되는 부분에 대해 설명하고, 코딩을 통해 각 장단점을 시연하겠다. (2) GUI 개발과 관련된 원칙: 이 툴을 사용하면서, GUI 개발을 간단하게 할 수 있는 많은 방법을 알게 되었다. 또한 SWT/JFace가 문서의 설명과 다른 방식으로 동작하는 상황을 수없이 많이 겪어 보았다. 독자들이 우리가 겪은 전철을 되풀이 하지 않도록 SWT/JFace 애플리케이션 개발을 위한 실용적인 예제를 제공하겠다. (3) 플랫폼 호환성 개발: SWT와 JFace를 이용하면 사용자 인터페이스를 여러 방법으로 만들 수 있다. 어떤 함수는 각 운영체제에서 호환이 되지만, 그렇지 않은 경우도 있다. 애플리케이션이 어떤 형태로 출력되는지 보여주기 위해 여러 윈도우 플랫폼을 캡쳐한 그림을 함께 보여준다. (4) 실용적인 코드 예제: 이 책의 예제 코드를 만들 때, 두 가지 우선순위를 뒀다. 첫째, 독자들이 실제 체험할 수 있도록 코드를 간결하게 만들어야 하며, 둘째, SWT/JFace 애플리케이션 개발에서 사용할 수 있게 하기 위해서 모듈화된 형태로 제공해야 한다는 것이다. (5) SWT/JFace를 기반으로 하는 툴셋: Draw 2D와 GEF(Graphical Editor Framework) 툴셋을 꼼꼼히 둘러본 책은 이 책이 처음일 것이다. SWT와 JFace의 기능을 기반으로 하는 이 라이브러리는 GUI 디자인 능력과 유연성을 증가시킨다. ★ 이 책의 대상 ★ 이 책은 고급 자바 개발자로 가는 중급 개발자에 맞게 쓰여졌다. 독자는 기본 자바 문법을 충분히 인지하고 있으며, 최선의 해결책이 없을 때 차선책을 고려할 수 있는 능력이 있다고 가정했다. 자바 등의 언어를 사용한 그래픽 애플리케이션 개발 경험이 있다면 도움이 될 수도 있겠지만, 이 책을 읽기 위해 반드시 필요한 것은 아니다. 사용하려는 각 위젯의 기술적 세부사항을 명시할 뿐만 아니라 처음 나오는 용어는 모두 정의하며 각 위젯의 목적을 명확히 설명하도록 노력했다. 그러나 이 책은 사용자 인터페이스 설계를 위한 책은 아니기 때문에, 기술된 위젯 이상의 사용자 경험을 요구하는 부분까지 자세하게 다루지는 않겠다. 독자 대부분이 스윙에 경험이 있다고 가정하겠지만, 이 책을 즐기기에 반드시 필요한 것은 아니다. 스윙 전문가들에게 좀더 깊은 이해를 제공하기 위해 스윙과 SWT/JFace를 비교하긴 하지만, 각 주제에서 다루고 있는 설명에 비하면 이러한 비교는 부차적인 것에 불과하다. 독자가 스윙 코드 한 줄 프로그램하지 않고도 이 책의 모든 주제를 이해할 수 있을 거라 확신한다. |
|
추천의 글
양석호 javanese@naver.com
이클립스라는 이름은 이미 자바 개발 도구의 대명사이다. 물론 NetBeans, IntelliJ, JBuilder 심지어 javac+Notepad 같은 훌륭한 대안들이 많긴 하지만 인지도나 사용자 수에서 당분간은 이클립스가 자리를 지켜나갈 듯하다. 하지만 이클립스라는 이름을 개발툴이 아닌 다른 의미로 받아들이는 개발자들이 점점 늘어가고 있다. CDT 등의 지원을 바탕으로 범용 언어를 위한 개발 도구가 되어 가고 있다는 의미도 될 수 있겠다. 그와 더불어 이클립스는 Eclipse RCP(Rich Client Platform)이라는 이름 아래 점점 GUI 애플리케이션 플랫폼으로 자리를 잡아가고 있다.
이클립스의 태생이 플랫폼을 목표로 한 것인가에 대한 궁금증은 미뤄놓더라도, 해묵은 논쟁인 SWT 대 Swing, Eclipse RCP 대 NetBeans RCP 등의 이슈는 끊임없이 이어지고 있다. 하지만 GUI 플랫폼은 각각 장단점이 있을 뿐이다. 필자만 하더라도 개발 결과가 만족스러운 것은 SWT이지만 사실 개발할 때 정말 즐거운 것은 스윙이었다. 이클립스가 GUI 플랫폼으로 우월하다는 것은 단지 룩앤필과 API 설계 방식의 취향 문제라고 생각한다. 하지만 이클립스의 진정한 가치는 끊임없이 확장되고 있는 이클립스 에코시스템(ecosystem)에 있다. EMF, WTP, GEF, BIRT, TPTP, ECF, GMF 등 단일 플랫폼 내에서 이렇게 왕성하게 수준높은 결과물들이 일일이 열거하기도 힘들 정도로 쏟아져 나온 경우가 있던가? 이런 엄청난 프로젝트들을 떠받치고 있는 것이 OSGi와 SWT/JFace임은 피할 수 없는 현실이다. 플랫폼 고유 기능과의 조화를 강조하는 SWT/JFace의 철학을 싫어하는 순수 자바 개발자라 하더라도, 이런 최고급 프로젝트들의 소스까지 들여다 볼 수 있는 SWT/JFace라는 돋보기를 잠시라도 써보기를 바란다. 또한 웹에 의해 점점 소멸해가는 것 같던 리치 클라이언트 플랫폼은 Ajax, Flex 등의 개념으로 웹에서조차 다시 부활하고 있다. 세상은 돌고 도는데 자바 개발자라면 한번쯤 웹에서 벗어나 GUI 플랫폼으로 산책나오는 것이 어떻겠는가? 분명히 웹 애플리케이션 개발(특히 Ajax)에도 많은 도움이 될 것이라 생각한다. 이미 국내에도 이클립스 플랫폼 기반의 애플리케이션을 개발하고 있거나 준비중인 개인이나 회사가 많이 있다. 미약하나마 커뮤니티 활동도 이루어지고 있으며, 상당한 수준의 이클립스 애플리케이션을 이미 출시한 회사들도 있다. 하지만 새롭게 시작해보려는 개발자들이 참고할만한 이클립스나 SWT/JFace 관련 자료는 국내뿐만 아니라 해외에서도 손에 꼽을 수 있을 정도로 취약하다. 너무나 빠르게 변화하는 탓에 오히려 저변을 넓힐 틈을 얻기 힘든 것이다. 『SWT/JFace 인 액션』은 이클립스 3.0과 함께 출시된 SWT의 바이블이라 할 수 있다. 현재 이클립스 3.2는 OSGi를 인프라스트럭처로 채택한 획기적인 변화가 있지만 SWT/JFace 관련해서는 기능 추가 정도 외의 별다른 큰 변화는 없다. 비록 이 책이 최신 버전에 맞춘 서적은 아니지만 오히려 SWT/JFace의 핵심을 이만한 분량으로 자세하게 설명해냈다는 점에서 국내 이클립스 플랫폼 애플리케이션 개발자에게는 사막의 오아시스 같은 역할을 할 것이라 생각한다. 또한 RCP 뿐만 아니라 GEF의 중요성까지 예측했던 저자들의 혜안에 감탄하면서 감수를 마쳤다. |