728x90
static 변수(클래스 변수)
[static 변수의 정의]
- static 변수는 클래스가 정의만 되었을때도 사용할 수 있는 변수입니다.
- 클래스 변수, 정적 변수라고도 불려집니다.
[static 변수의 특징]
- 인스턴스 생성과는 관계없이 처음 프로그램이 메모리에 로딩될 때 메모리에 할당 됩니다.
- 인스턴스 간에 공통으로 사용하는 변수가 필요한 경우에 사용합니다.
- 아래의 코드를 보면 static 변수 serialNum은 인스턴스에서 공통으로 사용하는 것을 확인 할 수있습니다.
class student{
public static int serialNum = 1000;
public int studentId;
public String studentName;
}
class test{
public static void main(String\[\] args) {
Student student1 = new Student();
student1.setStudentName("messi");
System.out.println(student1.serialNum);
Student student2 = new Student();
student2.setStudentName("ronaldo");
student2.serialNum++;
System.out.println(student1.serialNum);
System.out.println(student2.serialNum);
}
}
// 결과값
// 1000
// 1001
// 1001
static 메소드(클래스 메소드)
- static 메소드는 위에 설명한 static 변수와 성격이 유사합니다.
- 인스턴스를 생성하지 않아도 static 메소드를 호출할 수 있습니다.
- **static 메소드 내에서는 인스턴스 변수를 사용할 수 없습니다!!**
- 인스턴스 생성전에 호출이 가능하므로 static 메서드 내부에서는 인스턴스 변수를 사용할 수 없습니다.
public static void setSerialNum(int serialNum) {
int i = 0; studentName = "messi"; //오류발생
Student.serialNum = serialNum;
}
// studentName은 클래스안의 인스턴스 변수이기 때문에
// 클래스가 선언되지 않은 상태라면 접근이 불가능합니다.
// 그러므로 static 메소드 안에서의 인스턴스 변수 사용은 불가능합니다.
마지막으로 static에 관하여 정리를 하겠습니다.
[non-static 변수(인스턴스 변수)]
- 공간적 특성 : 해당 변수는 객체마다 별도로 존재합니다.
인스턴스 변수라고 부릅니다.
- 시간적 특성 : 객체 생성 시에 변수가 생성됩니다.
객체 생성 후에 변수 사용이 가능해집니다.
객체가 소멸 되면 해당 변수도 사라집니다.
- 공유의 특성 : 하나의 인스턴스 내부에서만 사용되어집니다.
변수는 객체 내에 각각 독립된 공간을 유지하므로 공유되지 않는다.
[static 변수]
- 공간적 특성 : 해당 변수는 클래스 당 하나만 생성됩니다.
해당 변수는 객체 내부가 아닌 별도의 공간에 생성된다.(프로그램 실행시에 메모리 데이터 영역에 생성됩니다)
클래스 변수라고도 부릅니다.
- 시간적 특성 : 클래스 로딩 시에 변수가 생성된다.
객체가 생성되기 전에 이미 생성되므로 객체를 생성하지 않고도 사용이 가능하고, 객체가 소멸되어도 static변수는 남아있습니다.
static 변수는 프로그램이 종료될 때 소멸됩니다.
- 공유의 특성 : 동일한 클래스의 모든 객체들에 의해 공유됩니다.
같은 클래스로부터 생성된 여러 객체가 하나의 변수를 공유합니다.
'프로그래밍 > 자바(Java)' 카테고리의 다른 글
[ 자바 / JAVA ] String, StringBuilder, StringBuffer 클래스 (0) | 2021.07.22 |
---|---|
[ 자바 / JAVA ] 오버라이딩 vs 오버로딩 (0) | 2021.07.22 |
[ 자바 / JAVA ] 접근제어 지시자(Access Modifier) (0) | 2021.07.22 |
[ 자바 / JAVA ] final 키워드 (0) | 2021.07.20 |
[ 자바 / JAVA ] 자바 가상 머신(JVM)과 자바 프로그램 실행 (0) | 2021.07.20 |