이 글은 PC 버전 TISTORY에 최적화 되어있습니다.
선언 위치에 따른 변수의 종류
자바에서의 변수는 클래스 변수, 인스턴스 변수, 지역 변수가 있습니다. 변수의 종류를 결정짓는 것은 '변수가 선언된 위치' 입니다.
다음의 코드를 보면서 말씀드리겠습니다. 코드를 보시면서 어디가 클래스의 영역이고, 어디가 메서드 영역인지 구분하시길 바랍니다.
public class test {
int iv; // 인스턴스 변수 static int
cv; // 클래스 변수
void method() {
int lv; // 지역 변수
}
}
위의 그림에는 모두 3개의 int 형 변수가 선언되어 있는데, iv와 cv는 클래스 내부에 선언되어 있으므로 멤버 변수입니다. 그 중 cv는 static으로 선언되었으니 클래스 변수이고, iv는 인스턴스 변수입니다. lv는 메서드 내에 선언 되어 있으므로 지역 변수 입니다. 그렇다면 3개의 변수는 무슨 차이를 지닐까요?
인스턴스 변수
인스턴스 변수는 인스턴스가 생성될 때 생성됩니다. 그렇기 때문에 인스턴스 변수의 값을 읽어오거나 저장하려면 인스턴스를 먼저 생성해야합니다. 인스턴스 별로 다른 값을 가질 수 있으므로, 각각의 인스턴스마다 고유의 값을 가져야할 때는 인스턴스 변수로 선언합니다.
클래스 변수
클래스 변수는 인스턴스 변수에 static만 붙여주면 됩니다. 인스턴스 변수는 각각 고유한 값을 가지지만 클래스 변수는 모든 인스턴스가 공통된 값을 공유하게 됩니다. 한 클래스의 모든 인스턴스들이 공통적인 값을 가져야할 때 클래스 변수로 선언합니다. 클래스가 로딩될 때 생성되어(그러므로 메모리에 딱 한번만 올라갑니다.) 종료 될 때 까지 유지되는 클래스 변수는 public 을 붙이면 같은 프로그램 내에서 어디서든 접근할 수 있는 전역 변수가 됩니다. 또한 인스턴스 변수의 접근법과 다르게 인스턴스를 생성하지 않고 클래스이름.클래스변수명 을 통해서 접근할 수 있습니다.
지역 변수
메서드 내에서 선언되며 메서드 내에서만 사용할 수 있는 변수입니다. 메서드가 실행될 때 메모리를 할당 받으며 메서드가 끝나면 소멸되어 사용할 수 없게 됩니다.
'Basic > Java' 카테고리의 다른 글
[JAVA] 객체(Object)의 형 변환 (2) | 2016.07.19 |
---|---|
[JAVA] Static에 대하여 (0) | 2016.07.19 |
[JAVA] JVM의 메모리구조 (0) | 2016.07.19 |
[JAVA] 절차지향언어와 객체지향언어 (0) | 2016.07.19 |
[자바] 예외처리 (2) - 예외클래스의 구조 (1) | 2016.07.08 |
[자바] 예외처리 (1) - 예외처리란? (2) | 2016.07.08 |