Static
- 객체가 아닌 클래스로 필드 또는 메소드에 접근하여 사용하기 위한 기능을 제공하는 키워드(제한자)
- 클래스(내부클래스), 필드, 메소드 작성시 사용하는 제한자
인스턴스 필드(Instance Field)
- 객체 생성시 객체에 만들어지는 필드로 객체를 사용하여 필드에 접근
- 생성자를 사용하여 객체 생성시 필드에 초기값 저장
정적 필드(Static Field)
- 클래스 파일(XXX.class)를 읽어 메모리(MethodArea)에 저장될 때 만들지는 필드로 클래스를 사용하여 필드에 접근
- 객체 생성전에 클래스에 하나만 만들어지는 필드
- 정적 필드는 직접 값을 저장하여 초기화 처리 - 생성자를 사용하여 초기화 미처리
- 클래스로 생성된 모든 객체는 정적 필드 사용 가능 - 모든 객체가 값을 공유하여 사용
인스턴스 메소드(Instance Method)
- this 키워드를 제공받아 사용할 수 있는 메소드로 객체를 사용하여 호출
- this 키워드를 사용하여 인스턴스 필드 및 인스턴스 메소드 사용 가능
- 정적 필드 및 정적 메소드 사용 가능
정적 메소드(Static Method)
- this 키워드를 제공받지 않은 메소드로 클래스를 사용하여 호출
- this 키워드를 사용할 수 없으므로 인스턴스 필드 및 인스턴스 메소드 사용 불가능
- 정적 필드 및 정적 메소드만 사용 가능
- 정적 메소드도 getter & setter로 접근 가능
Student 클래스 작성
- 학생정보(학번, 이름, 국어, 영어, 총점)를 저장하기 위한 클래스
public class Student {
private int num;
private String name;
private int kor, eng, tot;
private static int total=0;
public Student() {
}
public Student(int num, String name, int kor, int eng) {
super();
this.num = num;
this.name = name;
this.kor = kor;
this.eng = eng;
calcTot();
}
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;
}
public int getEng() {
return eng;
}
public void setEng(int eng) {
this.eng = eng;
}
public int getTot() {
return tot;
}
public void setTot(int tot) {
this.tot = tot;
}
public void calcTot() {
tot=kor+eng;
}
public void display() {
System.out.print("["+name+"]님의 성적 >> ");
System.out.println("국어 = "+kor+", 영어 = "+eng+", 총점 = "+tot);
}
public static int getTotal() {
return total;
}
public static void setTotal(int total) {
Student.total = total;
}
}
StudentApp
package oop;
public class StudentApp {
public static void main(String[] args) {
Student[] students={new Student(1000, "홍길동", 90, 90)
, new Student(2000, "임꺽정", 94, 98), new Student(3000, "전우치", 91, 80)
, new Student(4000, "일지매", 76, 82), new Student(5000, "장길산", 84, 86)};
for(Student student : students) {
student.display();
Student.setTotal(Student.getTotal()+student.getTot());
}
System.out.println("==============================================================");
System.out.println("총합계 = "+Student.getTotal());
System.out.println("==============================================================");
}
}