반응형
static 변수
다른 멤버 변수처럼 클래스 내부에 사용한다. 클래스 변수라고도 부름
사용법은 자료형 앞에 static 예약어를 붙여주면 된다.
ex) static int serialNum;
특징
클래스 내부에 선언하지만, 다른 멤버 변수처럼 인스턴스 생성 시마다 새로 생성되지 않는다.
static 변수는 프로그램이 실행되어 메모리에 올라갔을 때 딱 한 번 메모리 공간이 할당됨
모든 인스턴스가 하나의 static 변수를 공유한다.
사용 예제
서로 다른 학생 인스턴스에게 다른 학번 부여
package first_project;
public class Student {
public static int serialNum = 1000;
public int studentId;
public String studentName;
public Student() { //생성자 호출 시마다 serialNum 증가
serialNum ++;
studentId = serialNum;
}
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
}
package first_project;
public class StudentTest {
public static void main(String[] args) {
Student lee = new Student();
lee.setStudentName("LEE");
System.out.println(lee.studentId);
Student kim = new Student();
kim.setStudentName("Kim");
System.out.println(kim.studentId);
}
}
클래스 메서드
static 변수를 위한 메서드
static 메서드라고도 부름
클래스 메서드를 이용하여 static 변수를 private으로 변경하고 get(), set() 등을 이용하여 이 static 변수에 접근할 수 있음
클래스 메서드는 호출 시 인스턴스 참조 변수가 아닌 클래스 이름으로 직접 호출이 가능
package first_project;
public class Student2 {
private static int serialNum = 1000;
public Student2() { //생성자 호출 시마다 serialNum 증가
serialNum ++;
}
public static int getSerialNum() {
return serialNum;
}
}
package first_project;
public class StudentTest {
public static void main(String[] args) {
Student2 lee = new Student2();
System.out.println("lee 학번: "+ Student2.getSerialNum()); // 클래스 이름으로 직접호출
Student2 kim = new Student2();
System.out.println("kim 학번: "+ Student2.getSerialNum());
}
}
댓글