목록으로 돌아가기

자바의 4가지 변수와 JVM에서의 저장위치

학습목표

지역변수, 매개변수, 인스턴스변수, Static변수가 각각 어떤 건지, 또 JVM 메모리에 각각 어디에 저장될까?

자바의 4가지 변수

public class VariableTypes {

		**static** int 클래스변수;
		
		int 인스턴스변수;
		
		public void method(int 매개변수){
			int 지역변수;
		}
}

자바에는 총 4가지 변수가 있다.

  static변수(클래스변수) 인스턴스변수
객체 생성이 필요한가 static 키워드가 붙고, 객체 없이도 사용할 수 있다. 클래스이름.클래스변수 를 통해 접근할 수 있다. 객체를 생성 해야만 사용할 수 있다
저장공간 한 클래스의 모든 인스턴스가 공유하는 저장공간을 가지므로 공통적인 값을 가진다. static변수와 달리, 독립적인 저장공간을 가지므로 인스턴스 별로 다른 값을 가질 수 있다.
사용목적 주로 공유의 목적으로 사용된다. 인스턴스마다 고유의 값을 가지게 할 때 인스턴스 변수를 사용한다.
  1. static변수(클래스변수)
    • static 키워드가 붙고, 특정 인스턴스가 아니라 클래스에 소속된다. 클래스는 메소드 영역에 먼저 올라간다. 즉, 객체가 생기기 전에 생성되기 때문에 객체 없이도 사용할 수 있다.
    • 클래스이름.클래스변수 를 통해 접근할 수 있다. 클래스 소속이기에 객체가 사라져도 사용 가능하다.
    • 클래스 하나당 하나만 생성된다.
    • 객체 내부가 아니라, 한 클래스의 모든 인스턴스가 공유하는 별도의 공간에 생성되므로, 공통적인 값을 가진다. 주로 공유의 목적으로 사용된다.
  2. 인스턴스변수
    • 객체를 생성 해야만 사용할 수 있다.
    • 객체가 생성될 때 같이 생성된다. 즉 static변수와 달리, 독립적인 저장공간을 가지므로 인스턴스 별로 다른 값을 가질 수 있다. 인스턴스마다 고유의 값을 가지게 할 때 인스턴스 변수를 사용한다.
    • 객체가 사라지면 사용 불가능하다.
  3. 파라미터(매개변수) : 메소드를 정의할 때 선언되는 변수. 메서드 호출 시 외부로부터 전달받는 값을 저장하는 데 사용된다.
  4. 지역변수(로컬변수) : 메소드 내에 선언되며 메소드 내에서만 사용할 수 있는 변수

생명주기에 따른 JVM에서의 저장 위치

images

JVM 저장 위치 저장되는 변수 생명 시작 시점 소멸 시점
1. 메소드영역 static 변수 클래스 생성될 때 생명 시작 (딱 한번만 메모리에 올라감) 자바 프로그램이 끝나면 소멸
2. 힙 영역 인스턴스 변수 객체가 생성될 때 생명 시작 (객체의 일부이기 때문) 그 객체를 참조하고 있는 다른 객체가 없으면 소멸(gc가 정리함)
3. 스택 영역
(스택영역에는 메소드마다 스택 프레임이 만들어지는데 거기에 저장됨)
파라미터 메소드 호출시 생명 시작 메소드 끝나면 스택프레임과 함께 소멸 (호출한 메소드에서 넘겨준 참조 자료형은 그대로 살아있음)
  지역변수 지역변수를 선언한 곳부터 생명 시작 메소드가 끝나면 스택프레임과 함께 소멸 (지역변수를 선언한 중괄호가 끝나면 소멸)

댓글남기기