지역변수는 이름 그대로 특정 지역에서만 사용할 수 있는 변수라는 뜻이다. 그 특정 지역을 벗어나면 사용할 수 없다. 여기서 말하는 지역이 바로 변수가 선언된 코드 블록({})이다. 지역 변수는 자신이 선언된 블록 블록({})안에서만 생존하고, 자신이 선언된 코드 블록을 벗어나면 제거된다. 따라서 이후에는 접근할 수 없다.
public class Scope1 {
public static void main(String[] args) {
int m = 10; // m 생존 시작
if(true) {
int x = 20; // x 생존 시작
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은 main{}의 코드 블록 안에서 선언되었다. 따라서 변수를 선언한 시점부터 main{}의 코드 블록이 종료될 때 까지 생존한다.
- if{}블록 내부에서도 외부 블록에서 선언된 M에 접근할 수 있다. 쉽게 이야기해서 생존 범위만 맞으면 다 접근할 수 있다.
- int x는 if{} 블록안에서 선언되었다. 따라서 변수를 선언한 시점부터 if{}의 코드 블록이 종료될 떄까지 생존한다.
- if{} 내부에서는 자신의 범위에서 선언한 x에당연히 접근 할 수 있다.
- if{} 코드 블록이 끝나버리면 x는 제거된다. 따라서 더는 x에 접근할 수 없다. 따라서 이후에 접근하면 cannot find symbol이라는 변수 이름을 찾을 수 없다는 컴파일 오류가 발생한다.
정리하면 지역 변수는 본인의 코드 블록 안에서만 생존한다. 그리고 자신의 코드 블록 안에서는 얼마든지 접근할 수 있다. 하지만 자신의 코드 브록을 벗어나면 제거되기 때문에 접근 할 수 없다.
이렇게 변수의 접근 가능한 범위를 스코프(Scope)라 한다. 참고로 Scope를 번역하면 범위라는 뜻이다.
- 비효율적인 메모리 사용
- 코드 복잡성 증가
- 변수는 꼭 필요한 범위로 한정해서 사용하는 것이 좋다. 변수의 스코프는 꼭 필요한 곳으로 한정해서 사용하자. 메모리를 효율적으로 사용하고 더 유지보수 하기 좋은 코드를 만들 수 있다.
- 좋은 프로그램은 무한한 자유가 있는 프로그램이 아니라 적절한 제약이 있는 프로그램이다.