사용자 정의 데이터 타입 : class
- 데이터의 최종 진화 형태이다.
(기본(int:값 하나를 저장)->배열(같은 타입일 경우 하나로 표현)->클래스(서로 다른 타입의 데이터를 묶어서 사용+기능 구성))
- 서로 다른 타입의 데이터를 묶어서 사용하는 것이다.
- 변수(데이터)와 메서드(기능)로 구성할 수 있다.
- 클래스도 결국 익숙하지 않지만 데이터임
**기본형 타입** - 필요한 만큼 만들었어야 했음(많은 변수 필요)**
int kor;
int eng;
int math;
double avg;
**배열 **- 타입이 같으면 묶음
int[] scores;
int sum2;
double avg2;
**클래스 사용할때**
Student student = new Student(); //객체 생성(인스턴스화)
클래스를 초기화 하는 방법
student타입의 변수 선언이며 참조형 타입임 -> 주소 저장
Student타입의 ()는 메서드를 호출한 것
student(변수) = 100번지(주소)
100번지
Student{ //객체(인스턴스) - 메모리에 저장되어있는 값
kor, eng, math, sum, avg, name
}
student.kor = 80; //kor의 변수를 선언한 것
student.eng = 90;
student.math = 70;
student.sum = student.kor + student.eng + student.math;
student.avg = student.sum / 3.0;
student.name = "홍길동";
System.out.println(student.name + " 의 합계 : " + student.sum + " /평균 " + student.avg);
}
}
**클래스 만들기 **(학생과 관련되어 학생 클래스를 만듬)
class Student{
int kor;
int eng;
int math;
int sum;
double avg;
String name;
}
성적처리 프로그램을 완성하시오

String[] studentNames ={"강나영", "강동환", "강태영", "곽지훈", "김서윤", "김영훈", "김진석", "김충신", "박슬기",
"박채린", "손영태", "손영흔", "안정연", "이선우", "이수보", "이주홍", "이중호", "임현정",
"장유진", "정신애", "조수경", "조하영", "조혜민", "허민정", "박지은"};
Student[] students = new Student[studentNames.length]; //students를 저장할 배열을 만듬
for(int i = 0; i < 25; i++){
Student student = new Student(); //25번 객체 생성 = 학생 25명이 만들어짐
student.kor = (int)(Math.random()*101);
student.eng = (int)(Math.random()*101);
student.math = (int)(Math.random()*101);
student.name = studentNames[i];
student.sum = student.kor + student.eng + student.math;
student.rank = 1;
students[i] = student; //student은 주소값이며 이것이 students[i]클래스 배열에 들어감
}
**합계/평균**
for(int i = 0; i <students.length; i++){
students[i].sum = students[i].kor + students[i].eng+ students[i].math;
students[i].avg = Math.round(students[i].sum /3.0 * 10) / 10.0;
}
**석차**
for(int i = 0; i <students.length; i++){
for(int j = 0; j <students.length; j++){
if(students[i].sum < students[j].sum){
students[i].rank++;
}
}
}
**석차순 정렬**
for(int i = 0; i <students.length-1; i++){
int min = i;
for(int j = i + 1; j < students.length; j++){
if(students[j].rank < students[min].rank){
min = j;
}
}
Student temp = students[i];
students[i] = students[min];
students[min] = temp;
}
**과목별 합계, 평균**
int[] sums = new int[3];
for(int i = 0; i < students.length; i++){
sums[0] += students[i].kor;
sums[1] += students[i].eng;
sums[2] += students[i].math;
}
double[] avgs = new double[3];
for(int i = 0; i < avgs.length; i++){
avgs[i] = Math.round((double)sums[i] / students.length*100)/100.0;
}
**출력**
System.out.println("이름\t국어\t영어\t수학\t합계\t평균\t석차");
for(int i = 0; i < students.length; i++){
System.out.println(students[i].name + "\t"
+students[i].kor + "\t"
+ students[i].eng + "\t"
+ students[i].math+ "\t"
+students[i].sum+ "\t"
+students[i].avg+ "\t"
+students[i].rank);
}
System.out.print("과목합계");
for(int i = 0; i < sums.length; i++){
System.out.print("\t"+sums[i]);
}
System.out.print("\n과목평균");
for(int i = 0; i < avgs.length; i++){
System.out.print("\t"+avgs[i]);
}