자바

자바 Swing 완전 정복: AWT와 차이부터 실전 예제까지 한눈에 이해하기

로기221 2025. 5. 25. 21:50
728x90
반응형

 

자바 스윙(Swing) 완벽 정리

 

스윙(Swing)이란?

  • Swing은 자바에서 GUI(그래픽 사용자 인터페이스) 프로그램을 만들기 위한 대표적인 라이브러리입니다.
  • 자바의 JFC(Java Foundation Classes) 중 하나로, AWT(Abstract Window Toolkit)를 확장하여 더 많은 컴포넌트와 기능을 제공합니다.
  • 100% 순수 자바로 작성되어 운영체제와 무관하게 동일한 UI(룩앤필, Look & Feel)를 구현할 수 있습니다.

 

AWT와 Swing의 차이

구분 AWT Swing
구현 방식 OS의 네이티브 위젯 사용(무거움) 자바가 직접 그려서 경량(가벼움)
플랫폼 의존성 OS별 UI 차이 있음 모든 OS에서 동일한 UI
컴포넌트 종류가 적고 단순 매우 다양하고 화려함
클래스명 Frame, Button 등 JFrame, JButton 등(J로 시작)
룩앤필 OS에 따라 다름 실행 중에도 자유롭게 변경 가능
MVC 패턴 따르지 않음 MVC 패턴을 적용
  • Swing은 AWT를 기반으로 하며, 기존 AWT 컴포넌트에 J를 붙인 이름의 클래스를 많이 사용합니다

 

스윙의 주요 특징

  • 플랫폼 독립적: 어떤 OS에서도 동일한 UI 제공
  • 풍부한 컴포넌트: 버튼, 체크박스, 라벨, 텍스트필드, 테이블, 트리, 메뉴, 다이얼로그 등 다양한 컴포넌트 제공
  • 룩앤필(Look & Feel): 운영체제 스타일을 모방하거나, 자바 고유의 스타일로 자유롭게 변경 가능
  • MVC 패턴 적용: Model-View-Controller 구조로 데이터와 UI, 이벤트 처리를 분리하여 관리
  • 더블 버퍼링 지원: 화면 깜빡임 없이 부드럽게 그리기 가능
  • 이벤트 기반 프로그래밍: 버튼 클릭, 텍스트 입력 등 사용자 동작에 반응하는 이벤트 리스너 구조
  • 자체 그리기: OS 위젯을 사용하지 않고 자바가 직접 컴포넌트를 그림
  • J로 시작하는 클래스: JFrame, JButton, JPanel, JLabel 등

 

Swing의 주요 컴포넌트

  • JFrame: 최상위 윈도우(프레임)
  • JPanel: 컴포넌트들을 그룹화하는 컨테이너.
  • JButton: 버튼 컴포넌트
  • JLabel: 텍스트나 이미지를 표시하는 라벨
  • JTextField, JTextArea: 한 줄/여러 줄 텍스트 입력
  • JCheckBox, JRadioButton: 체크박스, 라디오 버튼
  • JTable: 표 형태의 데이터 표시 및 편집
  • JTree: 계층 구조(트리) 데이터 표시
  • JMenuBar, JMenu, JMenuItem: 메뉴바, 메뉴, 메뉴 아이템
  • JDialog, JOptionPane: 다이얼로그(팝업) 창

 

Swing의 구조와 코드 예시

기본 구조

import javax.swing.*;

public class SimpleSwingExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("스윙 예제");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300, 200);

        JLabel label = new JLabel("Hello, Swing!", JLabel.CENTER);
        frame.getContentPane().add(label);

        frame.setVisible(true);
    }
}

 

  • JFrame을 생성하고, JLabel을 추가하여 간단한 윈도우를 띄우는 예제입니다

이벤트 처리 구조

  • Swing은 이벤트 기반 프로그래밍을 지원합니다.
  • 예를 들어, 버튼 클릭 시 동작을 지정하려면 ActionListener를 사용합니다.
JButton button = new JButton("클릭");
button.addActionListener(e -> JOptionPane.showMessageDialog(null, "버튼이 눌렸습니다!"));
 
  • 이처럼 다양한 이벤트 리스너를 통해 사용자와 상호작용할 수 있습니다

 

Swing의 장점과 단점

장점

  • 운영체제와 무관하게 동일한 UI 제공
  • 다양한 컴포넌트와 강력한 기능
  • 실행 중 룩앤필 변경 가능
  • MVC 패턴으로 구조화된 개발 가능
  • 더블버퍼링 등 그래픽 성능 향상 기능 내장

단점

  • AWT보다 CPU·메모리 사용량이 많음
  • 복잡한 UI에서는 성능 오버헤드 발생할 수 있음
  • 네이티브 UI와 완전히 동일하지 않을 수 있음

 

실무 팁

  • Swing은 스레드에 안전하지 않으므로 UI 변경은 반드시 SwingUtilities.invokeLater()로 처리해야 함
  • 복잡한 UI는 레이아웃 매니저(FlowLayout, BorderLayout, GridLayout 등)를 적절히 활용해야 유지보수와 확장성이 높아집니다.
  • 다양한 컴포넌트와 이벤트 처리 구조를 이해하면 데스크톱 응용프로그램을 쉽고 빠르게 개발할 수 있습니다.

 

마무리

Swing은 자바에서 데스크톱 GUI를 개발할 때 가장 널리 쓰이는 라이브러리로, 다양한 컴포넌트와 플랫폼 독립성을 강점으로 합니다. 기본 구조와 주요 컴포넌트, 이벤트 처리 방식만 익혀도 실무에 필요한 대부분의 UI를 구현할 수 있습니다.
실제 예제와 함께 다양한 컴포넌트를 연습해보면 더욱 빠르게 익힐 수 있습니다

728x90
반응형