•
인스턴스 변수 앞에 static이 붙은 변수
•
static 변수 = 클래스 변수 = 공용 변수 = 정적변수
•
모든 인스턴스에 공통적으로 사용되는 클래스 변수
•
클래스 변수는 인스턴스를 생성하지 않고도 사용 가능
•
인스턴스를 생성하지 않고도 static 자원에 접근 가능
•
메모리에 고정적으로 할당되어 프로그램이 종료될 때 해제됨
static 변수의 클래스 접근
1.
클래스 내부 접근
•
static 변수가 선언된 클래스 내에서는 이름만으로 직접 접근 가능
2.
클래스 외부 접근
•
private으로 선언되지 않으면 외부에서도 접근 가능
•
접근 수준 지시자가 허용하는 범위에서 접근 가능
•
클래스 또는 인스턴스의 이름을 통해 접근
예시
class InstCnt {
static int instNum = 0; // static 변수 (cv)
InstCnt() {
instNum++;
System.out.println("인스턴스 생성: " + instNum);
}
}
class ClassVar {
public static void main(String[] args) {
InstCnt cnt1 = new InstCnt();
InstCnt cnt2 = new InstCnt();
InstCnt cnt3 = new InstCnt();
}
}
Java
복사
Static 메서드
•
인스턴스를 생성하지 않고도 호출이 가능
•
static 메서드 내에서는 인스턴스 변수를 사용할 수 없음
예시
class StaticTest {
static int cv; // 클래스 변수
int iv = 0; // 인스턴스 변수
// static 메서드
static int max(int num) {
iv += num; // 에러. static 메서드 내에서는 인스턴스 변수 사용 불가
}
}
Java
복사
Static 변수 & Static 메서드의 메모리 저장 영역
static으로 생성된 멤버들은 static영역에 할당된다
모든 객체가 메모리를 공유할 수 있다는 장점이 있지만
garbage collector의 관여가 없어 프로그램이 종료될 때까지
메모리에 값이 유지되기 때문에 너무 많이 사용한다면
프로그램이 무거워진다는 단점도 있다
Plain Text
복사
public static void main(String[] args) { }
•
public : 모든 클래스가 접근할 수 있게 하는 접근 제어자
•
static : 인스턴스 생성과 관계 없이 가장 먼저 호출되도록 함
◦
프로그램이 실행되면 main 메서드가 제일 먼저 호출되기 때문에 객체 없이 바로 작업을 수행할 수 있도록 static 사용
•
void : 메인 메서드에서 호출하는 JVM에서 리턴 값을 요구하지 않기 때문에 사용
•
String[] args : 프로그램 실행시 매개변수를 보내서 실행할 수 있다는 뜻
◦
한개를 사용할 수도 있고 여러 개를 사용할 수도 있기 때문에 배열을 사용
Static 변수
•
인스턴스 변수 앞에 static이 붙은 변수
•
static 변수 = 클래스 변수 = 공용 변수 = 정적변수
•
모든 인스턴스에 공통적으로 사용되는 클래스 변수
•
클래스 변수는 인스턴스를 생성하지 않고도 사용 가능
•
인스턴스를 생성하지 않고도 static 자원에 접근 가능
•
메모리에 고정적으로 할당되어 프로그램이 종료될 때 해제됨
static 변수의 클래스 접근
1.
클래스 내부 접근
•
static 변수가 선언된 클래스 내에서는 이름만으로 직접 접근 가능
2.
클래스 외부 접근
•
private으로 선언되지 않으면 외부에서도 접근 가능
•
접근 수준 지시자가 허용하는 범위에서 접근 가능
•
클래스 또는 인스턴스의 이름을 통해 접근
예시
class InstCnt {
static int instNum = 0; // static 변수 (cv)
InstCnt() {
instNum++;
System.out.println("인스턴스 생성: " + instNum);
}
}
class ClassVar {
public static void main(String[] args) {
InstCnt cnt1 = new InstCnt();
InstCnt cnt2 = new InstCnt();
InstCnt cnt3 = new InstCnt();
}
}
Java
복사
Static 메서드
•
인스턴스를 생성하지 않고도 호출이 가능
•
static 메서드 내에서는 인스턴스 변수를 사용할 수 없음
예시
class StaticTest {
static int cv; // 클래스 변수
int iv = 0; // 인스턴스 변수
// static 메서드
static int max(int num) {
iv += num; // 에러. static 메서드 내에서는 인스턴스 변수 사용 불가
}
}
Java
복사
Static 변수 & Static 메서드의 메모리 저장 영역
static으로 생성된 멤버들은 static영역에 할당된다
모든 객체가 메모리를 공유할 수 있다는 장점이 있지만
garbage collector의 관여가 없어 프로그램이 종료될 때까지
메모리에 값이 유지되기 때문에 너무 많이 사용한다면
프로그램이 무거워진다는 단점도 있다
Plain Text
복사
public static void main(String[] args) { }
•
public : 모든 클래스가 접근할 수 있게 하는 접근 제어자
•
static : 인스턴스 생성과 관계 없이 가장 먼저 호출되도록 함
◦
프로그램이 실행되면 main 메서드가 제일 먼저 호출되기 때문에 객체 없이 바로 작업을 수행할 수 있도록 static 사용
•
void : 메인 메서드에서 호출하는 JVM에서 리턴 값을 요구하지 않기 때문에 사용
•
String[] args : 프로그램 실행시 매개변수를 보내서 실행할 수 있다는 뜻
◦
한개를 사용할 수도 있고 여러 개를 사용할 수도 있기 때문에 배열을 사용