인스턴스 변수,클래스 변수,지역 변수의 차이
자바에서는 변수를 인스턴스 변수, 클래스 변수, 지역 변수로 나눈다. 아래 코드를 보자.
class Variable {
String name; // 인스턴스 변수
static int id; // 클래스 변수
public void getAge(){
int age; // 지역 변수
}
}
이 코드를 바탕으로 알 수 있는것은 다음 세 가지이다.
- 인스턴스 변수 name은 클래스 내부에서 선언되었다.
- 클래스 변수 id는 인스턴스 변수와 비슷하지만 static 이라는 키워드가 앞에 붙어있다.
- 지역 변수 age는 클래스 내부의 메소드내에서 선언이 되었다.
인스턴스 변수
- 클래스 내부의 변수
- 클래스가 인스턴스화 될 때 메모리에 올라간다.
//인스턴스를 생성하지 않는다면 이 변수에는 접근이나 변경이 불가능하다.
클래스 변수
- 클래스 내부의 static 키워드가 붙은 변수
- JVM 이 실행될 때(클래스 로딩시) 메모리에 올라가서 프로그램 종료시에 해제된다.
*** 클래스 변수와 인스턴스 변수의 가장 큰 차이점은 하나의 클래스에 대하여 여러개의 인스턴스가 생성이 되었을때, 인스턴스 변수는 각각의 인스턴스 마다 고유한 값들이 존재하지만, 클래스 변수의 경우 여러개의 인스턴스에 대하여 유일한 값을 갖는다. 그러므로 모든 인스턴스들이 공유해야하는 변수라면 클래스 변수로 선언하는것이 바람직 하다고 볼 수 있다.
지역 변수
- 메소드를 실행시 메모리에 올라가고, 메소드가 종료되면 메모리에서 해제된다.
// 그렇기 때문에 메소드 밖에서 이 변수에 접근하거나 변경하려면 메소드를 실행시켜야 한다.
class Variable {
String name;
static int id; // 컴파일과정 중, 클래스 로딩시에 메모리에 올라간다.
public void getAge() {
int age;
}
}
public class Exercise {
public static void main(String[] args) {
Variable va = new Variable(); // 이때 변수 name 이 메모리에 올라간다.
va.getAge(); // 이때 변수 age 가 메모리에 올라간다.
}
}
'프로그래밍 언어 > Java' 카테고리의 다른 글
[ANDROID / JAVA] Activity 간 화면 전환 (0) | 2023.05.11 |
---|---|
[ANDROID / JAVA] Inflation (0) | 2023.05.09 |
[ANDROID / JAVA] 상속과 생성자 (0) | 2023.05.08 |
[ANDROID / JAVA] 상속 (inheritance) (0) | 2023.05.08 |
[ANDROID / JAVA] ShortCircuitEvaluation (0) | 2023.05.04 |