- Do it! 자바 프로그래밍 입문 온라인 강의를 수강하며 작성하였습니다.
- Section 1. 자바의 핵심 - 객체지향 프로그래밍
- 15강 "클래스와 객체2(3) - static 변수"
- static 변수 > static 메서드 > 변수의 유효 범위
아래는 Student 객체를 생성할 때마다 studentID가 1씩 증가하여 대입되도록 만든 코드이다.
public class Student {
//객체가 생성될 때만 값이 변화해야 하므로 private으로 static변수 선언
private static int serialNum = 10000;
int studentID;
String studentName;
//객체 생성 시 serailNum이 증가하고 그 값을 studentID에 대입
public Student() {
serialNum++;
studentID = serialNum;
}
//static메서드로 static변수를 반환
public static int getSerialNum() {
return serialNum;
}
}
public class StudentTest1 {
public static void main(String[] args) {
//객체 생성 전에 static 변수 값 확인
System.out.println(Student.getSerialNum());
//객체 생성하여 static 변수 값 확인
Student studentLee = new Student();
System.out.println(studentLee.getSerialNum());
Student studentSon = new Student();
System.out.println(studentSon.getSerialNum());
}
}
변수 유형 | 선언 위치 | 사용 범위 | 메모리 | 생성과 소멸 |
---|---|---|---|---|
지역 변수 (로컬 변수) | 함수 내부에 선언 | 함수 내부에서만 사용 | 스택 | 함수가 호출될 때 생성되고, 함수가 끝나면 소멸함 |
멤버 변수 (인스턴스 변수) | 클래스 멤버 변수로 선언 | 클래스 내부에서 사용하고 private이 아니면 참조 변수로 다른 클래스에서 사용 가능 | 힙 | 인스턴스가 생성될 때 힙에 생성되고, 가비지 컬렉터가 메모리를 수거할 때 소멸됨 |
static 변수 (클래스 변수) | static 예약어를 사용하여 클래스 내부에 선언 | 클래스 내부에서 사용하고 private이 아니면 클래스 이름으로 다른 클래스에서 사용 가능 | 데이터 영역 | 프로그램이 처음 시작할 때 상수와 함께 데이터 영역에 생성되고 프로그램이 끝나고 메모리를 해제할 때 소멸됨 |