Language/Java
Java 지역 변수와 스코프
괘창
2024. 7. 1. 09:38
■ 지역 변수와 스코프
스코프1 - 지역변수와 스코프
변수는 선언한 위치에 따라 지역 변수, 멤버 변수(클래스 변수, 인스턴스 변수)와 같이 분류도니다.
지금까지 배운 변수들은 모두 지역 변수(Local Variable) 영어로 로컬 변수라 한다.
※ 지역 변수란?
이름 그대로 특정 지역에서만 사용할 수 있는 변수라는 뜻
특정 지역을 벗어나면 사용할 수 없다.
여기서 말하는 지역은 변수가 선언된 코드 블록 ({ }) 이다.
지역 변수는 자신이 선언된 코드 블록({ }) 안에서만 생존하고 자신이 선언된 코드 블록을 벗어나면 제거된다.
에제 코드)
package scope;
public class Scope1 {
public static void main(String[] args) {
int m = 10; // 생존 시작
if (true) {
int x = 20;
System.out.println("if m = " + m);
System.out.println("if x = " + x);
} // x 생존 종료
System.out.println("main x = " + x);
System.out.println( "main m = " + m);
} // m 생존 종료
}
실행 결과)

# int m
- int m 은 main { } 의 코드 블록 안엔서 선언되었다.
따라서 변수를 선언한 시점부터 main { }의 코드 블록이 종료될 때 까지 생존한다.
- if { } 블록 내부에서도 외부 블록에서 선언된 m 에 접근할 수 있다.
쉽게 설명하면 생존 범위만 맞으면 다 접근이 가능하다.
# int x
- int x 는 if {} 블록 안에서 선언되었다. 따라서 변수를 선언한 시점부터
if { } 으 코드 블록이 종료 될때까지 생존한다.
- if { } 내부에서는 자신의 범위에서 선언한 x 에 당연히 접근 가능하다.
- if { } 코드 블록이 끝나버리면 x 는 제거된다.
따라서 이후에 접근하면 cannot find symbol 이라는 변수명을 찾을 수 없다는 컴파일 오류 발생!
이렇게 변수의 접근 가능한 범위를 스코프(Scope) 라 한다.
int m 은 main { } 전체에서 접근할 수 있기 때문에 스코프가 넓고,
int x 는 if { } 코드 블록안에서만 접근이 가능하기 때문에 스코프가 좁다.
for {} 를 사용하는 예제)
package scope;
public class Scope2 {
public static void main(String[] args) {
int m = 10;
for (int i = 0; i < 2; i++) { //블록 내부, for문 내
System.out.println("for m = " + m); //블록 내부에서 외부 접근 가능
System.out.println("for i = " + i);
} // i 생존 종료
System.out.println("main i = " + i); // 오류, i에 접근 불가
System.out.println("main m = " + m);
}
}
실행 결과)

# for 문으로 바뀐것을 제외하면 앞의 예제와 비슷한 예제이다.
# for 문의 경우 for(int i = 0; ...)과 같이 for 문안에서 초기식에 직접 변수 선언이 가능하다.
초기식에 선언한 변수는 for 문 블록 안에서만 사용이 가능하다.