static 키워드 : 공통으로 사용하는 변수가 필요한 경우 사용
- 여러 인스턴스가 공유하는 기준값이 필요한 경우
- 인스턴스가 생성될 때 만들어지는 변수가 아니고, 처음 프로그램이 메모리에 로딩될 때 메모리를 할당
- 클래스 변수, 정적 변수라고 도 함 ( <-> 인스턴스 변수 )
- 인스턴스 생성과 상관없이 사용하므로 클래스 이름으로 직접 참조
1. static 변수
ex) 학생이 생성될때마다 학번을 1씩 증가시켜서 저장해 줌
public class Student {
private static int studentNum=10000;
private int studentName;
private int studentID;
// Student 객체를 생성할 때마다 studentNum++ 하여 studentID로 설정해준다.
public Student() {
studentNum++;
studentID=studentNum;
}
public Student(int studentName) {
this.studentName = studentName;
}
//studentNum은 private 변수 이므로 get 메소드를 만들어준다.
public static int getStudentNum(){
return studentNum;
}
}
2. static 메서드 (클래스 메서드)
- static 메서드는 객체 생성 없이 호출할 수 있다. (클래스 이름으로 호출 / 가능은 하지만 지양)
- static 메서드 내에서는 인스턴스 변수를 사용할 수 없다.
- 일반 메서드에서 static 변수는 사용할 수 있다.
public static int getStudentNum(){
//studentName = "Kim"; // ->static 메서드 내에서 인스턴스변수 사용 불가
return studentNum;
}
3. 변수의 유효범위, 메모리
변수 유형 | 선언 위치 | 사용 범위 | 메모리 | 생성과 소멸 |
지역변수 (로컬 변수) |
함수 내부 | 함수 내부에서만 사용 | 스택 | 함수가 호출될때 생성되고, 함수가 끝나면 소멸 |
멤버변수 (인스턴스 변수) |
클래스내에서 멤버 변수로 선언 |
private일 경우 클래스 내부에서만 사용하고, 아닐경우 참조변수로 다른 클래스에서 사용 가능 |
힙 | 인스턴스가 생성될 때 힙에 생성되고, gc 동작될 때 소멸됨 |
static 변수 (클래스 변수) |
static 예약어를 사용하여 클래스 내부에 선언 | private일 경우 클래스 내부에서만 사용하고, 아닐경우 참조변수로 다른 클래스에서 사용 가능 |
데이터 영역 | 프로그램이 처음 시작할 때 데이터영역에 생성되고, 프로그램이 끝나고 메모리를 해제할 때 소멸 됨 |
final 키워드
변하지 않는 상수가 필요한 경우 사용한다.
final 키워드를 이용해서 상수로 선언한 경우 변수 명은 대문자로 사용한다.
지역변수의 상수
- 데이터 타입 앞 final 키워드를 명시한다.
- 맨 처음에 변수를 선언한 이후에 값을 더 이상 수정할 수 없도록 한다.
소속 변수인 필드를 상수로 선언하기 위해 사용
- 어떤 클래스 내부에서 사용할 상수의 경우 static과 함께 사용하여 정적으로 하는 것이 좋다.
public class Circle{
static final double PI = 3.141592;
double radius;
double x;
double y;
//...
}
반응형
'JAVA & Spring > JAVA 이론' 카테고리의 다른 글
[JAVA] 추상 클래스 (abstract class) (0) | 2023.05.18 |
---|---|
[JAVA] 상속 (0) | 2023.05.17 |
[JAVA] 접근 제어 지시자( private, protected, default, public) / 정보은닉, 캡슐화 (0) | 2023.05.17 |
[JAVA] 생성자 / 오버로딩(overloading) (0) | 2023.05.17 |
[JAVA] 인터페이스(interface) (0) | 2023.02.03 |