1. 실행 클래스
public class Student_executionClass {
public static void main(String[] args) {
// 방법 1. 생성자를 이용. (객체데이터를 활용할 수 있어 코드도 간결하고 에러가 적다.)
// 접근 3. 객체데이터에 배열을 이용할거다. 이렇게 하면 코드도 줄일 수 있고, 학생/중간/기말 따로 관리해서 생기는 오류를 방지할 수 있다.
Student s[] = new Student[10]; // 클래스 Student를 이름 s로 배열로 만들거다. Student를 10개를 만들어 메모리에 할당해라. 즉, 배열 하나로 묶어서 이곳에 0번부터 9번까지 10개의 Student 클래스 방을 오려다 붙인거다.
s[0] = new Student("홍길동", 100, 100); // s의 0번방 Student 클래스에는 "홍길동", 100, 100을 생성자로 넣어라.
s[1] = new Student("둘리", 10, 10); // s의 1번방 Student 클래스에는 "둘리", 10, 10을 생성자로 넣어라.
s[2] = new Student("고길동", 74, 46);
s[3] = new Student("짱구", 39, 85);
s[4] = new Student("이순신", 41, 65);
s[5] = new Student("장보고", 26, 100);
s[6] = new Student("이성계", 93, 57);
s[7] = new Student("희동이", 24, 41);
s[8] = new Student("또치", 98, 95);
s[9] = new Student("박혁거세", 32, 54);
int totalMiddleScore = 0;
int totalFinalScore = 0;
int numberOfstudent = s.length;
for (int i = 0; i < numberOfstudent; i++) {
totalMiddleScore = totalMiddleScore + s[i].middleScore;
totalFinalScore = totalFinalScore + s[i].finalScore;
}
double avgMiddleScore = (double)totalMiddleScore / numberOfstudent;
double avgFinalSocre = (double)totalFinalScore / numberOfstudent;
System.out.println("중간고사 총점은 " + totalMiddleScore);
System.out.println("중간고사 평균은 " + avgMiddleScore);
System.out.println("기말고사 총점은 " + totalFinalScore);
System.out.println("기말고사 평균은 " + avgFinalSocre);
// // 접근 2. 객체데이터로 10개만 만들어 넘기면 된다.
// Student s0 = new Student("홍길동", 100, 100);
// Student s1 = new Student("둘리", 10, 10);
//
// // 접근 1. 모든 데이터를 하나하나 넘기는 방법.
// 이거를 10번 반복해야 하는데 위에 방법처럼 객체데이터로 만들어 생성자에 전달할거다.
// Student s0 = new Student();
// s0.name = "홍길동";
// s0.middleScore = 100;
// s0.finalScore = 100;
// // 방법 2. setter, getter 이용하는 경우. 국내 자바업계는 이렇게 쓴다는데 코드가 너무 길어진다.
// Student[] s = new Student[10];
//
// s[0] = new Student();
// s[0].setName("홍길동");
// s[0].setMiddleScore(100);
// s[0].setFinalScore(100);
// s[1] = new Student();
// s[1].setName("둘");
// s[1].setMiddleScore(10);
// s[1].setFinalScore(10);
// s[2] = new Student();
// s[2].setName("고길동");
// s[2].setMiddleScore(74);
// s[2].setFinalScore(46);
// s[3] = new Student();
// s[3].setName("짱구");
// s[3].setMiddleScore(39);
// s[3].setFinalScore(85);
// s[4] = new Student();
// s[4].setName("이순신");
// s[4].setMiddleScore(41);
// s[4].setFinalScore(65);
// s[5] = new Student();
// s[5].setName("장보고");
// s[5].setMiddleScore(26);
// s[5].setFinalScore(100);
// s[6] = new Student();
// s[6].setName("이성계");
// s[6].setMiddleScore(93);
// s[6].setFinalScore(57);
// s[7] = new Student();
// s[7].setName("희동이");
// s[7].setMiddleScore(24);
// s[7].setFinalScore(41);
// s[8] = new Student();
// s[8].setName("또치");
// s[8].setMiddleScore(98);
// s[8].setFinalScore(95);
// s[9] = new Student();
// s[9].setName("박혁거세");
// s[9].setMiddleScore(32);
// s[9].setFinalScore(54);
//
// int totalMiddleScore = 0;
// int totalFinalScore = 0;
// int numberOfstudent = s.length;
// for (int i = 0; i < numberOfstudent; i++) {
// totalMiddleScore = totalMiddleScore + s[i].getMiddleScore();
// totalFinalScore = totalFinalScore + s[i].getFinalScore();
// }
//
// double avgMiddleScore = (double)totalMiddleScore / numberOfstudent;
// double avgFinalSocre = (double)totalFinalScore / numberOfstudent;
//
// System.out.println("중간고사 총점은 " + totalMiddleScore);
// System.out.println("중간고사 평균은 " + avgMiddleScore);
// System.out.println("기말고사 총점은 " + totalFinalScore);
// System.out.println("기말고사 평균은 " + avgFinalSocre);
}
}
결과 :
중간고사 총점은 537
중간고사 평균은 53.7
기말고사 총점은 653
기말고사 평균은 65.3
2. 함수 메소드가 있는 클래스
public class Student {
// 방법 1. 생성자를 이용. (객체데이터를 활용할 수 있어 코드도 간결하고 에러가 적다.)
String name;
int middleScore;
int finalScore;
// 생성자 이용하기. 일반적으로 객체데이터 만들 때는 생성자 이용하는게 코드가 간결해진다.
Student(String name, int middleScore, int finalScore) {
this.name = name;
this.middleScore = middleScore;
this.finalScore = finalScore;
}
// // 방법 2. setter, getter 이용하는 경우. 국내 자바업계는 이렇게 쓴다는데 코드가 너무 길어진다.
// private String name;
// private int middleScore;
// private int finalScore;
//
// // String name에 대한 setter(public void), getter(public String) 만들기.
// public void setName(String name) {
// this.name = name;
// }
// public String getName() {
// return this.name;
// }
//
// // int middleScore에 대한 setter(public void), getter(public int) 만들기.
// public void setMiddleScore(int middleScore) {
// this.middleScore = middleScore;
// }
// public int getMiddleScore() {
// return this.middleScore;
// }
//
// // int finalScore에 대한 setter(public void), getter(public int) 만들기.
// public void setFinalScore(int finalScore) {
// this.finalScore = finalScore;
// }
// public int getFinalScore() {
// return this.finalScore;
// }
}
만약 객체데이터를 이용한다면
Student[] s = new Student[10]; -> 클래스 Student의 이름은 s고, 배열로 묶어 10개의 클래스 방을 한 번에 만들거다. 그리고 이 10개의 s는 각각 '메모리에 할당해라 s0 = Student[0], s1 = Student[1], ... , s0 = Student[9]'이다. (값은 비어있다. 클래스는 빈 방이다. 값이 들어있는 것으로 혼동하면 큰일난다. 매트릭스처럼 생각하자. 그저 행을 만들었을 뿐이다.)
(자바에서의 배열은 파이썬이나 스위프트와 다르게 단지 여러개의 변수를 한 번에 선언해주는 것이었다. 여기서도 마찬가지다.
Student s0 = new Student();
Student s1 = new Student();
...
Student s9 = new Student();
노가다 10번 해서 10개의 클래스 방을 만들어야 하는걸 그냥 배열 형태로 한 번에 해결한 것 뿐이다.)
아래의 코드를 보자.
외부 클래스를 10번 오려다 붙여 s = { s[0], s[1], s[2], s[3], s[4], s[5], s[6], s[7], s[8], s[9] } 라는 비어있는 클래스 방 10개가 만들어졌고, 이제 이 방을 채울거다. (매트릭스의 열을 채운다고 생각하자.)
s[0] = new Student("홍길동", 100, 100); / 풀어서 쓰면 Student s0 = new ("홍길동", 100, 100); 과 같다.
s[1] = new Student("둘리", 10, 10); / 풀어서 쓰면 Student s1 = new ("둘리", 10, 10); 과 같다.
...
s[9] = new Student("박혁거세", 32, 54); / 풀어서 쓰면 Student s9 = new ("박혁거세", 32, 54); 과 같다.
를 통해서
0번방 s[0]에 new를 통해 Student("홍길동", 100, 100)을 생성자로 갖는 방이 생성된다.
1번방 s[1]에 new를 통해 Student("둘리", 10, 10)을 생성자로 갖는 방이 생성된다.
...
9번방 s[9]에 new를 통해 Student("박혁거세", 32, 54)을 생성자로 갖는 방이 생성된다.
'개발자 > Java' 카테고리의 다른 글
Java (자바) 용어 (0) | 2020.04.16 |
---|---|
Java (자바) nextInt() 이후 nextLine() 넘어가는 문제 (추가 : nextInt() 문자 입력시 예외처리) (1) | 2020.04.14 |
Java (자바) 생성자(Constructor), 다형성 ATM 저금통 개선버전 (0) | 2020.04.13 |
Java (자바) ATM 저금통, BMI (0) | 2020.04.10 |
Java (자바) 예외처리 try catch (0) | 2020.04.09 |