본문 바로가기

자바공부

자바의 GUI, 명품 자바 프로그래밍 9장

728x90
반응형

* GIU란 Graphical User Interface의 약자로서 이미지 혹은 그래픽을 이용하여 메뉴 등을 포함하는 화면을 구성하고, 키보드 외 마우스 등의 편리한 입력 도구를 이용하여 사용자가 입력하기 편하도록 만들어진 사용자 인터페이스이다.

소프트웨어 개발자들은 프로그래밍 언어를 선택함에 있어 GUI를 작성하기에 편한 장더와 다양한 기능 여부를 중요한 기준으로 삼는다.

자바는 AWT와 Swing 패키지 등 어떤 언어보다 강력한 GUI 라이브러리르 제공하여, 소프트웨어 개발자들이 다양한 GUI를 쉽게 구성하도록 해준다.

일반적으로 GUI 응용프로그램과 그렇지 않은 콘솔 기반 응용프로그램은 작성 방식이 서로 다르다. 

 

* AWT와 Swing패키지

자바 언어는 GUI 응용프로그램을 쉽게 작성할 수 있도록 다양한 GUI 컴포넌트 (GUI component)를 제공하낟. 

자바의 GUI 컴포넌트는 AWT 컴포넌트와 Swing 컴포넌트로 구분되며, 각각 java.awt 패키지와 javax.swing 패키지를 통해 공급된다.

 

* AWT (Abstract Windowing Toolkit)는 자바가 처음 나왔을 때 함께 배포된 패키지로서 많은 GUI 컴포넌트를 포함한다.

Frame, WIndow, Panel, Dialog, Button, Label, TextField, Checkbox, Choice 등.

AWT의 컴포넌트들은 중량 컴포넌트(heavy weight component)로 불린다.

이 컴포넌트들은 운영체제(native OS)의 도움을 받아 화면에 출력되기 때문에 운영체제의 잔웡늘 많이 소모하여 운영체제에 많은 부담을 준다.

AWT는 실행되는 운영체제에 따라 다른 모양으로 그려진다.

 

* Swing은 AWT와 달리 순수 자바 언어로 작성되었다.

운영체제의 도움을 받지 않기 때문에 스윙 컴포넌트들은 경량 컴포넌트(light weight component)라고 불린다.

그러므로 스윙 컴포넌트들은 우영체제와 관계없이 항상 동일하게 작동하며 동일한 모양으로 그려진다.

모든 AWT 컴포넌트들이 100% 호환되도록 스윙 컴포넌트로 다시 작성되었으며, 스윙 컴포넌트의 이름은 AWT 컴포넌트와 구분하기 위해 모두 대문자 J로 시작한다.

스윙은 AWT에 구현된 이벤트 처리나 GUI 컴포넌트의 기본 원리를 바탕으로 작성되었기 때문에, 스윙을 사용하기 위해 AWT패키지가 필요하다.

 

* 스윙과 AWT는 작동하는 내부 구조가 서로 다르게 구현되어 있기 때문에 스윙 컴포넌트와 AWT 컴포넌트를 혼용해서는 안 된다. 예를 들어, JButton과 Button을 한 프로그램에서 동시에 사용해서는 안 된다.

 

* 스윙 응용프로그램은 마치 레고 블록으로 조립하듯이 스윙 컴포넌트들을 조립하여 작성된다. 

 

* 모든 GUI 컴포넌트들은 Component 클래스를 반드시 상속받으며, 스윙 컴포넌트의 클래스 명은 모두 J로 시작한다.

AWT 컴포넌트는 Button, Label 등과 같이 Component를 직접 상속받는 것들과 Panel, Frame 등과 같이 Container를 상속받은 것들이 있다.

그리고 JApplet, JFrame, JDialog를 제외한 모든 스윙 컴포넌트들은 JCompoenet를 상속 받는다.

 

AWT와 Swing 클래스의 상속 관계도

* 자바의 GUI 응용프로그램은 GUI 컴포넌트들로 구성되며, GUI 컴포넌트들은 다른 컴포넌트를 포함할 수 있는지 여부를 따라 순수 컴포넌트와 컨테이로 분류된다. 빈 판위에 레고 블록을 쌓아 가듯이, GUI 컴포넌트들을 쌓아 GUI 응용프로그램을 구성한다.

 

* 컨테이너란 다른 GUI 컴포넌트를 포함할 수 있는 컴포넌트이다. 그리므로 컨테이너는 컴포넌트이면서 동시에 컨테이너이다.

컨테이너가 되기 위해서는 java.awt, Container 클래스를 상속받아야만 한다.

Container 클래스는 java.awtm Component를 상속받기 때문에 컨테이너가 컴포넌트이기도 한 것이다.

컨테이너는 다른 컨테이너에 컴포넌트로 포함될 수도 있다.

 

* 한편, 컴포넌트란 컨테이너와 달리 다른 컴포넌트를 포함할 수 없으며, 컨테이너에 포함되어야 비로소 화면에 출력될 수 있는 GUI 객체이다.

AWT나 Swing의 모든 컴포넌트들은 java.awt.Component를 상속받기 때문에, Component 클래스에는 모든 컴포넌트들의 공통적인 속성과 기능이 작성되어 있다. 

또한 순수 스윙 컴포넌트들은 모두 javax.swing.JComponent를 상속 받으며, JComponent에는 스윙 컴포넌트들의 공통적인 기능이 작성되어 있다.

 

* 컨테이너 중에서 다른 컨테이너에 속하지 않고도 독립적으로 화면에 출력될 수 있는 컨테이너를 최상위 컨테이너(Top Level Container)라고 한다. JFrame, JDialog, JApplet의 3가지가 이에 속한다.

 

* 자바 스윙 응용프로그램은 JFrame과 같은 최상위 컨테이너 위에 컨테이너와 컴포넌트들이 마치 레고 블록을 쌓는 것처럼 컨테이너와 컴포넌트의 계층 구조로 성되어, 컨테이너에 부착된 컴포넌트들을 작식 컴포넌트라고 부른다.

 

Swing 응용프로그램에서 컨테이너와 컴포넌트의 포함 관계

 

반응형