get 함수와 set 함수를 만들어 이용하여 캡슐을 깨트리지 않고 간접적으로 데이터를 가져옴
같은 클래스가 아닌 다른 클래스에서 많은 데이터를 가져다가 썼다가 다른 클래스에서 수정이 일어날 경우
코드양이 많은 경우 수정하기 복잡할 수 있음
package Exam_1.getter_setter;
public class Exam {
int kor;
int eng;
int 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;
}
수정이 필요하면 Exam 클래스에서만 해주면되고 Exam에서 데이터가 필요하면 get과 set만 이용해서 가져오면된다.
package Exam_1.getter_setter;
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[] 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가 ++됨, 갯수만큼 출력
Exam[] exams = this.exams;
for(int i=0; i<size; i++) {
Exam exam = exams[i];
int kor = exam.getKor();
int eng = exam.getEng();//exam.eng;
int math = exam.getMath();//exam.math;
int total = kor+eng+math;
float avg = total / 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("----------------------");
}
}
}
'Java 코드연습' 카테고리의 다른 글
[뉴렉처] ExamConsole 클래스 구현하기 (0) | 2021.10.22 |
---|---|
[뉴렉처] 생성자 오버로드(Constructor Overload) (0) | 2021.10.21 |
[뉴렉처] 생성자(Constructor) (0) | 2021.10.21 |
[뉴렉처] 캡슐의 은닉성과 접근 지정자 (0) | 2021.10.21 |
[뉴렉처] 인스턴스(Instance) 메소드 구현하기 (0) | 2021.10.21 |