오늘은 static 에 대해 공부해보았다.
Static 정적 멤버 선언
1. static 멤버변수
- 변수를 static 으로 정의하여 사용
- 클래스 변수는 클래스에 속하며, 클래스의 모든 인스턴스가 공유 가능
public class MyClass {
static int staticTestNum;
}
2. Static 메서드
- 메서드를 static으로 선언하여 정의
- static 메서드는 클래스의 인스턴스를 생성하지 않고도 호출 가능
public static void test_method(){}
Static 특징
-
클래스 레벨에서 정의됨
~> 해당 클래스의 인스턴스와 무관하게 사용 가능
-
모든 인스턴스에서 공유되는 값
-
인스턴스 생성과 무관하게 하나의 메모리 공간에서 유지
-
클래스 레벨에서 사용할 수 있어야 하므로, 인스턴스를 생성하지 않아도 사용할 수 있어야 함 !
Static 의 이점
- 프로그램 실행 시 이미 메모리에 전제하기 때문에 호출 속도가 빠름
- static 메서드는 인스턴스를 생성하지 않기 때문에 메모리 사용량을 줄일 수 있음
- 여러 인스턴스가 공유 가능
Static 의 단점
- 클래스의 인스턴스와 별도로 존재하기 때문에, 이를 잘못 사용하면 프로그램의 설계가 어려워짐
- 다중 스레드 환경에서 동시에 접근될 수 있기 때문에 이를 제어하지 않으면 문제 발생
컴파일 과정
- 클래스가 로드될 때 초기화
- static 메서드
- 호출하려면 클래스 이름을 사용하여 직접 호출해야 합니다.
- 이 때 클래스 파일의 메서드 영역에 적재
- static 멤버 변수