메서드 영역(Method Area)
프로그램을 실행하는데 필요한 공통 데이터 관리(프로그램의 모든 영역에서 공유)
클래스 정보 : 클래스의 실행 코드, 필드, 메서드와 생성자 코드등의 모든 실행 코드 존재
static 영역 : static 변수들을 보관
런타임 상수 풀 : 프로그램을 실행하는데 필요한 공통 리터럴 상수들 보관
스택 영역(Stack Area)
자바 실행 시, 하나의 실행 스택 생성
각 스택 프레임은 지역변수, 중간 연산 결과, 메서드 호출 정보 등을 포함
스택 영역은 각 쓰레드 별로 하나의 실행 스택이 생성됨.
>>쓰레드 수 만큼 스택 영역이 생성됨
스택 프레임 : 스택 영역에 쌓이는 네모 박스가 하나의 스택 프레임
메서드를 호출할 때 마다 하나의 스택 프레임이 쌓이고 종료되면 제거됨
힙 영역(Heap Area)
객체와 배열이 생성되는 영역
가비지 컬렉션이 이루어지는 주요 영역
객체가 생성될 때, 인스턴스 변수에는 메모리가 할당되지만, 메서드에 대한 새로운 메모리 할당은 없음
>> 인스턴스의 메서드를 호출하면 메서드 영역에 있는 코드를 불러서 수행
static 변수(정적 변수, 클래스 변수)
static 키워드는 주로 멤버 변수와 메서드에 사용
static이 붙은 멤버 변수는 메서드 영역에서 관리
>> static이 붙은 멤버 변수는 인스턴스 영역에 생성되지 않음
static이 붙은 정적 변수에 접근하려면?
>> 클래스명 + . + 변수명
멤버 변수(필드)의 종류
인스턴스 변수 : static이 붙지 않은 멤버 변수
인스턴스를 생성해야 사용할 수 있고 인스턴스에 소속되어 있음
인스턴스를 만들 때 마다 새로 만들어짐
클래스 변수 : static이 붙은 멤버 변수
인스턴스와 무관하게 클래스에 바로 접근해서 사용 가능, 클래스 자체에 소속되어 있음
자바 프로그램을 시작할 때 딱 1개가 만들어짐
보통 여러곳에서 공유하는 목적으로 사용
static 메서드
정적 메서드는 객체 생성없이 클래스에 있는 메서드를 바로 호출 가능
하지만 언제나 사용할 수 있는 것은 x
static 메서드는 static만 사용 가능
>>클래스 내부 기능을 사용할 떄, 정적 메서드는 static이 붙은 정적 메서드나 정적 변수만 사용 가능
반대로 모든 곳에서 static 호출 가능
정적 메서드가 인스턴스의 기능을 사용할 수 없는 이유?
>> 정적 메서드는 인스턴스 처럼 참조값의 개념이 없음
static import
정적 메서드를 사용할 때 해당 메서드를 자주 호출해야 한다면?
>> import static static2.DecoData.staticcall or *;
정적 변수에도 사용 가능
main() 메서드는 정적 메서드
'Java' 카테고리의 다른 글
Java / 상속 (0) | 2025.02.23 |
---|---|
Java / final (0) | 2025.02.22 |
Java / 접근 제어자 (0) | 2025.02.21 |
Java / 패키지 (0) | 2025.02.21 |
Java / 생성자 (0) | 2025.02.21 |