개발/JAVA
자바) 인스턴스 변수와 클래스 변수에 대해서 (+ 지역변수)
hubaek
2024. 9. 24. 01:01
선언 위치에 따라서 변수의 종류가 달라진다.
Class Variables {
// 2~5 Line 클래스영역
int iv; // 인스턴스변수
static int cv; // 클래스변수(static변수)
void method() { // 5~7 Line 메서드영역
int lv = 0; // 지역변수
}
}
변수의 종류 | 선언위치 | 생성시기 |
클래스변수 | 클래스 영역 | 클래스가 메모리에 올라갈 때 |
인스턴스변수 | 인스턴스 생성시 | |
지역변수 | 메서드 영역 | 변수 선언문 수행시 |
인스턴스변수(instance variable)
- 각 인스턴스의 개별적인 저장공간. 인스턴스마다 다른 값 저장 가능
- 인스턴스 생성 후, '참조변수.인스턴스변수명' 으로 접근 가능
예시) Variables var = new Variables();
var.iv;
클래스변수(class variable)
- 같은 클래스의 모든 인스턴스들이 공유하는 변수
- 인스턴스 생성없이 '클래스이름.클래스변수명'으로 접근 가능 (예시. Variables.cv; )
- 클래스가 로딩 될 때 생성되고 프로그램이 종료될 때 소멸
지역변수(local variable)
- 메서드 내에 선언되며, 메서드의 종료와 함께 소멸
- 조건문, 반복문의 블럭{} 내에 선언된 지역변수는 블럭을 벗어나면 소멸
class Car {
// 인스턴스 변수 자동차의 색상, 스피드
String color;
int speed;
static int maxSpeed = 240; // 클래스변수, 자동차의 최고속도는 240km
Car(String color, int speed) {
this.color = color;
this.speed = speed;
}
void drive() {
int currentSpeed = 80; // 지역변수, 자동차의 현재 속도는 80km
}
}
인스턴스변수 : 자동차는 색상과 스피드를 가진다고 했을때, 자동차는 여러색상과 제각기의 스피드를 가진다.
클래스변수 : 모든 자동차의 최고속도는 240km이다.
로컬변수 : 현재 자동차의 속도는 80km이다.