선언 위치에 따른 변수의 종류
// 클래스 영역
class Variables {
int iv; // 인스턴스 변수
static int cv; // 클래스 변수(static 변수, 공유 변수)
// 메소드 영역
void method() {
int lv = 0; // 지역 변수
}
}
Java
•
지역 변수(local variable) : 멤버변수를 제외한 나머지 변수들
◦
생성시기 : 변수 선언문이 수행되었을 때
◦
선언위치 : 클래스 영역 이외 영역(메소드, 생성자, 초기화 블럭 내부)
▪
메소드 내 선언 : 메소드 내에서만 사용 가능, 메소드 종료 시 사용 불가
▪
for, while 문의 블럭 내 선언 : 블럭 내에서만 사용 가능, 블럭을 탈출하면 사용 불가
•
클래스 변수 : 멤버변수 중 static이 붙은 것
◦
생성시기 : 클래스가 메모리에 올라갈 때
◦
선언위치 : 클래스 영역
◦
모든 인스턴스가 공통된 저장공간(변수)를 공유
→ 한 클래스 내 모든 인스턴스들이 공통값을 유지해야 할 경우 사용
◦
인스턴스를 생성하지 않고 바로 클래스이름.클래스변수로 호출하여 사용 가능
•
인스턴스 변수 : 멤버변수 중 static이 붙지 않은 것
◦
생성시기 : 인스턴스가 생성되었을 때
◦
선언위치 : 클래스 영역
◦
인스턴스 변수 값을 읽어 오거나 저장하기 위해선 반드시 인스턴스 생성이 먼저 필요
◦
인스턴스는 독립적으로 저장 공간을 가질 수 있으므로 서로 다른 값을 가질 수 있음.
◦
인스턴스마다 고유한 상태를 유지해야 하는 속성의 경우, 인스턴스 변수로 선언
클래스 변수와 인스턴스 변수
•
포커 카드 클래스
class Card {
// 인스턴스 변수
String kind; // 무늬
int number; // 숫자
// 클래스 변수
static int width = 100; // 폭
static int height = 250; // 높이
Java
CardTest.java
•
인스턴수 변수
◦
인스턴스가 생성될 때마다 새로 생성 → 인스턴스마다 각기 다른 값 가능
•
클래스 변수
◦
모든 인스턴스가 하나의 저장 공간 공유 → 항상 공통된 값