이것도 면접 질문에 나왔던 것이라 정리해 본다.
public class Sample{
int instanceV; //인스턴스변수
static int classV; //클래스변수
void method(){
int localV; //지역변수
}
}
전역변수(Global variable)
클래스 영역(메소드 밖)에 선언된 변수를 의미한다.
프로그램이 실행되면 메모리 공간에 데이터를 저장한다.
인스턴스 변수 (instance variable) (= 객체 변수)
-인스턴스가 생성될 때 메모리에 할당됨
-클래스 내에 선언된 변수
-클래스 변수와 달리 공유되지 않는다.
-객체 생성 시마다 매번 새로운 변수가 생성된다.
클래스 변수 (class variable) (= static변수)
-클래스가 메모리에 올라갈 때 메모리에 할당됨
-static 예약어가 선언된 변수
-모든 인스턴스가 공통된 저장공간을 공유한다.
-클래스가 여러 번 생성되어도 static 변수는 처음에만 생성된다.
지역변수 (Local variables)
- 메서드가 실행될 때 메모리상의 스택(stack) 영역에 저장되며 종료되면 소멸되어 사용할 수 없다.- 지역변수는 변수가 선언된 블록 내에서만 유효하고, 블록이 종료되면 메모리에서 사라져 사용할 수 없게된다. (for문 while문도 동일)
class Java{
int instanceV = 4; //인스턴스변수
static int classV = 5; //클래스변수
void method(){
int localV = 6; //지역변수
}
}
public class Sample{
public static void main(String[] args) {
System.out.println("클래스 변수 값: "+Java.classV); // 클래스 변수는 객체생성 안해도 됨
Java java1 = new Java();
//System.out.println("인스턴스 변수 값:"+java.instanceV); //인스턴스 변수는 객체생성 안하면 오류남
java1.instanceV = 100; //인스턴스 변수 값 변경
java1.classV = 200; //클래스 변수 값 변경
System.out.println("변경한 인스턴스 변수 값: "+java1.instanceV);
System.out.println("변경한 클래스 변수 값: "+java1.classV);
}
}
클래스 변수는 객체를 생성하지 않고도 다른 클래스에서 호출이 가능하다.
인스턴스 변수는 다른 클래스에서 사용하려면 객체를 생성해야 한다.
참고출처:
https://itmining.tistory.com/20
'Study > Java' 카테고리의 다른 글
[JAVA] 내부 클래스 (0) | 2022.11.13 |
---|---|
[JAVA] for문 축약(for each문), if-else 축약(삼항 연산자) (0) | 2022.10.18 |
[JAVA] 생성자 (0) | 2022.10.10 |
[자료구조] 배열과 리스트의 차이 (0) | 2022.10.07 |
SQL관련 용어 정리 (0) | 2022.04.18 |