Java 변수 유형과 메모리

Trilly·2023년 1월 10일
0

Java 잡아!

목록 보기
2/3

오늘은 '변수'에 대해서 유형, 선언 위치, 사용 범위, 메모리, 생성과 소멸 관점에서 정리를 해 보겠다.

지역변수 Local Variable

가장 일반적으로 볼 수 있는 변수이다. 함수 내부에 선언되어 그 함수 내부에서만 사용할 수 있고, 함수가 호출될때 생성, 함수가 끝나면 소멸한다. 스택 메모리를 이용한다.

스택 Stack

스택 메모리는 함수가 호출 될때 사용하는 메모리로 알려져 있다. 그런 의미에서, 함수 안에서 선언되는 지역변수가 스택 메모리에 저장된다는 것은 당연하다고 할 수 있다. 함수 호출 후 수행이 끝나면 메모리는 자동으로 반환된다.

public static void main(String[] args) {
	int num1 = 10
    int num2 = 20
    int sum = 0;
    
    sum = add(num1,num2);
}

public void add(int n1, int n2) {
	result = n1 + n2;
    return result;
}

멤버 변수 Instance Variable

클래스내에 만들어지는 변수를 의미한다. 보통 private로 생성하고, 클래스 내부에서만 사용하지만 public 등으로 만든다면 참조 변수로 다른 클래스에서도 사용 될 수 있다.(하지만 외부에서 멤버변수의 직접 접근은 지양한다.)
인스턴스가 생성될 때 힙(Heap) 메모리에 저장되며, 가비지 컬렉터(GC)에 의해 소멸된다.

인스턴스 Instance

인스턴스는 클래스로부터 생성된 객체를 의미한다.
클래스를 기반으로 new와 생성자를 이용하여 여러개의 인스턴스를 생성 할 수 있다. 지역변수로서 만들어진 참조변수가 스택에 저장되고, 참조 값(인스턴스의 힙 메모리 주소값)을 통해 힙 메모리에 저장된 인스턴스에 접근한다.

public void static main(String[] args) {
	Student studentByeon = new Student(); 
    //studentByeon은 main 함수내에서 쓰이는 멤버 변수이자 인스턴스를 가리키는 참조변수이다.
    System.out.println(studentByeon); // 참조값 출력 [classfullname]@[참조값]
    
}
class Student {
	private id;
    private name;
    //id와 name은 Student 클래스의 멤버 변수로서 인스턴스가 생성될 때 힙 메모리에 저장된다.

    
    //생략//
}

스태틱 변수 Static(Class) Variable

static 예약어를 사용하여 클래스 내부에 선언 된다. 사용 목적에 따라 privatefinal등의 예약어를 같이 쓰기도 한다. 프로그램이 처음 시작될 때 상수와 함께 데이터 영역 메모리에서 생성되고 프로그램이 끝날 때 소멸된다.
여러 인스턴스가 하나의 값을 공유할 필요가 있을 때 사용되는 변수이다(학번). 인스턴스가 생성되지 않아도 사용할 수 있어서 클래스 이름으로 참조한다. 같은 이유로 static 메서드에서는 인스턴스 변수를 사용할 수 없다.

정리

profile
노력하는 삶을 즐기는 천재

0개의 댓글