SeouliteLab

[Java/자바] 변수의 유효 범위 (Variable Scope) 본문

프로그래밍

[Java/자바] 변수의 유효 범위 (Variable Scope)

Seoulite Lab 2024. 3. 19. 09:43

변수의 유효 범위란 해당 변수가 접근 가능한 범위를 의미합니다. Java에서는 변수가 선언된 위치에 따라 그 범위가 결정됩니다. 이를 효율적으로 이해하고 활용하기 위해 변수의 유효 범위에 대해 알아보겠습니다.

1. 변수의 유효 범위 예제

예제 1: 블록 내부의 변수

블록 내부에서 선언된 변수는 해당 블록 내부에서만 유효합니다.

// VariableScopeExample1.java

public class VariableScopeExample1 {
    public static void main(String[] args) {
        int x = 10; // 변수 x 선언
        
        if (x == 10) {
            int y = 20; // 블록 내부에서 변수 y 선언
            System.out.println("x: " + x + ", y: " + y); // 출력 결과: x: 10, y: 20
        }
        
        // System.out.println(y); // 오류 발생: 변수 y의 유효 범위를 벗어남
    }
}

예제 2: 메서드 내의 변수

메서드 내에서 선언된 변수는 해당 메서드 내에서만 유효합니다.

// VariableScopeExample2.java

public class VariableScopeExample2 {
    public static void main(String[] args) {
        int x = 10; // 변수 x 선언
        calculate(x); // 메서드 호출
    }
    
    public static void calculate(int number) {
        int result = number * 2; // 메서드 내부에서 변수 result 선언
        System.out.println("Result: " + result); // 출력 결과: Result: 20
    }
}

예제 3: 클래스 변수와 인스턴스 변수

클래스 변수(static 변수)와 인스턴스 변수는 해당 클래스의 모든 인스턴스에서 접근 가능합니다.

// VariableScopeExample3.java

public class VariableScopeExample3 {
    static int globalVar = 100; // 클래스 변수 선언
    
    public static void main(String[] args) {
        System.out.println("Global variable: " + globalVar); // 출력 결과: Global variable: 100
        
        VariableScopeExample3 instance = new VariableScopeExample3();
        instance.accessInstanceVariable(); // 인스턴스 메서드 호출
    }
    
    public void accessInstanceVariable() {
        int localVar = 200; // 인스턴스 변수 선언
        System.out.println("Instance variable: " + localVar); // 출력 결과: Instance variable: 200
    }
}

예제 4: 전역 변수

전역 변수는 프로그램 전체에서 접근 가능합니다.

// VariableScopeExample4.java

public class VariableScopeExample4 {
    static int globalVar = 100; // 전역 변수 선언
    
    public static void main(String[] args) {
        System.out.println("Global variable: " + globalVar); // 출력 결과: Global variable: 100
        modifyGlobalVariable();
    }
    
    public static void modifyGlobalVariable() {
        globalVar = 200; // 전역 변수 값 변경
        System.out.println("Modified global variable: " + globalVar); // 출력 결과: Modified global variable: 200
    }
}

예제 5: 렉시컬 스코프

렉시컬 스코프는 변수의 유효 범위가 코드의 작성 위치에 의해 결정되는 것을 의미합니다.

// VariableScopeExample5.java

public class VariableScopeExample5 {
    static int x = 100; // 전역 변수 선언
    
    public static void main(String[] args) {
        int x = 10; // 지역 변수 선언
        System.out.println("Local variable: " + x); // 출력 결과: Local variable: 10
        System.out.println("Global variable: " + VariableScopeExample5.x); // 출력 결과: Global variable: 100
    }
}

예제 6: 익명 블록

익명 블록 내에서 선언된 변수는 익명 블록 내에서만 유효합니다.

// VariableScopeExample6.java

public class VariableScopeExample6 {
    public static void main(String[] args) {
        int x = 10; // 지역 변수
        
        {
            int y = 20; // 익명 블록 내의 변수
            System.out.println("x: " + x + ", y: " + y); // 출력 결과: x: 10, y: 20
        }
        
        // System.out.println(y); // 오류 발생: 변수 y의 유효 범위를 벗어남
    }
}