Static 변수, 메서드
정의
- 정적변수(메서드) 혹은 클래스 변수(메서드)라고 부름
- 모든 객체가 공통으로 가진 값
- 변수 앞에 static을 붙이면 static 변수가 됨
int a;
static int a;
- 객체 생성시 참여하지 않음
- 객체를 만들지 않아도 사용 가능하며 클래스별로 관리됨
- 클래스이름.변수명 혹은 클래스이름.메소드명으로 호출
1. Car.java
public class Car {
static void a() {
System.out.println("안녕하세요");
} // Static메서드
}
2. CarApp.java
public class CarApp {
public static void main(String[]args) {
Car.a();
}
}
Static메서드, 변수의 활용
- Static변수는 상수선언시 주로 사용
- 멤버변수와 상호작용(초기화, 변경 등)하지 않음
- Static메서드-Static변수는 조회만 가능
Static변수의 상수화
- 프로그래밍에서의 상수: 변하지 않는 값
- 변수 앞에 final을 붙이며, 변수명은 전부 대문자로 표기
final static double PI = 3.14;
Static영역 | Stack영역 | Heap영역 |
---|
클래스가 할당 | 지역변수 할당 | 객체 할당 |
garbage collector의 메모리 관리 X | 매개변수 할당 | garbage collector의 메모리 관리 O |
프로그램종료시까지 메모리에 유지됨 | 블럭 내에서만 유지 | 아무도 참조하지 않으면 사라짐 |
Static메서드와 인스턴스 메서드
- Static메서드는 Static 변수, Static 메서드만 사용 가능. 인스턴스 메서드(변수)사용 불가
- 인스턴스메서드는 Static변수,메서드 및 인스턴스 변수,메서드 사용 가능
class Sample{
static int x;
int y;
static void a(){
System.out.println(sample.x); // 사용가능. Static 메서드에 Static 변수
System.out.println(y); // 사용불가. Static메서드에 인스턴스변수
void a(){
System.out.println(sample.x); // 사용가능. 인스턴스메서드에 Static 변수
System.out.println(y); // 사용불가. 인스턴스메서드에 인스턴스변수
}