정의
Static변수와 메서드(정적필드, 메서드)를 만들 수 있는데 이 둘을 합쳐 정적 멤버(클래스 멤버)라고 한다.
해당 변수나 메서드는 프로그램이 종료되기 전까지 사용할 수 있고, GC에 의해 수집되지 않는다.
하지만 정적 객체는 GC에 수집될 수 있다.
또한 static을 붙이면 메모리에 딱 한 번만 할당되어 메모리를 효율적으로 사용할 수 있다.
즉, 같은 주소값을 공유한다는 것이며 final과 유사한 느낌이 있다.
[선언]
static int num1 = 0; // 클래스 필드
int num2 = 0; // 인스턴스 필드
[실행]
class Example {
static int num1 = 0; // 클래스 필드
int num2 = 0; // 인스턴스 필드
}
public class ExampleMain {
public static void main(String[] args) {
Example number1 = new Example(); // 객체 생성
Example number2 = new Example(); // 객체 생성
number1.num1++; // 클래스 필드 num1값 1 증가
number1.num2++; // 인스턴스 필드 num2값 1 증가
System.out.println(number2.num1);
System.out.println(number2.num2);
}
}
[결과]
1
0
종료 코드 0(으)로 완료된 프로세스
[선언]
static void name1() { //클래스 메소드
System.out.println("홍길동");
}
void name2() { //인스턴스 메소드
System.out.println("김유신");
}
[실행]
class Example2 {
static void name1() { //클래스 메소드
System.out.println("홍길동");
}
void name2() { //인스턴스 메소드
System.out.println("김유신");
}
}
public class Example2Main {
public static void main(String[] args) {
Example2.name1(); //인스턴스를 생성하지 않아도 호출이 가능
System.out.println("----------------");
Example2 example2 = new Example2(); //인스턴스 생성
example2.name2(); //인스턴스를 생성하여야만 호출이 가능
}
}
[결과]
홍길동
----------------
김유신
종료 코드 0(으)로 완료된 프로세스
메모리 효율:
접근성:
상태 공유:
테스트 및 확장성 저하:
결합도 증가: