Java 코드연습/UI코드 분리
[뉴렉처] UI 코드는 분리하는 것이 기본
양상추상츄
2021. 10. 22. 11:56
package Exam_1.UI코드분리하기;
public class ExamConsole {
}
UI코드를 넣을 클래스 생성
package Exam_1.UI코드분리하기;
import java.util.Scanner;
public class ExamList {
private int current;
private Exam[] exams;
public ExamList() { // 생성자 : 객체 생성시 단한번만 실행 되게됨
this.exams = new Exam[3];
this.current = 0;
}
void inputList() { //앞에 private 있으면 호출 안됨 다른 클래스에서 못씀
Scanner scan = new Scanner(System.in);
System.out.println("--------------------");
System.out.println("성적입력");
int kor, eng, math;
do {
System.out.print("국어 : ");
kor = scan.nextInt();
if(kor<0||100<kor) {
System.out.print("국어성적은 0~100까지 범위만 입력해주세요");
}
}while(kor<0||100<kor);
do {
System.out.print("영어 : ");
eng = scan.nextInt();
if(eng<0||100<eng) {
System.out.println("영어성적은 0~100까지 범위만 입력해주세요");
}
}while(eng<0||100<eng);
do {
System.out.print("수학 : ");
math = scan.nextInt();
if(math<0||100<math) {
System.out.println("수학성적은 0~100까지 범위만 입력해주세요");
}
}while(math<0||100<math);
// Exam exam = new Exam();
// exam.setKor(kor);
// exam.setEng(eng);//exam.eng = eng;
// exam.setMath(math);//exam.math = math;
Exam exam1 = new Exam();
Exam exam = new Exam(kor, eng, math);
//-----------add--------------------------
add(exam);
}
private void add(Exam exam) {
Exam[] exams = this.exams;
int size = this.current;
if(exams.length == size) {
//1. 크기가 5개정도 더 큰 새로운 배열 생성
Exam[] temp = new Exam[size+5];
//2. 값을 이주시키기
for(int i=0; i<size; i++) {
temp[i] = exams[i];
//3. list.exams가 새로만든 temp 배열을 참조하도록함
//exams = temp 하고는 다름 이거는 틀림
this.exams = temp;
}
}
this.exams[this.current] = exam; // 이부분이 좀 이해가 안되지만 값이 여기서 들어간듯함
this.current++;
}
void printList() {//overloading
this.printList(this.current);//성적입력할때마다 list.current가 ++됨, 갯수만큼 출력
}
void printList(int size) { //size를 지정하면 size만큼만 출력
System.out.println("---------------------");
System.out.println("성적출력");
//int size = list.current;//성적입력할때마다 list.current가 ++됨, 갯수만큼 출력
for(int i=0; i<size; i++) {
Exam exam = this.get(i);
int kor = exam.getKor();
int eng = exam.getEng();//exam.eng;
int math = exam.getMath();//exam.math;
int total = exam.total();//kor+eng+math;
float avg = exam.avg(); // 3.0f;
System.out.printf("국어%d : %d\n", i+1, kor);
System.out.printf("영어%d : %d\n", i+1, eng);
System.out.printf("수학%d : %d\n", i+1, math);
System.out.printf("총점 : %3d\n", total);
System.out.printf("평균 : %6.2f\n", avg);
System.out.println("----------------------");
}
}
private Exam get(int i) {
return this.exams[i];
}
}
add 부분을 따로 정리함
package Exam_1.UI코드분리하기;
public class Exam {
int kor;
int eng;
int math;
public Exam() {
this(0, 0, 0);
}
public Exam(int kor, int eng, int math) {
// 다른 생성자가 있으면 자동적으로 기본생성자가 생성이 안되기 때문에
// 따로 기본생성자를 생성해줘야함
this.kor = kor;
this.eng = eng;
this.math = math;
}
public int getKor() {
return kor;
}
public int getEng() {
return eng;
}
public int getMath() {
return math;
}
public void setKor(int kor) {
this.kor = kor;
}
public void setEng(int eng) {
this.eng = eng;
}
public void setMath(int math) {
this.math = math;
}
public int total() {
return kor + eng + math; // this 생략
}
public float avg() {
return total() / 3.0f; // this 생략
}
}