정의와 특징
- 형태 : class 새로운자료형이름{세트를 이루는 구성요소(들)}
- 사용자 정의 자료형으로 하나의 셋트를 만들고 싶을 때 사용한다.
- 사용: new를 이용해서 생성해야 사용할 수 있다. 그래야 힙에 메모리가 할당된다.
- 참조변수: 객체는 힙에 셋트로 잡힌다. 이 객체를 참조하는 변수를 참조 변수라고 한다.
- 멤버변수: 객체를 이루고 있는 변수이다. 이 변수에 접근하기 위해서는 객체 참조변수를 이용해야 한다.
class Student{
String name;
int kor;
int eng;
int math;
int tot;
double avg;
}
//둘 다 변수를 선언하는 문장이다.
int year;
Student data;
year = 2024;
data = new Student();
필요성
- 클래스가 없을 경우, 순서를 바꿀 때 이름, 국어, 영어, 수학, 총점, 평균을 각각 바꿔줘야 한다. 이것은 상당히 번거로운 일이다. 아래와 같이 "기본자료형"만으로 프로그래밍 할 때 "불가능"한 것은 아니지만, 정렬하고자 할 때 일일이 바꿔줘야하는 것은 귀찮고 시간이 오래걸리고 번거롭다. 이럴 때 한 명의 학생의 정보(이름, 국어, 영어, 수학, 총점, 평균)을 하나의 세트로 하는 "새로운 자료형"을 만들면 보다 더 간결하게 표현할 수 있다.
클래스 없이 관련 정보들 다루기
package day0516;
import java.util.Scanner;
public class D05StudentSortTest {
//5명학생의 이름, 국어, 영어, 수학을 입력받아 총점, 평균을 구하고,
//성적순으로 정렬하여 입력할 떄
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
String []name = new String[5];
int []kor = new int[5];
int []eng = new int[5];
int []math = new int[5];
int []tot = new int[5];
double []avg = new double[5];
for(int i = 0; i< name.length; i++) {
System.out.printf("%d번째 학생의 이름==>", i+1);
name[i] = sc.next();
System.out.printf("%d번째 학생의 국어점수==>", i+1);
kor[i] = sc.nextInt();
System.out.printf("%d번째 학생의 영어점수==>", i+1);
eng[i] = sc.nextInt();
System.out.printf("%d번째 학생의 수학점수==>", i+1);
math[i] = sc.nextInt();
tot[i] = kor[i] + eng[i] + math[i];
avg[i] = tot[i] / 3.0;
}
//성적이 높은 순으로 정렬하기
for(int i=0;i<tot.length;i++) {
for(int j = i+1;j<tot.length;j++) {
if(tot[j] > tot[i]) {
String tempString = name[i];
name[i] = name[j];
name[j] = tempString;
int tempInt = kor[i];
kor[i] = kor[j];
kor[j] = tempInt;
tempInt = eng[i];
eng[i] = eng[j];
eng[j] = tempInt;
tempInt = math[i];
math[i] = math[j];
math[j] = tempInt;
tempInt = tot[i];
tot[i] = tot[j];
tot[j] = tempInt;
double tempDouble = avg[i];
avg[i] = avg[j];
avg[j] = tempDouble;
}
}
}
System.out.println("***성적 처리 결과 ***");
System.out.println("이름\t국어\t영어\t수학\t총점\t평균");
System.out.println("----------------------------");
for(int i = 0; i<name.length; i++) {
System.out.printf("%s\t%d\t%d\t%d\t%d\t%.2f\n",name[i], kor[i], eng[i], math[i], tot[i], avg[i]);
}
}
}
클래스로 관련 정보들 다루기
package com.kosta.exam03;
import java.util.Scanner;
class Student{
String name;
int kor;
int eng;
int math;
int tot;
double avg;
}
public class D09StudentClassTestArray {
public static void main(String[] args) {
int year = 2024;
Scanner sc = new Scanner(System.in);
Student []data;
data = new Student[5];
//Student 배열을 만든것이지 Student 객체를 만든 것은 아님.
for(int i = 0; i < data.length;i++) {
//Student 객체를 생성
data[i] = new Student();
System.out.printf("%d번째 학생의이름==>", i+1);
data[i].name = sc.next();
System.out.print("국어성적==>");
data[i].kor = sc.nextInt();
System.out.print("영어성적==>");
data[i].eng = sc.nextInt();
System.out.print("수학성적==>");
data[i].math = sc.nextInt();
data[i].tot = data[i].kor + data[i].eng + data[i].math;
data[i].avg = data[i].tot / 3.0;
}
for(int i= 0;i<data.length;i++) {
for(int j = i+1;j<data.length;j++) {
if(data[j].tot > data[i].tot) {
Student temp = data[i];
data[i] = data[j];
data[j] = temp;
}
}
}
System.out.println(year+"년도 성적 처리 결과");
System.out.printf("이름\t국어\t영어\t수학\t총점\t평균\n");
System.out.println("------------------------------------------------");
for(int i= 0;i<data.length;i++) {
System.out.printf("%s\t%d\t%d\t%d\t%d\t%.2f\n",data[i].name, data[i].kor, data[i].eng, data[i].math, data[i].tot, data[i].avg);
}
//System.out.println(data[i].name+","+data[i].kor+","+data[i].eng+","+data[i].math+","+data[i].tot+","+data[i].avg);
}
}