다라다라V
article thumbnail
728x90
반응형

우리가 여태까지 짜왔던 프로그램은 텍스트로 직접 값을 입출력하고 처리하는 프로그램이었습니다. 그러나 일상에서 우리가 자주 사용하는 윈도우나 iOS은 그래픽 기반의 아이콘, 윈도우, 메뉴들을 눌러 프로그램을 실행시킵니다. 이번 포스트부터는 이렇게 그래픽 기반으로 작동하는 GUI 기반의 프로그래을 작성해봅시다.


📚 응용 프로그램

📃 CUI

  • 텍스트(문자열) 기반의 입출력
  • 명령을 키보드를 통해 직접 입력하여 프로그램을 실행하는 환경
  • 새로운 명령을 내리거나 입출력에 어려움이 있음

 

📃 GUI

  • CUI보다 더 쉽게 프로그램을 수행하도록 함
  • 윈도우, 아이콘, 메뉴와 같은 시각적인 요소들을 통해 프로그램을 구성
  • 마우스나 키보드로 입력 받아 실행

📚 GUI(Graphic User Interface) 프로그래밍

  • 그래픽을 이용하여 사용자에게 이해하기 쉽고 사용하기 쉬운 입출력 인터페이스 제공
  • 복잡한 명령 없이 마우스나 키보드를 이용하여 직관적으로 입력
  • 그래픽을 이용한 다양한 형태로 보기 쉬운 출력
  • GUI는 윈도우로만 결과를 보여주므로 윈도우 프로그래밍(Window Programming)라고도 함

 

  • GUI 프로그래밍의 또 다른 특징은 이벤트 기반(Event Driven) 프로그래밍
  • 마우스를 움직이거나 키보드를 누르면 발생하는 이벤트 발생과 그에 따른 처리로 동작
  • 사용자가 발생시키는 이벤트에 대한 메시지를 처리하는 루틴을 만들어 주는 것
  • 화면에 모든 내용이 출력되고 마우스나 키보드로 선택할 수 있음

 

GUI는 어떻게 그래픽 요소를 사용할지를 결정하는 화면 구성과 구성 요소를 통해 적절한 이벤트를 처리하는 이벤트 처리 과정 2가지로 나뉘어 구성됩니다.


📚 GUI 운영체제의 특징 

  • 메시지 구동 구조(Message-Driven Architecture)
  • OS는 프로그램 내/외부 변화 발생을 메시지를 통해 해당 프로그램에게 알려줌

  • 하나의 CPU는 하나의 시스템 내의 각 작업을 OS에 의해 순차적으로 처리
  • OS는 시스템 메시지 큐를 이용해 여러 어플리케이션에게 처리해야할 조작을 전달
    1. 발생한 이벤트는 시스템 메시지큐에 저장됨
    2. 시스템 메시지큐의 이벤트를 OS가 해당하는 프로그램에 전달함
    3. 운영체제는 메시지를 통해 각 내용을 전달함
  • CUI는 메시지를 절차적으로 처리하지만, GUI는 어떤 메시지가 도착했는지 확인하고 그에 맞는 처리를 함

📚 GUI 프로그래밍 

  • 사용자가 발생시키는 비동기적 이벤트에 대한 메시지를  처리
  • 메시지기반(Message Driven) 프로그래밍
  • 이벤트 기반(Event Driven) 프로그래밍
  • 응용 프로그램을  위한
    1. 화면  구성과,
    2. 사용자가 적절한 이벤트를 발생시키고
    3. 발생한 이벤트에 대한 처리 루틴
  • 을  만들어  주는  것

📚 프로그래밍 언어간 연관성 비교


📚 JAVA 기반의 GUI 프로그래밍의 특징

  • 강력한 GUI 컴포넌트 제공
  • JDK에서 제공하는 기본 제공 클래스를 통해
  • 쉬운 GUI 프로그래밍
  • 객체지향적 문제 해결 관점에서 프로그래밍

📚 JAVA 기반의 GUI 프로그래밍 방법

📃 AWT (Abstract Window Toolkit)

  • 자바 시초부터 배포된 운영체제 종속적인 GUI 패키지
  • 자바는 모든 임베디드 환경엣 구성이 가능하기 때문에 특정 환경에 맞추어서 코딩한 것은 활용성이 떨어짐
  • 운영체제마다 일관되지 못한 화면 구성
  • 최근에는 거의 사용하지 않음

 

📃 Swing

  • 순수 자바로 구현된 GUI 패키지
  • 제공된 GUI 패키지를 이용하여 프로그래밍하는 방법
  • 상대적으로 속도가 AWT 비해 느림

 

📃 SWT (Standard Widget Toolkit)

  • 이클립스에서 개발한 GUI 패키지, 이클립스도 SWT로 만들어짐
  • IBM이 개발, 현재는 이클립스 재단이 유지 보수
  • 모든 OS에서 구동 가능하지는 않음
  • Swing의 속도를 보완한다는 장점이 있지만, 제한된 상황에서 구현된다는 단점도 존재

 

📃 JavaFX

  • 자바 SE를 위한 표준 GUI 라이브러리
  • FLASH를 대체하기 위해 개발되었으나 현재 Swing의 계보를 이음
  • 데스크톱 애플리케이션 및 인터넷 애플리케이션 작성

📚 SWING 의 특징

  • 순수 JAVA로 자체 제작된 컴포넌트
  • AWT를 기반으로 함
  • 기존의 AWT의 상속 구조를 그대로 가져오지는 않음
  • 일부 AWT에서 사용하는 클래스를 그대로 사용하기도  함
  • AWT 컴포넌트를 Swing으로  재작성
  • Swing은 화면에 보여지는 기본 사항을, AWT는 내부적인 동작을 화면에 보인다고 생각하면 됨

 

  • 화려하고 다양한 컴포넌트로 쉽게 GUI 프로그래밍 가능 
  • 플랫폼에 관계없이 동일한 모양 지님

📚 GUI 라이브러리 계층 구조

 


📚 Swing 클래스의 특징

Swing 클래스는 이름이 거의 J로 시작하여 AWT 에 있는 클래스와 구분합니다. 스윙 컴포넌트는 두 가지 유형이 존재합니다.

📃 컴포넌트

  • 특정 기능을 수행하는 종단 구성요소
  • JComponent를 상속
  • 스윙의 구성요소들의 공통적인 속성을 구현한 추상 클래스
  • 버튼처럼 사용자 UI를 담당하는 객체 생성시 사용

 

📃 컨테이너 컴포넌트

  • 다른 컴포넌트를 포함할 수 있는 컴포넌트
  • AWT의 Container를 상속

컴포넌트는 각각의 음식을 담는 그릇이라고 생각할 수 있습니다. 컨테이너 컴포넌트는 이 그릇들을 한 곳에 묶어 관리하도록 도와주는 쟁반과 같습니다.


📚 컨테이너 컴포넌트

  • 자신의 영역에 다른 컴포넌트/컨테이너를 포함하고 관리하는 역할
  • java.awt.Container 로부터  파생
  • add()로 다른 컴포넌트/컨테이너 객체를 얹거나 다른 컨테이너에 포함시킬 수도 있음
  • 최상위 컨테이너는 다른 컨테이너에  포함되지  않고도  독립적으로  존재  가능
  • JFrame, JDialog 는 윈도우 프레임을 만들 때 사용하거나 대화상자를 만들때 사용하는 최상위 컨테이너
  • JPanel 는 컨테이너 배치를 위해 그룹을 지을 때 사용함

📚 컨테이너의 예

 

📚 컴포넌트

  • 특정 기능을 제공하는 하나의 객체
  • 추상 클래스인 javax.swing.JComponent를 상속 받는 클래스
  • 컨테이너에 포함되어 사용되는 경우에만 의미 있음
  • 다른 컴포넌트를 포함할 수 없는 종단 컴포넌트
  • JLabel, JButton, JTextField, JTextArea, JCheckBox, JRadioButton, JList, JComboBox 등

📚 컴포넌트 예


📚 Swing으로 만든 GUI 프로그램의 구성 예


📚 컨테이너와 컴포넌트의 포함관계

 

 

 

 

 

 

반응형

'코딩언어 > JAVA' 카테고리의 다른 글

[JAVA] 15 이벤트 처리  (0) 2022.11.17
[JAVA] 14-2 Swing의 기본 구성  (0) 2022.11.09
[JAVA] 13. 제네릭과 컬렉션  (0) 2022.11.05
[JAVA] 12. 예외처리  (0) 2022.11.04
[JAVA] 11 추상 클래스와 인터페이스  (0) 2022.11.03
profile

다라다라V

@DaraDaraV

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!