요약
누군가가 클래스 변수, 지역 변수, 인스턴스 변수가 무엇인지에 대해 물어봤을때 답변하실수 있으신가요?
어??... 말로 표현할려니까 힘드네 하시는 분은 이 글을 읽으시며 다시 한번 리마인드 하시면 좋겠고, 답변 하실수 있으시면 이 글을 읽지 않으셔도 됩니다!
자바에서 변수는 클래스 변수, 지역 변수, 인스턴스 변수(멤버 변수)로 나뉩니다.
클래스 변수는 static 키워드를 사용해 선언되며, 클래스 레벨에서 정의가 됩니다. 이는 해당 클래스의 모든 객체가 공유하며, JVM에 의해 클래스가 로드될때 메모리에 할당됩니다.
인스턴스 변수는 객체마다 개별적으로 존재하며, 객체가 생성될 때 메모리에 할당됩니다.
지역변수는 메서드나 블록 내에서 선언되며, 해당 영역 내에서만 사용할 수 있습니다. 이는 스택 메모리에 할당되며, 영역을 벗어나면 메모리에서 해제됩니다.
자바 변수 종류
자바에서 변수에는 클래스 변수, 인스턴스 변수, 지역 변수등이 있습니다.
이를 결정 짓는 것은 변수가 선언된 위치인데, 다음 코드를 보면서 말씀 드리겠습니다.
public class Car{
int doorCount; // 인스턴스 변수
static int wheelCount; // 클래스 변수
void go(){
....
int remainGas; // 지역 변수
}
}
위의 코드에는 모두 3개의 int형 변수가 선언되어있는데, doorCount와 wheelCount는 클래스 내부에 선언되어 있으므로 멤버 변수입니다.이 중 static으로 선언된 wheelCount는 클래스 변수, doorCount는 인스턴스 변수입니다.
remainGas는 메서드 안에 선언되어 있으므로 지역 변수입니다.
과연 이 세 변수는 어떤 차이를 보일까요?
인스턴스 변수
인스턴스 변수는 인스턴스가 생성될 때 생성이 됩니다. 그렇기 때문에 인스턴스 변수의 값을 읽어오거나 저장하려면 인스턴스를 먼저 생성해야 합니다. 이는 인스턴스 별로 다른 값을 가질 수 있으므로, 각각의 인스턴스마다 고유의 값을 가져야 할때는 인스턴스 변수로 선언합니다.
클래스 변수
클래스 변수는 인스턴스 변수에 static을 붙인 변수로 모든 인스턴스가 공통된 값을 유지하게 됩니다.
보통 한 클래스에서 생성된 모든 인스턴스들이 값을 공유하고자 할때 사용하며 클래스가 로딩될때 생성되므로 메모리에 딱 한번만 올라갑니다.
또한 이는 인스턴스를 생성하지 않고 클래스이름.클래스변수명을 통해 접근이 가능합니다.
지역 변수
메서드 내에서 선언되며 메서드 내에서만 사용할 수 있는 변수로 메서드가 실행 될때 메모리를 할당받으며 메서드가 끝나면 소멸되어 사용할 수 없게 됩니다.
메모리 적재되는 위치
인스턴스 변수는 객체가 생성될 때마다 힙(heap) 영역
에 매번 새로 생성되며, 각 객체마다 독립적인 변수를 가지게 됩니다. 지역 변수는 메서드가 호출될 때마다 스택(stack) 영역
에 새로 생성되고 메서드 호출이 종료되면 소멸합니다. 반면에 클래스 변수는 static Area
에 한 번만 생성되어 해당 클래스의 모든 객체가 공유합니다.
참고
'JAVA' 카테고리의 다른 글
StringBuffer,StringBuilder의 개념 및 차이점 정복하기 (0) | 2023.05.17 |
---|---|
문자열 리터럴 할당 VS new String() (0) | 2023.05.10 |
[JAVA] Enum 클래스 정복하기! (0) | 2023.05.10 |
Overloading과 OverRiding의 차이 (0) | 2023.05.09 |
[JAVA] 기본형과 참조형에 대해 알아보자! (0) | 2023.05.09 |