Java & Spring/Java

객체의 상태와 변수의 생명주기

승주우에요 2026. 1. 5. 21:25

1. 객체의 상태란?

객체는 상태(state)와 행동(behavior)으로 구성된다. 

  • 상태 -> 변수
  • 행동 -> 메서드
class Person {
    String name; // 상태
    int age;     // 상태

    void speak() { // 행동
        System.out.println("아아 목소리!!");
    }
}

📌즉, 변수를 이해하는 것은 객체의 상태를 이해하는 것이라고 볼 수 있다.

 

2. 변수는 모두 같지 않다. 

Java의 변수는 선언 위치와 생명 주기에 따라 명확히 구분된다.

 

변수의 3가지 종류

  1. 인스턴스 변수 (필드)
  2. 클래스 변수 (static 변수)
  3. 지역 변수

이 변수들은 메모리와 생명 주기 차이가 핵심이다.

 

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