[Java] 스코프 (Scope) / 쉐도잉 (Shadowing)

 

 

 

스코프 (Scope)

 

스코프 (Scope)

스코프는 변수나 메서드가 유효하고 접근 가능한 범위를 의미합니다. 

자바에서 스코프는 크게 두 가지로 나눌 수 있습니다: 블록 스코프와 클래스 스코프.

 

 

블록 스코프 (Block Scope)

변수의 스코프는 그 변수가 선언된 블록 내에서만 유효합니다. 

블록은 중괄호 {}로 정의된 코드 영역을 의미합니다.

 

public class ScopeExample {
    public void method() {
        int x = 10; // x는 method() 메서드 내에서 유효

        if (true) {
            int y = 20; // y는 if 블록 내에서만 유효
            System.out.println(x); // x와 y 모두 사용 가능
        }

        // System.out.println(y); // y는 유효하지 않음, 컴파일 오류
    }
}

이 예제에서 x는 method() 메서드 전체에서 유효하고, y는 if 블록 내에서만 유효합니다.

 

 

 

 

 

클래스 스코프 (Class Scope)

클래스 변수(필드)와 메서드는 클래스 전체에서 유효합니다. 

즉, 클래스의 모든 메서드에서 접근할 수 있습니다.

 

public class ClassScopeExample {
    int classVariable = 30; // 클래스 스코프

    public void method() {
        System.out.println(classVariable); // 클래스 변수 접근
    }
}

이 예제에서 classVariable은 ClassScopeExample 클래스의 모든 메서드에서 접근할 수 있습니다.

 

 

 

 


 

 

쉐도잉 (Shadowing)

 

 

쉐도잉 (Shadowing)

쉐도잉은 같은 이름의 변수가 서로 다른 스코프에서 선언될 때 발생하는 현상입니다. 

쉐도잉이 발생하면, 내부 스코프의 변수가 외부 스코프의 변수를 "가리게" 됩니다. 

즉, 내부 스코프에서는 외부 스코프의 변수가 아니라 내부 스코프의 변수가 참조됩니다.

 

public class ShadowingExample {
    int x = 10; // 클래스 스코프 변수

    public void method() {
        int x = 20; // 메서드 스코프 변수, 클래스 변수 x를 쉐도잉
        System.out.println(x); // 메서드 스코프 변수 x 출력 (20)
    }

    public static void main(String[] args) {
        ShadowingExample example = new ShadowingExample();
        example.method();
    }
}

이 예제에서 method() 메서드 내의 x 변수는 클래스 스코프의 x 변수를 쉐도잉합니다. 

메서드 내에서는 메서드 스코프의 x 변수(값이 20)가 참조되며, 클래스 스코프의 x 변수(값이 10)는 가려지게 됩니다.