디케이
클래스변수, 지역변수와 인스턴스변수 본문
멤버 변수 : 객체와 연결된 변수로, 클래스 내에 선언되어 클래스의 모든 메소드들이 접근 가능한 변수
이 멤버 변수에 종류로 클래스 변수와 인스턴스 변수가 있다.
아래 표로 구분이 가는한데 자세한 설명은 예시를 보자
class test { static int a = 1; // 클래스 변수 int b = 2; // 인스턴스 변수 } class Main { public static void main(String[] args) { System.out.println(test.a); // System.out.println(test.b); Error test ex1 = new test(); test ex2 = new test(); ex1.a = 2; // 클래스 변수 수정 System.out.println(ex2.a); // 2 출력 ex1.b = 3; // 인스턴수 변수 수정 System.out.println(ex2.b); // 2 출력 } }
class test {
static int a = 1; // 클래스 변수
int b = 2; // 인스턴스 변수
}
class Main {
public static void main(String[] args) {
System.out.println(test.a);
// System.out.println(test.b); Error
test ex1 = new test();
test ex2 = new test();
ex1.a = 2; // 클래스 변수 수정
System.out.println(ex2.a); // 2 출력
ex1.b = 3; // 인스턴수 변수 수정
System.out.println(ex2.b); // 2 출력
}
}
1. 클래스 변수
- 클래스 변수는 클래스 안에 있는 멤버변수로 변수 앞에 static을 붙여 사용한다. 클래스가 메모리에 올라갈 때 생성되므로 모든 객체가 해당 변수를 공유한다. 따라서 위의 예시처럼 따로 객체를 생성하지 않아도 직접 변수에 접근이 가능하다.
- 객체가 생성될 때마다 생성되는 각각의 변수가 아니라 공유하는 변수이므로 ex1 객체에서 클래스 변수를 수정하고 ex2 객체에서 이 클래스 변수를 출력하면 수정된 값이 출력된다.
2. 인스턴스 변수
- 인스턴스 변수는 인스턴스가 생성될 때 각각의 인스턴스가 가지는 변수이다. 따라서 인스턴스를 생성하지 않고 인스턴스 변수에 직접 접근하여 출력시킬 수 없다.
- ex1 객체의 인스턴스 변수를 수정하더라도 ex2 객체의 인스턴스 변수와는 별개이므로 원래 저장된 '2'가 출력된다.
3. 지역 변수
- 지역 변수는 메소드 내에서 선언되며 메소드 내에서만 사용할 수 있는 변수이다. 메소드가 실행될 때 메모리를 할당 받으며 메소드가 끝나면 소멸되어 사용할 수 없게 된다.