반응형
주제 : 제어 구조(Control Structure)
- 기술한 순서대로 진행
- 메서드 호출
선택 구조 : If와 else문을 사용하여 작성하는 문법
import javax.swing.JOptionPane;
public class Conditional {
public static void main(String[] args) {
String input = JOptionPane.showInputDialog("나이를 알려주세요");
int age = Integer.parseInt(input);
if(age<19)
System.out.println(age + "세는 미성년입니다.");
else
System.out.println(age + "세는 성년입니다.");
int n = Integer.parseInt(JOptionPane.showInputDialog("역수를 계산해드립니다."));
if (n==0)
System.out.println("0은 역수가 없습니다.");
else
System.out.println(n+"의 역수는 " + 1.0/n + "입니다.");
}
}
중첩 선택 : if와 else를 많이 사용하여 여러 가지 경우의 수로 표현하는 것을 말한다.
논리 연산 :
예외 처리 : 특정 조건을 충족하였을 때 프로그램을 나가는 등의 코드가 작동하도록 프로그래밍하는 것이다.
if (dollars<0 || cents<0 || cents>99) {
System.exit(0);
}
switch : switch( ) { } 문 안에 case와 break를 사용하여 조건문을 나누는 것을 뜻한다. 별로 권장하지 않는다.
애플리케이션 구현 절차
스텝 1 : 유즈 케이스(use-case) 수집 --> View(사용자 인터페이스) 설계
스텝 2 : 클래스 다이어그램 작성
스텝 3 : 클래스 별로 클래스 명세 작성
스텝 4 : 클래스 별로 코드 작성 및 테스트
스텝 5 : 통합 테스트
사례 학습 : 지갑 애플리케이션
스텝 1 : 유즈 케이스 수집 + 사용자 인터페이스 설계
- 서비스 : 수입(+), 지출(-), 종료(Q, q)
- 금액 : 정수(음수 불가)
스텝 2 : 클래스 다이어그램 작성
스텝 3 : 클래스 명세 작성
스텝 4 : 코드 작성
스텝 5 : 테스트 및 버그 수정
//Model
public class Purse {
private int balance;
public boolean earn(int amount) {
if (amount<0) {
return false;
}
else {
balance+=amount;
return true;
}
}
public boolean spend(int amount) {
if (amount<0|| amount>balance) {
return false;
}
else {
balance-=amount;
return true;
}
}
public int getBalance() {
return balance;
}
}
//View
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.*;
public class PurseWriter extends JPanel{
private Purse purse;
String last_transaction;
public PurseWriter(String title, int x, int y, Purse p) {
purse = p;
JFrame f = new JFrame();
f.getContentPane().add(this);
f.setTitle(title);
f.setLocation(x,y);
f.setSize(300, 200);
f.setVisible(true);
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
protected void paintComponent(Graphics g) {
g.setColor(Color.white);
g.fillRect(0, 0, 300, 222);
g.setColor(Color.black);
g.drawString(last_transaction, 50, 50);
g.drawString("잔액 = " + purse.getBalance(), 50, 70);
}
public void showTransaction(int amount, String message) {
last_transaction = amount + " " + message;
this.repaint();
}
public void showTransaction(String message) {
last_transaction = message;
this.repaint();
}
}
//View
import javax.swing.JOptionPane;
public class PurseReader {
public char readRequest(String message) {
String input = JOptionPane.showInputDialog(message);
return input.charAt(0);
}
public int readAmount(String message) {
String input = JOptionPane.showInputDialog(message);
input = input.trim();
if(input.length()>0)
return Integer.parseInt(input);
else {
JOptionPane.showInputDialog(null, "금액 입력 오류");
return 0;
}
}
}
//Controller
public class PurseController {
private PurseReader reader;
private PurseWriter writer;
private Purse purse;
public PurseController(PurseReader r, PurseWriter w, Purse p) {
reader = r; writer = w; purse = p;
}
public void processTransactions() {
String message = "+,-,Q 키 중 하나를 누르고 OK 단추를 누르세요.\n 수입 +, 지출 -, 종료 Q";
char request = reader.readRequest(message);
message = "금액을 입력하고 OK 닻루를 누르세요.";
int amount;
if(request == 'Q' || request == 'q') {
writer.showTransaction("서비스를 마칩니다.");
return;
}
else if(request == '+') {
amount = reader.readAmount(message);
if(purse.earn(amount))
writer.showTransaction(amount, "수입");
else
writer.showTransaction("수입 실패");
}
else if(request == '-') {
amount = reader.readAmount(message);
if (purse.spend(amount))
writer.showTransaction(amount, "지출");
else
writer.showTransaction("지출 실패");
}
else
writer.showTransaction("요청 오류");
this.processTransactions();
}
}
728x90
반응형