4.9 변수 사용 범위 (Scope)

변수는 언제 태어나서 언제 사라질까요? 변수의 생명 주기(Life Cycle)유효 범위(Scope)에 대해 알아봅니다.


1. 블록 { }이 곧 변수의 우주 🌌

1) 개념

변수는 자신이 선언된 중괄호 { ... } 블록 안에서만 존재하고 사용할 수 있습니다. 블록이 끝나는 순간(}) 변수는 메모리에서 소멸합니다. (마치 연기처럼 사라집니다!)

2) 비유: “썬팅된 유리방”

  • 안에서 밖은 보인다: 유리방 안(if문 내부)에 있는 사람은 바깥(main 메소드)에 있는 사람을 볼 수 있습니다.
  • 밖에서 안은 안 보인다: 바깥(main 메소드)에 있는 사람은 썬팅된 유리방 안(if문 내부)에 있는 사람을 볼 수 없습니다.

그림

3) 범위 시각화

3) 범위 시각화

graph TD
    subgraph Main [상위 블록: main 메소드]
        v1((v1 변수))
        
        subgraph Sub [하위 블록: if 문]
            v2((v2 변수))
            Access1[v1 보임 👀]
        end
        
        Access2[v2 안 보임 🙈]
    end
    
    v1 -.-> Access1
    v2 -.-> Access2
    
    style Main fill:#eef,stroke:#333,stroke-width:2px,stroke-dasharray: 5 5
    style Sub fill:#ddf,stroke:#333,stroke-width:2px
    style v1 fill:#fff,stroke:#333
    style v2 fill:#fff,stroke:#333
    style Access1 fill:#bfb,stroke:#333
    style Access2 fill:#f99,stroke:#333

2. 코드 예시 🔍

public static void main(String[] args) {
    int v1 = 10;
    
    if (v1 > 5) {
        int v2 = 20; // v2 탄생
        
        // 안쪽에서는 바깥쪽 변수(v1) 사용 가능
        System.out.println(v1 + v2); 
    } // v2 사망 (메모리에서 사라짐)
    
    // 바깥쪽에서는 안쪽 변수(v2) 사용 불가
    // System.out.println(v2); // (X) 에러! v2는 이미 죽었어요.
}

핵심 규칙: “내려갈 수는 있지만, 올라올 수는 없다.” (상위 블록의 변수는 하위 블록에서 쓸 수 있지만, 하위 블록의 변수는 상위 블록에서 쓸 수 없다.)

서브목차