Automotive/EclipseRCP

SWT/JFACE 발전 흐름

TimeSave 2021. 1. 28. 15:26

A. 발전흐름(시간순서)

1. Swing(이클립스 GUI 개발의 시작)

- 목적 : Sun Microsystems가 98' 에 플랫폼 독립적인 GUI 어플리케이션 개발을 위해 라이브러리 배포

- 지금 안쓰는 이유 : 개발 복잡함, 실행 느림

- 느린 이유

  •  각 운영체제는 고유 GUI 외양, 행위 특징 등이 있음. 운영체제의 객체를 사용하지 않고, 모든 것을 처음부터 다시 생성하기 때문(경량 컴포넌트라고 함)
  • - Swing의 MVC 방법론( Model - Delegate Architecture) : Delegate;대신한다는 의미, View에 Controller 합친 것을 의미한다.

-> Model & UI Delegate(=View + Controller ) 로 구성

 

2. SWT(Swing 의 대안으로 나옴)

- 중량 컴포넌트 방식 사용 : 운영체제의 객체를 직접 접근하여 사용(JNI; JAVA Native Interface 통해 사용)

-> 운영체제 마다 GUI 외양이 다를 수 있음(but 인터페이스 방식은 동일)

- 특별한 제약사양 없음

-> Model - Delegate 없이, 자유로운 아키텍처 사용

 

3. JFACE : SWT 만 사용했을 때 시간이 많이 걸리는 일을 간소화, 자동화 시킨 라이브러리

-> 모델 기반으로 쪼갰다고 한다.

 

B. SWT/ JFACE 구조

 

1. SWT : Display, Shell, Widget 으로 구성된다.

-> OS 위에 Display를 얹고 (Display 객체 생성시 자동으로 얹어짐), Display 객체는 OS와 통신한다고 한다.

readAndDispatch 메소드 로 통신상태를 확인한다.

-> Display에 Shell 객체를 얹고

-> Shell 객체에 Widget을 얹는다.

 

ex) 아래처럼 초기화를 진행한다

Display display = new Display();//Display 객체를 생성하고(이러면 OS 위에 얹어진다)

Shell shell = new Shell(display); //display 객체에 Shell 객체를 얹고

Text helloText = new Text(shell, SWT.CENTER); // shell 객체에 Text Widget을 얹는다.

 

-> 여기에서 Shell을 열고 shell.open();

-> .isDisposed()로 Shell의 상태를 확인한다.

-> .pack() 메소드 : 필요한 만큼만 구성요소의 공간 할당.

 

2. JFACE : model-based adapters(=Helper Class)

-> model adapter class는 크게 7개로 이루어 진다.

- Viewer

- Action

- Contribution

- Image

- Font registry

- Dialog

- Wizard

 

-> JFace는 SWT의 Shell을 ApplicationWindow Class를 통해 만든다.

-> Shell을 Control 할 필요없이 ApplicationWindow 객체가 컨트롤 해 준다.

-> Applicaton Window를 생성하면 Display와 Shell 객체가 자동 생성된다는 뜻이다.

-> ApplicationWindow에는 Shell 표현 메소드가 정해져 있다.

-> 위 메소드를 Override 해서 사용한다.

-> CreateContents(Composite parent): parent라는 이름의 Composite 만든 후 return 하고, ApplicationWindow가 이를 받아 Shell에 보여줌

-> SWT에서 While로 객체 살았는지 죽었는지 체크하는 부분을, JFace는 하나의 메소드로 정리했다.

-> Open(true)는 윈도우 닫힐 때 까지 대기해라, false는 작업 끝나면 바로 자원을 돌려줘라 는 의미이다.

-> 남은 객체 dispose는 수동으로 해 줘야 한다.

 

참고

elvis-note.tistory.com/entry/Swing%EA%B3%BC-SWTJFace-1

www.zentut.com/java-swing/introduction-to-java-swing/

golmaru.tistory.com/10

hangumkj.blogspot.com/2009/12/eclipseswtjface-eclipse-rcpplugins-gef.html  : 학습 커리큘럼 자료

devx.tistory.com/entry/%ED%8A%B9%EC%A7%91%EA%B8%B0%EC%82%ACSWT-%EC%83%81%EC%86%8D%EB%B0%9B%EC%A7%80-%EB%A7%88%EC%84%B8%EC%9A%94-JFace%EC%97%90%EA%B2%8C-%EC%96%91%EB%B3%B4%ED%95%98%EC%84%B8%EC%9A%94?category=367683