쌍용교육센터에서 공부한 내용을 정리하며 기록하는 글이고 주관적인 생각이 들어갈 수 있습니다.
잘못된 내용이나 피드백 및 생각 공유는 언제든 환영입니다.
댓글로 남겨주시면 확인 후 수정하겠습니다.
Design Pattern은 개발된 프로그램을 분석하여 몇 가지 패턴으로 추려낸 것이다.
MVC Pattern은 디자인 패턴 중에 하나이고
MVC(Model View Controller)는 하나의 업무를
데이터, 화면, 업무로 구분하여 개발하는 디자인 패턴이다.
M(Model) 는 데이터 처리, V(View)는 데이터를 사용하여 화면을 제공
C(Controller)는 업무로직을 처리하는 것으로 구분한다.
하나의 파일에 디자인코드, 데이터 처리코드, 업무 로직 코드가
들어가게 되면 장점은 파일관리, 값 넘기기, 에러처리가 편하다.
하지만 단점은 복잡도가 그만큼 높아지고 유지보수가 힘들어진다.
프로그램의 생명이 끝날 때는 유지보수가 되지 않을 때이다.
MVC 패턴은 파일관리, 값 넘기기, 에러 처리가 불편하지만
파일의 복잡도가 낮아지고 유지보수가 편해진다.
그래서 MVC 패턴을 사용한다.
MVC Pattern이 도입된 컴포넌트들은 JComboBox, JList, JTable이 있다.
기존 컴포넌트는 뷰를 생성해 뷰에 데이터 처리 등을 전부 담당하게 했는데
JComboBox에서는 나눠서 담당한다.
JComboBox는 디자인코드를 담당하고 데이터를 받아서 보여주는 일을 한다.
DefaultComboBoxModel은 데이터 처리코드를 담당하고 데이터 저장과 얻기, 삭제를 관리한다.
사용법은 아래와 같다.
//1. Model 클래스를 생성
DefaultComboBoxModel<E> dcm = new DefaultComboBoxModel<E>();
//2. View 생성 (has a 관계)
JComboBox jcb = new JComboBox(dcm);
//3. 데이터 추가(Model 사용)
dcm.addElement("값");
//4. 값 얻기(Model 사용)
dcm.getElementAt(인덱스);
Event Handling은
사용자가 어떠한 동작을 수행하면 정해진 코드를 수행하는 것이다.
Event 처리 클래스는 java.awt.event 패키지에서 제공한다.
Swing에서는 awt.event 클래스를 사용한다.
그리고 XxxListener interface가 존재한다.
XxxListener interface는 사용자가 발생시키는 이벤트를 감지할 수 있는 인터페이스이다.
interface를 구현한 클래스에서 이벤트 처리코드를 기술한다.
구현법으로는 아래와 같다.
//1. XxxListener를 구현하는 클래스를 작성
public class Test extends JFrame implements ActionListener
//2. 이벤트 처리와 관련있는 컴포넌트를 instance 변수로 선언
JButton jbtn;
//3. 생성
public Test(){
jbtn = new JButton("버튼");
//4. 컴포넌트를 이벤트를 발생시킬 수 있도록
// 이벤트 등록하고 처리할 객체를 기술
//jbtn.addActionListener(이벤트 처리 객체);
jbtn.addActionListener(this);
//이벤트가 발생되면 해당 객체의
//Override된 method가 호출된다.
}
}
Event의 종류로는 아래 표와 같다.
사용자의 동작 | 발생되는 이벤트 클래스 | 청취자 인터페이스 | 주 사용 컴포넌트 |
클릭 / 엔터 | ActionEvent | ActionListener | - Button류(JButton, JRadioButton, JCheckBox, JMenuItem 등) jbtn.addActionListener (이벤트를 처리할 곳); - TextComponent(JTextField, JPasswordField) jtf.addActionListener(this); |
아이템 선택 | ItemEvent | ItemListener | -JComboBox, JList |
윈도우 종료 | WindowEvent | WindowListener | -JFrame |
키보드의 키 | KeyEvent | KeyListener | -키보드 입력을 받는 컴포넌트 JTextField, JPasswordField, JTextArea |
마우스 | MouseEvent | MouseListener | -마우스 포인터, 클릭을 할 수 있는 컴포넌트 |
클릭으로 버튼을 눌렀을 때로 동작 순서와 소스 코드는 아래와 같다.
1. ActionEvent 발생
2. ActionEvent를 청취할 수 있는 Listener인 ActionListener 구현하는 클래스 작성
3. Override한 method안에서 사용자에게 제공할 동작 구현
4. 사용자에게 동작 제공
//1. 윈도우 컴포넌트 상속, 이벤트 리스너 구현
public class Test extends JFrame implements ActionListener {
//프레임 생성(OS>JVM으로부터 가져옴)
public Test() {
//2. 버튼 생성 (JVM에서 가져옴)
JButton jbtn = new JButton("클릭");
//3. 이벤트가 발생되었을 때 처리할 객체는 나 자신(이벤트에 jbtn과 test의 주소를 저장)
Jbtn.addActionListener(this);
//4. 배치
add("Center", jbtn);
//5. 사이즈 설정
setSize(200, 100);
//6. 가시화
setVisable(true);
}
public void actionPerformed(ActionEvent ae) {
JOptionPane.showMessageDialog("버튼이 클릭");
}
public static void main(String[] args) {
new Test();
}
}
다른 컴포넌트에서 동일 이벤트를 발생했을 때 비교할 수 있다.
class Test extends JFrame implements ActionListener {
private JButton btn1, btn2;
public Test() {
btn1 = new JButton("버튼1");
btn2 = new JButton("버튼2");
btn1.addActionListener(this);
btn2.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent ae) {
// 코드
// btn과 btn2가 눌려도 동일한 일만 수행할 수 있다
// 이벤트를 발생시킨 객체를 비교해야 한다
ae.getSource(); // 이벤트를 발생시킨 객체의 주소를 얻는 일
if (ae.getSource() == btn1) {
// btn이 눌렸을 때 제공할 코드
}
if (ae.getSource() == btn2) {
// btn2가 눌렸을 때 제공할 코드
}
}// actionPerfromed
}
배우고 느낀점
오늘은 MVC패턴이 사용된 컴포넌트와 이벤트를 다뤄보았다.
MVC 패턴은 웹에서도 어디에서도 많이 사용하는 디자인 패턴이다.
간략하게 컴포넌트를 통해서 데이터 처리와 보여주는 일을 나눠서 하는 것을 알게 됐다.
그리고 클릭이나 엔터로 이벤트를 발생시키면 그 클릭으로 발생하는 소스코드들을
설정하는 법을 알아보았다. 여러 컴포넌트들과 이벤트들을 더 알면서
객체지향에 대해 개념과 여러 관계들에 대해서 공부를 하면 좋을 것 같다.
'성장 일기 > 쌍용교육센터' 카테고리의 다른 글
0105/Font, 예외 처리 (0) | 2023.01.05 |
---|---|
0104/Swing Component (0) | 2023.01.04 |
0102/Swing Component (0) | 2023.01.02 |
1229/AWT, Swing (0) | 2022.12.29 |
1228/Set, Map (0) | 2022.12.28 |