<비교>
AWT: 내부적으로 C언어로 구성.
운영체제에서 지원하는 컴포넌트를 얻어 옴.
java.awt.*;
Swing: 순수자바언어로 구성. (운영체제에 상관없이 동일한 컴포넌트 지원)
javax.swing.*;
<MVC Model2구조>
1. Model(모델)
- 비즈니스로직과 관련된 부분 처리.
- 데이터베이스 관련로직 구현
- JSP Beans, EJB Component
- 애플리케이션의 데이터를 표현.
예)
class Calculator{
public int plus(int su1, int su2){
return su1+su2;
}
}
---> 데이터를 가공 처리
int result = plus(2,3);
class Person{
String name;
int age;
String job;
}
---> 서로 관련있는 속성을 클래스로 묶음 : JavaBeans
class DBTest{
public void insert(){
}
}
---> DB access하는 클래스
2. View(뷰)
- 사용자에게 알맞은 화면을 보여주는 역할 수행.
- JSP, CustomTag
- 데이터를 시각적으로 표현하는것.
역할)
1. 결과값 출력
2. 사용자 요구(버튼클릭: 음료수가 먹고싶다.)
3. 사용자 데이터 입력.
3. Controller
- 애플리케이션의 흐름제어나 사용자의 처리요청을 구현
- 사용자인증, 보안설정이라든지
전체 애플리케이션에 영향을 미치는 요소구현
- 사용자 요청에 알맞은 모델을 사용하고
사용자에게 보여줄 뷰를 선택
- Servlet
- 사용자가 View(GUI)를 통해 입력을 하면 Model(데이터)을
변경해 주는것.
<계산기>
MVC패턴으로 작성
- 뷰 (calc.view)
CalcView.java : 계산기폼
- 모델 (calc.model)
Calculator.java : 더하기, 빼기, 곱하기, 나누기 기능
- 컨트롤러 (calc.control)
CalcController.java : 전체 프로그램 제어 (main()메소드 포함)
<Controller>
package calc.control;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import calc.model.Calculator;
import calc.view.CalcView;
public class CalcController implements ActionListener{
//뷰를 등록
CalcView view;
public CalcController() {
view = new CalcView();
view.bt_calc.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e) {
//===> 컨트롤러의 역할 코드를 위치.
if(e.getSource() == view.bt_calc) {//1.
//2. 데이터 얻기
String su1 = view.tf_su1.getText();
String su2 = view.tf_su2.getText();
String oper = view.cb_oper.getSelectedItem().toString();
//oper = "+" "-" "*" "/"
//3. Model 객체생성
/*Calculator calc = new Calculator();
int result = calc.plus(
Integer.parseInt(su1),
Integer.parseInt(su2));
System.out.println("result="+result);*/
//3.
Calculator calc = new Calculator(
Integer.parseInt(su1),
Integer.parseInt(su2),
oper);
String result = calc.getResultStr();
view.la_result.setText(result);
}
}
public static void main(String[] args) {
new CalcController();
}
★★<컨트롤러의 역할> - 전체 프로그램에 대한 흐름 제어!!
1. (뷰를 통해 전달된)사용자의 요청 분석 : if(ob==bt_new)
2. (사용자가)입력된 데이터 얻어오기 : tf.getText()
3. 모델클래스 객체생성!! : Calculator c = new Calculator();
- 메소드 호출 c.plus(2,3);
- 리턴된 데이터를 (변수에)저장 int result = c.plus(2,3);
4. 페이지 이동, 이동할 페이지(프레임) 선택 f1.setVisible(false);
f2.setVisible(true);
5. 유효성 검사 ===> 뷰에서 검사하기도 함.
<Model>
package calc.model;
public class Calculator {//사칙연산 기능 정의
/*public int plus(int su1, int su2) {
return su1+su2;
}*/
private int su1;
private int su2;
private String oper;
private int result;
public Calculator(int su1, int su2, String oper) {
this.su1 = su1;
this.su2 = su2;
this.oper = oper;
choice();
}
private void choice() {
if(oper.equals("+")) plus();
else if(oper.equals("-")) minus();
else if(oper.equals("*")) multi();
else div();
}//choice
public void plus() {
result = su1+su2;
}
public void minus() {
result = su1-su2;
}
public void multi() {
result = su1*su2;
}
public void div() {
result = su1/su2;
}
public String getResultStr() {
return "결과값: "+su1+ oper+ su2+ "="+ result;
}
}
<View>
package calc.view;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
public class CalcView extends JFrame{
public JTextField tf_su1,tf_su2;
public JComboBox<String> cb_oper;
public JButton bt_calc;
public JLabel la_result;
public CalcView() {
setTitle("MVC계산기");
tf_su1 = new JTextField(5);
tf_su2 = new JTextField(5);
cb_oper = new JComboBox<>();
cb_oper.addItem("+");
cb_oper.addItem("-");
cb_oper.addItem("*");
cb_oper.addItem("/");
bt_calc = new JButton("계산");
la_result = new JLabel();
setLayout(new FlowLayout());
add(tf_su1);
add(cb_oper);
add(tf_su2);
add(bt_calc);
add(la_result);
setBounds(300,200, 320,120);
setVisible(true);
setResizable(false);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}//생성자
}
'JAVA' 카테고리의 다른 글
Inner class & Anonymous class with JAVA & Kotlin (0) | 2020.02.05 |
---|---|
#11 PersonMenu MVC, Thread(스레드) (0) | 2018.12.10 |
#9 Event 처리 (0) | 2018.12.02 |
#8 중첩클래스, TUI, AWT, 데이터저장 (0) | 2018.11.26 |
#7 배열사용이유, 배열(Vector), Exception(예외처리), Matches, StringTest (0) | 2018.11.25 |