프로그램을 실행하는데 필요한 공통 데이터 관리 - 모든 영역에서 공유
자바 실핼 시 하나의 실행 스택이 생성된다
각 스택 프레임은 지역 변수, 중간 연산 결과, 메서드 호출 정보 등을 포함한다
인스턴스와 배열이 생성되는 영역으로 가비지 컬렉션이 주로 이루어지는 영역
스택 영역은 각 쓰레드별로 하나의 실행 스택이 생성된다.
인스턴스를 여러개 생성하더라도
인스턴스 메모리는 개별로 올라가지만
클래스의 메서드 코드는 메서드 영역에 한 번만 생성되어 참조하여 사용
자료의 저장과 사용 순서를 보장하기 위한 자료구조
후입선출의 자료구조
선입선출의 자료구조
주로 멤버 변수와 메서드에 사용된다
인스턴스의 값은 각 객체끼리 공유하지 않는다
static 을 사용하면 해당 필드와 메서드가 메모리(메서드 영역)에 올라가 클래스 레벨에서 동작하게 된다
따라서 여러 객체에서 하나의 값 또는 메서드를 공유할 수 있게 된다
때문에 static 으로 선언된 멤버 변수는 static 변수 또는 정적 변수, 클래스 변수라고 부른다
인스턴스 변수: 일반 멤버변수
클래스 변수: static 이 선언된 정적 변수 (static 변수)
static 변수는 클래스를 통해 바로 접근할 수 있고
인스턴스를 통해서도 접근할 수 있지만 추천하지 않는 방법
코드를 읽을 때 인스턴스 변수인지 스태틱 변수인지 바로 확인하기 어렵다
정적 메서드 또한 정적 변수와 같이 클래스 레벨로 생성되기 떄문에
인스턴스를 생성하지 않고도 어디서든 클래스르르 통해 접근할 수 있다
불필요한 객체 생성 없이 편리하게 메서드를 사용할 수 있다
정적 메서드 내에서는 인스턴스 변수나 인스턴스 메서드를 사용할 수 없다
주로 유틸리티성 메서드에 자주 사용된다
정적 메서드를 자주 사용해야 한다면 import 를 하여 편하게 사용할 수 있다
import static Math.floor;
import static Math.*; // 와일드 카드로 전부 불러올 수도 있다
public class DataMain {
public static void main(String[] args) {
Math.floor(123.1)
}
}
인스턴스 생성 없이 실행하는 가장 대표적인 메서드
main() 메서드는 프로그램의 시작점이 된다
static 메서드이기 때문에 객체 생성 없이도 사용 가능하다
정적 메서드는 같은 클래스 내부에서 정적 메서드만 호출할 수 있다