◎제한자(Modifier) : 기능을 제한하기 위한 키워드
→ 접근제한자(private, package, protected, public), static, final, abstract
package oop;
//학생정보(학번, 이름, 국어, 영어, 총점)를 저장하기 위한 클래스 = VO 클래스
public class Student {
//인스턴트 필드(Instance Field) : 객체 생성시 메모리(Heap)에 만들어지는 필드
private int num;
private String name;
private int kor, eng, tot;
//정적 필드(Static Field) : 클래스 생성시 메모리(Static 영역)에 만들어지는 필드
//=> 객체에 생성되기 전에 메모리에 하나만 생성되는 필드
//=> 생성자에서 초기화 처리하지 않고 직접 초기화 설정
//=> 모든 객체에서 정적 필드 사용 가능 - 공유값 : 메모리 절약 및 필드값 변경이 용이
//=> 클래스 외부에서는 클래스 이름을 사용하여 접근
private static int total;//기본값 사용시 초기값 설정 생략
//생성자(Constructor) - 객체 생성시 인스턴스 필드에 원하는 초기값을 저장하기 위해 작성
//[Ctrl]+[Space] : 기본 생성자 만드는 단축키
public Student() {
// TODO Auto-generated constructor stub
}
//[Alt]+[Shift]+[S] >> [O]
public Student(int num, String name, int kor, int eng) {
super();
this.num = num;
this.name = name;
this.kor = kor;
this.eng = eng;
//총점을 계산하여 필드에 명령 작성 - 메소드 호출
//=> 코드의 중복성을 최소화하여 프로그램의 생산성 및 유지보수의 효율성 증가
//tot=kor+eng;
calcTot();
//인스턴스 메소드 : this 매개변수가 존재하는 메소드
//=> 인스턴스 필드 및 정적 필드 접근 가능
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getKor() {
return kor;
}
public void setKor(int kor) {
this.kor = kor;
calcTot();
}
public int getEng() {
return eng;
}
public void setEng(int eng) {
this.eng = eng;
calcTot();
}
public int getTot() {
return tot;
}
public void setTot(int tot) {
this.tot = tot;
}
/*
//총점을 계산하는 메소드
public void calcTot() {
tot=kor+eng;
}
*/
//은닉화 선언된 메소드 - 클래스 내부에서만 사용하는 메소드 -
private void calcTot() {
tot=kor+eng;
}
//필드값을 출력하는 메소드
public void display() {
System.out.print(name+"["+num+"]님의 성적 >> ");
System.out.println("국어 = "+kor+", 영어 = "+eng+", 총점 = "+tot);
}
//정적 메소드(Static Method) : this 매개변수가 없는 메소드
//=> this 매개변수가 없으므로 인스턴스 필드에 접근 불가능
//=> 정적 필드만 접근하여 사용 가능
//=> 객체 생성 전에 클래스 이름을 사용하여 호출 가능 - 메소드 호출의 용이성
public static int getTotal() {
return total;
}
public static void setTotal(int total) {
Student.total = total;
}
}
package oop;
public class StudentApp {
public static void main(String[] args) {
/*
Student student1=new Student(1000, "홍길동", 90, 90);
Student student2=new Student(2000, "임꺽정", 94, 98);
Student student3=new Student(3000, "전우치", 92, 80);
Student student4=new Student(4000, "일지매", 76, 82);
Student student5=new Student(5000, "장길산", 84, 86);
//student1.calcTot();
//student2.calcTot();
//student3.calcTot();
//student4.calcTot();
//student5.calcTot();
student1.display();
student2.display();
student3.display();
student4.display();
student5.display();
System.out.println("========================================================");
student1.setKor(100);
//student1.calcTot();
student1.display();
System.out.println("========================================================");
*/
/*
//객체를 저장할 수 있는 참조요소가 5개인 배열 생성
Student[] students=new Student[5];
//배열의 참조요소에 객체를 생성하여 저장 - 객체 배열
students[0]=new Student(1000, "홍길동", 90, 90);
students[1]=new Student(2000, "임꺽정", 94, 98);
students[2]=new Student(3000, "전우치", 92, 80);
students[3]=new Student(4000, "일지매", 76, 82);
students[4]=new Student(5000, "장길산", 84, 86);
//참조변수(요소)에 null이 저장된 상태에서 메소드를 호출할 경우 NullPointerException발생
for(int i=0;i<students.length;i++) {
//참조변수(요소)에 저장된 값이 null이 아닌 경우에만 메소드 호출
//=> NullPointerException 발생 방지
*
if(students[i]!=null) {
students[i].display();
}
}
System.out.println("========================================================");
*/
Student[] students= {new Student(1000, "홍길동", 90, 90)
,new Student(2000, "임꺽정", 94, 98), new Student(3000, "전우치", 92, 80)
,new Student(4000, "일지매", 76, 82), new Student(5000, "장길산", 84, 86)};
//int total=0;//모든 학생들의 성적 합계를 저장하기 위한 변수
for(Student student:students) {
student.display();
//total+=student.getTot();//학생 총점을 반환받아 총합계에 누적
//정적메소드는 클래스를 이용하여 접근
//형식)클래스명.필드명
//=> 정적 필드의 접근 지정자가 private인 경우 접근 불가능
//Student.total+=student.hetTot();
//정적 메소드는 클래스를 이용하여 호출
//형식)클래스명.메소드명(값,값,...);
Student.setTotal(Student.getTotal()+student.getTot());
}
System.out.println("========================================================");
//System.out.println("총합계 = "+total);//모든 학생들의 점수 총합계를 출력
System.out.println("총합계 = "+Student.getTotal());
System.out.println("========================================================");
}
}