class Var{
static int a; // static 변수
int b; // 인스턴스 변수
public void increment() {
// 지역 변수: 메서드 호출 때마다 새로 생성(항상 0에서 시작)
int c=0; // 반드시 초기화를 해주어야함!! c=0 <초기화
a+=1; // 모든 객체에 공통으로 반영
b+=1; // 이 객체(v1 등)에만 반영
c+=1; // 호출마다 1로 출력됨
System.out.println("static 변수 a: " + a);
System.out.println("인스턴스 변수 b: " + b);
System.out.println("지역 변수 c: " + c); // 지역변수는 메서드가 시작할떄마다 c는 계속 0으로 초기화
System.out.println();
}
}
public class Ex06_변수 {
public static void main(String[] args) {
System.out.println("객체 1 생성");
Var v1 = new Var();
v1.increment(); // a=1, b=1, c=1
System.out.println("객체 2 생성");
Var v2 = new Var();
v2.increment(); //a=2, b=2, c=1
System.out.println("객체 2 생성");
Var v3 = new Var();
v3.increment(); // a=3, b=3, c=1
System.out.println("객체 2 생성");
Var v4 = new Var();
v4.increment(); // a=4, b=4, c=1
}
}
📌 정리
- static 변수 a → 모든 객체가 공유, 1 → 2 → 3 → 4 계속 누적
- 인스턴스 변수 b → 객체마다 따로 관리, v2, v3, v4는 새 객체라 0부터 시작해서 각각 1
- 지역 변수 c → 메서드 호출 시마다 새로 생성되므로 매번 1
Java변수 정리
1. 선언 위치/생성 시점에 따른 분류
| 변수 종류 | 선언 위치 | 메모리 영역 | 생성 시점 / 소멸시점 | 특징 |
| 지역 변수 (Local Variable) | 메서드, 생성자, 블록 내부 | 스택(Stack) | 메서드 호출 시 생성 / 종료 시 소멸 | 반드시 초기화 후 사용해야 함 |
| 매개변수 (Parameter) | 메서드의 () 안 | 스택(Stack) | 메서드 호출 시 인자 전달 / 종료 시 소멸 | 지역 변수와 동일한 성격, 호출 시 값(또는 참조값) 전달 |
| 인스턴스 변수 (Instance Variable) | 클래스 안, 메서드 밖 (static X) | 힙(Heap) | 객체 생성 시 생성 / GC 시 소멸 | 객체마다 독립적으로 존재, 기본값 자동 초기화 |
| 클래스 변수 (Static Variable) | static 키워드로 선언 | 메서드 영역(Method Area) | 클래스 로딩 시 생성 / 프로그램 종료 시 소멸 | 모든 객체가 공유, 한 번만 생성됨 |
2. 데이터 타입에 따른 분류
| 종류 | 설명 | 예시 |
| 기본형 변수 (Primitive Type) | 실제 값을 저장하는 변수 (8가지) | int num = 10; |
| 참조형 변수 (Reference Type) | 객체의 주소값을 저장하는 변수 | String str = "Hello"; , int[] arr = new int[3]; |
3. 특수 키워드/용도에 따른 분류
| 종류 | 설명 | 예시 |
| final 변수 (상수, Constant) | 한 번 값이 할당되면 변경 불가 | final double PI = 3.14; |
| 멤버 변수 (Member Variable) | 클래스 안에 선언된 변수 전체를 의미 (인스턴스 + static 포함) | class A { int x; static int y; } |
| 전역 변수(Global처럼 쓰임) | 자바에는 엄밀히 없음. static 변수를 전역처럼 사용 가능 | static int count; |
📌 한 줄 요약
- 지역/매개변수 → 메서드 실행 중에만 살아있음
- 인스턴스 변수 → 객체마다 따로 존재
- static 변수 → 클래스가 공유 (전역처럼 사용 가능)
- 참조 변수 → 객체의 주소 저장
- final 변수 → 한 번 값 지정되면 변경 불가