- 클래스의 필드(field)란 클래스에 포함된 변수(variable)를 의미한다.
- 클래스 내에서 필드는 선언된 위치에 따라 구분된다.
1. 클래스 변수(static variable)
- 클래스 영역에 위치한 변수 중에서 static 키워드를 가지는 변수
2. 인스턴스 변수(instance variable)
- 클래스 영역에 위치한 변수 중 static 키워드를 가지지 않는 변수
3. 지역 변수(local variable)
- 메소드나 생성자, 초기화 블록 내에 위치한 변수
class Car {
static int modelOutput; // 클래스 변수
String modelName; // 인스턴스 변수
void method() {
int something = 10; // 지역 변수
}
}
클래스 변수와 인스턴스 변수는 초기화를 하지 않아도 변수의 타입에 맞게 자동으로 초기화가 된다.
하지만 지역 변수는 사용 전 초기화하지 않으면, 오류가 발생한다.
생성 및 소멸 시기, 저장되는 메모리 공간과 사용 방법까지도 서로 다르다.
클래스 변수와 인스턴스 변수 차이
클래스 변수는 인스턴스를 생성하지 않고도 바로 사용할 수 있다.
클래스 변수는 생성된 모든 인스턴스가 같은 값을 공유하며, 이를 공유 변수(shared variable)라고도 한다.
반면 인스턴스 변수는 인스턴스마다 고유한 값을 가진다.
class Field {
static int classVar = 10; // 클래스 변수 선언
int instanceVar = 20; // 인스턴스 변수 선언
}
public class Main {
public static void main(String[] args) {
// 지역 변수 선언과 참조
int var = 30;
System.out.println(var); // 30
// 인스턴스 생성
Field myField1 = new Field();
Field myField2 = new Field();
// 클래스 변수 참조
System.out.println(Field.classVar); // 10
System.out.println(myField1.classVar); // 10
System.out.println(myField2.classVar); // 10
// 클래스 변수 값 변경 후 참조
myField1.classVar = 100;
System.out.println(Field.classVar); // 100
System.out.println(myField1.classVar); // 100
System.out.println(myField2.classVar); // 100
// 인스턴스 변수 참조
System.out.println(myField1.instanceVar); // 20
System.out.println(myField2.instanceVar); // 20
// 인스턴스 변수 값 변경 후 참조
myField1.instanceVar = 200;
System.out.println(myField1.instanceVar); // 200
System.out.println(myField2.instanceVar); // 20
}
}
'Java' 카테고리의 다른 글
[Java] 클래스 메서드와 인스턴스 메서드 (0) | 2022.09.07 |
---|---|
[Java] this와 this() (0) | 2022.09.06 |
[Java] 클래스 class (0) | 2022.09.06 |
[Java] 다차원 배열과 가변 배열 (0) | 2022.09.05 |
[Java] 배열 Array, 복사 방법 (0) | 2022.09.04 |