BE/Java

변수 정리

baek-dev 2025. 7. 22. 12:30

자바(Java)의 변수 종류 정리

자바의 변수는 크게 다음 4가지로 분류됨:

  1. 지역 변수 (Local Variable)
  2. 멤버 변수 (Member Variable)
    • 인스턴스 변수 (Instance Variable)
    • 클래스 변수 (Class Variable / static 변수)
  3. 매개변수 (Parameter Variable)
  4. 상수 (final 변수)

각 변수는 선언 위치, 생명 주기, 메모리 저장 위치에 따라 다르게 동작함.


1. 지역 변수 (Local Variable)

  • 메서드 내부, 생성자 내부, 블록 내부에서 선언된 변수임
  • 해당 블록이 실행될 때 생성되고, 블록이 종료되면 소멸
  • 반드시 초기화 후 사용해야 함
  • 메서드 호출 시마다 새롭게 생성
  • 메모리: 스택(stack) 영역에 저장됨
public void printSum() {
    int a = 5;     // 지역 변수
    int b = 10;    // 지역 변수
    System.out.println(a + b);
}

2. 멤버 변수 (Member Variable)

클래스 블록 내부에 선언되며, 객체나 클래스의 속성(상태) 을 저장함.

2-1. 인스턴스 변수

  • static 키워드가 없는 멤버 변수임
  • 객체가 생성될 때 함께 생성되며, 객체마다 고유한 값을 가짐
  • 클래스의 인스턴스가 사라지면 소멸됨
  • 메모리: 힙(heap) 영역에 저장됨
public class Car {
    String color;  // 인스턴스 변수
}

2-2. 클래스 변수 (static 변수)

  • static 키워드가 붙은 멤버 변수
  • 클래스 로딩 시 단 한 번 생성되어 모든 인스턴스가 공유함
  • 객체 생성 없이도 접근 가능
  • 메모리: 메서드 영역(method area) 에 저장됨
public class Car {
    static int totalCars = 0;  // 클래스 변수
}

3. 매개변수 (Parameter Variable)

  • 메서드나 생성자 호출 시 전달받는 값임
  • 메서드 호출 시 생성되고, 호출이 끝나면 소멸됨
  • 지역 변수처럼 스택(stack) 영역에 저장됨
  • 일반적으로 final 키워드를 붙여 변경을 막는 경우도 많음
public void greet(String name) {  // name: 매개변수
    System.out.println("Hello, " + name);
}

4. 상수 (final 변수)

  • final 키워드를 사용하면 값을 한 번만 초기화할 수 있는 변수가 됨
  • 불변성을 가지며, 값을 변경하려 하면 컴파일 에러가 발생함
  • static final로 선언하면 클래스 전체에서 공유되는 상수가 됨 (관례상 대문자 사용)
public class Config {
    static final int MAX_SIZE = 100;  // 상수
}

메모리 영역 정리

변수 종류 저장 위치 생성 시점 소멸 시점
지역 변수 스택 메서드 호출 시 메서드 종료 시
매개 변수 스택 메서드 호출 시 메서드 종료 시
인스턴스 변수 객체 생성 시 객체가 GC 될 때
클래스 변수 메서드 영역 클래스 로딩 시 클래스 언로드 시

주요 차이점 정리

항목 지역 변수 인스턴스 변수 클래스 변수
선언 위치 메서드, 블록 내부 클래스 내부 클래스 내부
static 여부 없음 없음 static 필수
메모리 영역 스택 메서드 영역
초기화 필요 여부 반드시 초기화 필요 자동 초기화됨 자동 초기화됨
공유 여부 불가능 객체 간 공유 불가 모든 인스턴스가 공유

실무에서 자주 사용하는 예시

  • 설정값 상수: public static final String BASE_URL = "https://api.example.com";
  • 객체마다 다른 값: 인스턴스 변수로 name, age 등 선언
  • 로그인 상태 유지: static 변수로 전역 세션 상태 관리 (단, 추천되지 않음)
  • 임시 연산 변수: 지역 변수로 sum, i, temp 등 선언

 

 

 

 

출처 : ChatGPT

'BE > Java' 카테고리의 다른 글

중첩, 내부클래스  (2) 2025.07.21
LocalDate.parse(입력문자,포맷);  (1) 2025.05.29
date.format()  (0) 2025.05.28
DateTimeFormatter.ofPattern  (0) 2025.05.27
temporalAdjusters  (0) 2025.05.26