IMG-LOGO
공지사항 :

자바 유효 범위(Scope)

lmkfox - 2025-07-12 06:30:24 13 Views 0 Comment

1. 유효 범위(Scope)의 종류

자바에서는 주로 다음과 같은 범위로 구분됩니다:

  1. 클래스 범위 (Class Scope)

  2. 인스턴스/멤버 범위 (Instance/Field Scope)

  3. 메소드 범위 (Method Scope)

  4. 블록 범위 (Block Scope)

  5. 매개변수 범위 (Parameter Scope)


2. 클래스 범위 / 필드 범위 (Class Scope)

클래스 내에서 선언된 **필드(멤버 변수)**는 클래스 전체에서 접근할 수 있습니다. 접근 제한자(private, public 등)에 따라 외부 접근 가능 여부는 달라지지만, 클래스 내부에서는 어디서든 사용 가능합니다.

public class Person {
    String name; // 필드, 클래스 범위

    void sayHello() {
        System.out.println("안녕하세요, " + name);
    }
}


3. 메소드 범위 (Method Scope)

메소드 내에서 선언된 지역 변수는 해당 메소드 내에서만 유효합니다. 메소드가 종료되면 메모리에서 사라집니다.

public class Example {
    void doSomething() {
        int number = 10; // 메소드 범위
        System.out.println(number);
    }

    void anotherMethod() {
        // System.out.println(number); // 오류: number는 이 메소드에 없음
    }
}


4. 블록 범위 (Block Scope)

제어문(if, for, while 등)이나 { } 중괄호로 묶인 블록 내에서 선언된 변수는 해당 블록 내에서만 유효합니다.

void testBlock() {
    if (true) {
        int x = 5; // x는 if 블록 내부에서만 유효
        System.out.println(x);
    }
    // System.out.println(x); // 오류: x는 이 블록 밖에서 접근 불가
}


5. 매개변수 범위 (Parameter Scope)

메소드의 매개변수는 해당 메소드 블록 내에서만 사용 가능합니다.

void greet(String name) {
    System.out.println("Hello, " + name); // name은 여기서만 유효
}


6. 변수 이름 중복과 유효 범위

같은 이름의 변수를 중첩된 범위 안에서 다시 선언할 수는 없습니다. 하지만 내부 범위에서 같은 이름의 변수가 있으면 외부 범위의 변수는 가려짐(Shadowing)

int x = 100;

void printX() {
    int x = 50; // 외부 x를 가림
    System.out.println(x); // 50 출력
}


7. 유효 범위에서의 주의 사항

  • 변수는 선언된 범위 밖에서 사용할 수 없다

  • 같은 범위 내에서 동일한 이름의 변수를 중복 선언할 수 없다

  • 메모리 사용 최적화를 위해 가능한 한 좁은 범위에서 선언하는 것이 좋다

  • 중괄호 {} 기준으로 범위가 결정되므로 코드 작성 시 중괄호 구조에 유의해야 한다


8. 정리 표

범위 종류

선언 위치

유효 범위

예시 변수 종류

클래스 범위

클래스 내부

클래스 전체

static 필드, static 메소드

인스턴스 범위

클래스 내부, static 아님

클래스 전체

멤버 변수

메소드 범위

메소드 내부

메소드 전체

지역 변수

블록 범위

제어문/블록 내부

해당 블록 내부

if/for/while 변수 등

매개변수 범위

메소드의 괄호 안

메소드 내부

메소드 매개변수


댓글