728x90
static 3강부터 ~
멤버 변수 종류
- 인스턴스 변수: static이 붙지 않은 변수
- 인스턴스 변수는 인스턴스 만들 때 마다 새로 만들어짐
- 클래스 변수: static이 붙은 변수
- 인스턴스와 무관하게 클래스에 바로 접근해서 사용 가능
- 자바 프로그램을 시작할 때 딱 1개 생성됨
변수와 생명주기
- 지역 변수(매개변수 포함)
- 스택 영역에 있는 스택 프레임 안에 보관
- 메서드가 종료되면 스택 프레임도 제거 되는데, 이 때 해당 스택 프레임에 포함된 지역 변수도 함께 제거됨
- 따라서 생존 주기가 짧다.
- 인스턴스 변수: 인스턴스에 있는 멤버 변수.
- 힙 영역을 사용
- GC가 발생하기 전까지 생존하므로 지역 변수보다 보통 생존 주기가 긺
- 클래스 변수
- 메서드 영역의 static 영역에 보관되는 변수
- 프로그램 전체에서 사용하는 공간이다.
- 해당 클래스가 JVM에 로딩 되는 순간 생성된다. 그리고 JVM이 종료될 때까지 생명주기가 이어짐
- 가장 긴 생명주기를 가짐
클래스 변수를 인스턴스 변수처럼 접근해 사용할 수 있지만, 권장하지 않음. 사용하는 입장에서 인스턴스 변수인가? 라고 생각할 수 있음
static 메서드
- 클래스 메서드
- 메서드 앞에도 static이 붙을 수 있음. 이것을 정적 메서드, 클래스 메서드라 함
- 클래스 내부의 기능을 사용할 때, 정적 메서드는 static이 붙은 정적 메서드나 정적 변수만 사용할 수 있음
- 인스턴스 변수나 메서드를 사용하지 못함 (compile error)
- 반면에 외부에서는 접근 제어자만 허락한다면 모든 곳에서 호출할 수 있음
- 인스턴스 메서드
- static이 붙지 않은 메서드
- 클래스 내부에서 static이 붙든 안붙든 모두 사용 가능
static import 적용
- import static static2.DecoData.staticCall; 과 같이 import 한 경우 클래스 명을 쓰지 않아도 된다.
- DecoData.staticCall() -> staticCall()
main 메서드는 정적 메서드
- main() 메서드는 프로그램을 시작하는 시작점인데, 객체 생성 없이 main() 메서드가 작동했음
- static이기 때문
- 정적 메서드인 main()은 정적 메서드만 사용할 수 있다.
728x90
'프로그래밍 > Java' 카테고리의 다른 글
[실전 자바-기본편] final (0) | 2024.02.14 |
---|---|
[실전 자바-기본편] 자바 메모리 구조와 static (0) | 2024.02.14 |
[실전 자바-기본편] 접근 제어자 (0) | 2024.02.11 |
[실전 자바-기본편] 패키지 (0) | 2024.02.09 |
[실전 자바-기본편] 생성자 (0) | 2024.02.08 |
댓글