[Java] 자바 변수 4가지 정리 (전역, 지역, 정적, 멤버 변수)

2025. 11. 10. 17:23·Java

자바 변수의 분류 기준 : 메모리 위치와 생명주기 

자바에서 변수의 종류를 나눌 때 가장 중요한 기준은 '어디에 저장되고', '언제 생성되며', '언제 사라지는가' 이다. 이는 곧 JVM의 메모리 영역과 직결된다. 

변수 종류 메모리 영역 생명주기
지역 변수 (Local Variable) 스택 영역 메서드가 호출될 때 생성되어, 메서드가 종료될 때 소멸
멤버 변수 (Instance Variable) 힙 영역 객체가 생성될 때 생성되어, 객체가 GC될 때 소멸
클래스 변수/정적 변수 (Static Variable) 메서드 영역 클래스가 로딩될 때 생성되어, JVM이 종료될 때까지 유지
전역 변수 없음 상황에 따라 클래스 변수 또는 멤버 변수로 구현

 

핵심 변수 3가지 상세 분석 

1) 지역 변수 (Local Variable)

- 선언 위치 : 메서드 내부, 생성자 내부, 또는 제어문 내부 
- 메모리 위치 : 스택 영역에 저장 
- 생명 주기 : 해당 메서드나 블록이 호출될 때 생성되고, 실행이 종료될 때 스택에서 pop 되며 소멸
- 접근 범위 : 선언된 메서드나 블록 내부에서만 사용 가능 
- 초기화 : 반드시 수동으로 초기화 해야 함 (초기화 하지 않으면 컴파일 오류 발생) 

 

예시 

public void calculate() {
    int num1 = 10; // 지역 변수 (Stack에 저장)
    // ...
} // 메서드 종료 시 num1 소멸

 

2) 멤버 변수 (Instance Variable) 

- 선언 위치 : 클래스 내부에 선언되며 `static` 키워드가 붙지 않는다. 
- 메모리 위치 : 힙 영역에 저장 
- 생명 주기 : 객체 (`new`)가 생성될 때 생성되어, 객체가 가비지 컬렉터(GC에 의해 제거될 때 소멸된다. 
- 접근 범위 : 클래스 내부 어디서든 접근 가능하며, 객체를 통해 외부에서도 접근 가능
- 초기화 : 자동으로 기본값으로 초기화됨 

 

예시 

public class User {
    private String name; // 멤버 변수 (Heap에 저장)

    public void setName(String name) {
        this.name = name;
    }
}
// 사용: User user1 = new User();
// -> user1 객체와 name이 Heap에 생성됨

 

3) 클래스 변수/정적 변수 (Static Variable) 

- 선언 위치 : 클래스 내부에 선언되며, `static` 키워드가 붙는다. 
- 메모리 위치 : 메서드 영역에 저장
- 생명 주기 : 클래스가 JVM에 로딩될 때 생성되어, JVM이 종료될 때까지 살아있음 (가장 긴 생명주기) 
- 접근 범위 : 클래스 이름으로 접근 가능하며, 모든 객체가 이 값을 공유함 
- 초기화 : 멤버 변수와 동일하게 자동으로 기본값으로 초기화됨 

 

예시 

public class Config {
    // 모든 객체가 공유하는 변수 
    public static final String VERSION = "1.0"; 
    
    // static 변수는 객체 생성 없이 바로 접근 가능
}
// 사용: System.out.println(Config.VERSION);

 

 

전역변수 ? 

자바 언어 스택에서는 전역 변수 (Global Variable) 라는 개념이 명시적으로 존재하지 않는다. 

-> 자바는 캡슐화와 객체 지향을 위해 클래스 외부의 전역 변수를 허용하지 않는다. 전역적으로 사용되는 데이터는 다음 2가지로 대체된다. 

 

1) 클래스 변수 : `public static final` 형태로 선언하여 전체 애플리케이션에 공유 설정값, 상수 등을 만든다. 

2) 싱글톤 객체 : 데이터 저장소나 유틸리티처럼 프로그램 전반에 걸쳐 사용되는 객체를 싱글톤 패턴으로 구현하여 사용한다. 

 

 

 

 

'Java' 카테고리의 다른 글

[Java] JVM GC 작동 원리  (0) 2025.11.10
[Java] JVM(자바 가상 머신)에 대한 모든 것  (0) 2025.11.10
[Java] 원시타입(Primitive Type)과 참조타입(Reference Type)  (0) 2025.10.14
[Java] 스트림(Stream)에 대하여  (0) 2025.10.14
[Java] 실수를 나타내는 Double, double, float, decimal 의 차이  (0) 2025.10.13
'Java' 카테고리의 다른 글
  • [Java] JVM GC 작동 원리
  • [Java] JVM(자바 가상 머신)에 대한 모든 것
  • [Java] 원시타입(Primitive Type)과 참조타입(Reference Type)
  • [Java] 스트림(Stream)에 대하여
erika0915
erika0915
백엔드 개발자가 되고 싶어요 .
  • erika0915
    erikoding
    erika0915
  • 전체
    오늘
    어제
    • 분류 전체보기 (78)
      • 프로젝트 (13)
        • 끼니콩 (3)
        • 덕메랑 (3)
        • handDoc (7)
        • Haeil (0)
      • Java (9)
        • 클린코더스 (0)
      • Spring (30)
      • Redis (3)
      • CS (7)
        • 운영체제 (3)
        • 컴퓨터구조 (0)
        • 네트워크 (4)
      • DevOps (2)
      • 코딩테스트 (0)
      • Tech (14)
        • TDD (1)
        • 정리 (5)
        • 우테코 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    자바
    파인튜닝
    docker
    깃허브
    네트워크
    도커
    redis
    코드레빗
    promtail
    깃
    OS
    java
    지라
    STT
    CoolSMS
    TDD
    Spring
    스프링부트
    스프링
    springboot
    Network
    운영체제
    jira
    coderabbit
    AI
    MongoDB
    git
    레디스
    github
    몽고디비
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
erika0915
[Java] 자바 변수 4가지 정리 (전역, 지역, 정적, 멤버 변수)

티스토리툴바