1. 객체의 상태란?
객체는 상태(state)와 행동(behavior)으로 구성된다.
- 상태 -> 변수
- 행동 -> 메서드
class Person {
String name; // 상태
int age; // 상태
void speak() { // 행동
System.out.println("아아 목소리!!");
}
}
📌즉, 변수를 이해하는 것은 객체의 상태를 이해하는 것이라고 볼 수 있다.
2. 변수는 모두 같지 않다.
Java의 변수는 선언 위치와 생명 주기에 따라 명확히 구분된다.
변수의 3가지 종류
- 인스턴스 변수 (필드)
- 클래스 변수 (static 변수)
- 지역 변수
이 변수들은 메모리와 생명 주기 차이가 핵심이다.
3. 필드(Field) vs 지역 변수(Local Variable)
필드 (Field)
- 클래스 내부, 메서드 외부에 선언
- 객체의 상태를 표현
- Heap에 저장
class Person {
/*
필드 영역
*/
public Person(){} # 생성자
public void speak(); # 메서드
}
지역 변수
- 메서드 내부에 선언
- 일시적인 계산용
- Stack에 저장
// for문 내부에서 선언된 i는 지역 변수이다.
for (int i = 0; i < 10; i++) {
System.out.println(i); // 정상 접근 가능
}
// 여기서 i는 이미 스택에서 제거됨
// → for 블록이 끝나는 순간 생명주기 종료
// System.out.println(i); // ❌ 컴파일 오류: cannot find symbol
4. 인스턴스 변수 (Instance Variable)
정의
- 객체마다 각자 따로 가지는 변수
- 객체의 개별 상태를 표현
Person p1 = new Person();
Person p2 = new Person();
p1.name = "철수";
p2.name = "영희";
같은 클래스, 다른 객체, 다른 값!
메모리 관점
- 객체 생성 시 Heap에 함께 생성
- 객체가 GC 대상이 되면 함께 제거
📌인스턴스 변수 = 객체의 정체성
5. static 변수 (클래스 변수)
정의
- 모든 객체가 공유함.
class Counter {
static int count;
}
Counter c1 = new Counter();
Counter c2 = new Counter();
c1.count++;
System.out.println(c2.count); // 1
Counter.count;
📌 객체로 접근은 가능하지만 클래스명 접근이 원칙
6. static 변수의 메모리와 생명 주기
생성 시점
- 클래스 로딩 시
- 객체 생성보다 빠름
저장 위치
- Method Area
소멸 시점
프로그램 종료까지 메모리에 유지됨
7. 인스턴스 변수 vs static 변수 정리
| 인스턴스 변수 | static 변수 | |
| 저장 위치 | Heap | Method Area |
| 접근 방식 | 객체 참조 | 클래스명 |
| 용도 | 개별 상태 | 공유 상태 |
8. 언제 static을 써야 할 까?
- 모든 객체가 같은 값을 써야 할 때
- 상태보다는 공통 기준값
- 상수, 설정값
📌 static은 편의 기능이 아니라 설계 선택
9. 핵심 요약
- 변수는 선언 위치에 따라 메모리 위치와 생명주기가 다르다
- 필드는 객체의 상태를 표현한다
- 인스턴스 변수는 객체마다 다르고 static 변수는 클래스 단위로 공유된다
'Java & Spring > Java' 카테고리의 다른 글
| 생성자&this,this() (0) | 2026.01.06 |
|---|---|
| 메서드 (0) | 2026.01.06 |
| Static (2) | 2026.01.05 |
| 객체 지향 기본 (0) | 2026.01.05 |
| 객체지향프로그래밍(OOP) (0) | 2026.01.05 |