자바
자바 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
반응형