🗣️ Programming Language/Java

[Java] 생명 주기와 접근 범위에 따른 변수의 종류

kimgoat 2024. 10. 18. 17:00

자바에서 변수가 적용될 수 있는 인스턴스, 메서드, 멤버, 블록, 클래스 변수의 개념과 사용 예시를 알아보고자 한다.

1. 인스턴스 변수 (Instance Variable)

  • 정의: 객체가 생성될 때마다 각 객체가 별도로 가지는 변수
  • 적용 대상: 클래스의 멤버 변수 중 하나로, 객체를 통해 접근
  • 생명 주기: 해당 인스턴스(객체)가 메모리에서 해제될 때까지 유지
  • 특징:
    • 인스턴스(객체)마다 별도의 값을 가짐.
    • new 예약어를 사용하여 인스턴스를 생성한 후 접근할 수 있음.

인스턴스 변수 사용 예시

class Person {
    // 인스턴스 변수: 각 객체마다 별도로 생성됨
    String name;
    int age;
}
public class Main {
    public static void main(String[] args) {
        Person p1 = new Person();
        p1.name = "kimgoat";  // 객체 Person을 통해 Person이 가지는 변수 name에 접근
        p1.age = 13;    // 객체 Person을 통해 Person이 가지는 변수 age에 접근

        Person p2 = new Person();
        p2.name = "kimbob";
        p2.age = 20;

        System.out.println(p1.name + ", " + p1.age);  // kimgoat, 13
        System.out.println(p2.name + ", " + p2.age);  // kimbob, 20
    }
}

 

 

2. 클래스 변수 (Class Variable)

  • 정의: 모든 객체가 공유하는 변수
  • 적용 대상: static 키워드를 사용한 변수. 인스턴스 없이 클래스명으로 접근
  • 생명 주기: 프로그램이 시작되어 해당 클래스가 로드될 때부터 종료될 때까지 유지
  • 특징:
    • 모든 객체가 같은 값을 공유
    • 인스턴스를 생성하지 않아도 클래스명으로 바로 접근 가능 (`Counter.count`).
    • 메모리에 한 번만 로드됨.

클래스 변수 사용 예시

class Counter {
    // 클래스 변수: 모든 객체가 공유
    static int count = 0;

    public Counter() {
        count++;  // 객체가 생성될 때마다 증가
    }
}
public class Main {
    public static void main(String[] args) {
        new Counter();  // count = 1
        new Counter();  // count = 2
        System.out.println(Counter.count);  // 출력: 2
    }
}

 

 

3. 멤버 변수 (Member Variable)

  • 정의: 클래스의 구성 요소(필드)로 선언된 변수
  • 적용 대상: 인스턴스 변수클래스 변수 모두 멤버 변수
  • 특징:
    • 클래스 안에 선언된 모든 변수는 멤버 변수
    • 인스턴스 변수와 클래스 변수로 구분
    • 클래스 외부에서는 객체를 통해서 또는 클래스명으로 접근

 

4. 지역 변수 (Local Variable)

  • 정의: 메서드나 생성자, 블록 내에서 선언된 변수로, 해당 영역이 끝나면 사라짐
  • 적용 대상: 메서드 내, 생성자 내, 또는 제어문(블록) 안에서 사용되는 변수
  • 생명 주기: 변수가 선언된 블록이 종료되면 메모리에서 해제
  • 특징:
    • 선언된 블록을 벗어나면 접근 불가
    • 초기화 없이 사용하면 컴파일 오류가 발생

지역 변수 사용 예시

public class Main {
    public static void main(String[] args) {
        int x = 10;  // 지역 변수: 메서드 내에서만 유효

        if (x > 5) {
            int y = 20;  // 제어문 블록 내의 지역 변수
            System.out.println("y: " + y);
        }
        // System.out.println(y);  // 오류: y는 블록 밖에서 사용 불가
    }
}

 

 

5. 매개변수 (Parameter)

  • 정의: 메서드나 생성자에 입력값을 전달받기 위한 변수
  • 적용 대상: 메서드 호출 시 전달된 값을 받아 처리
  • 생명 주기: 해당 메서드가 실행될 동안만 유지
  • 특징:
    • 메서드나 생성자에 전달된 입력값을 임시로 저장
    • 호출 시마다 새로운 값을 전달받음

매개변수 사용 예시

public class Calculator {
    public int add(int a, int b) {  // a, b는 매개변수
        return a + b;
    }
}
public class Main {
    public static void main(String[] args) {
        Calculator calc = new Calculator();
        int result = calc.add(3, 4);  // 3과 4를 매개변수로 전달
        System.out.println(result);  // 출력: 7
    }
}

 

 

6. 블록 변수 (Block Variable)

  • 정의: 제어문(if, for, while 등) 또는 중괄호 블록 내에서만 사용되는 변수
  • 적용 대상: 특정 블록 내부에서만 유효
  • 특징:
    • 해당 블록이 종료되면 변수는 메모리에서 해제
    • 주로 반복문, 조건문 안에서 사용됨

블록 변수 사용 예시

public class Main {
    public static void main(String[] args) {
        for (int i = 0; i < 3; i++) {  // i는 블록 변수
            System.out.println("i: " + i);
        }
        // System.out.println(i);  // 오류: i는 블록 밖에서 사용 불가
    }
}