Java 스코프 (scope)

스코프를 알기 전에 지역변수부터 알아야한다.

지역변수 종류에는 지역 변수멤버 변수(클래스 변수, 인스턴스 변수)가 있다.
어디에 선언하느냐에 따라 정해진다.

지역변수

지역 변수는 특정 위치에서만 활용할 수 있다.
코드 블록 {} 안에 선언하면 그 코드 블록에만 사용할 수 있고, 블록을 벗어나면 코드 블록의 변수를 사용할 수 없다. 또한 코드 블록의 사용이 끝나면 접근할 수 없다.

스코프

스코프를 설명 전 아래 Java 코드를 살펴보도록 한다.

Java 코드

public class Scope1 {
    public static void main(String[] args) {
        {
            int a = 4; // 지역 변수
            System.out.println("a 는 " + a + " 이다");
        }

        int a = 2; // 코드 블록에서 사용이 끝난 변수는 선언이 가능하다.
        System.out.println("a 는 " + a + " 이다");
    }
}

이 Java 코드에서 코드 블록 {}에 int a = 4; 는 지역 변수로 선언하였다.
System.out.println 는 a를 접근하여 값을 출력하고 {} 종료로 사용이 끝난다.
사용이 끝난 변수는 int a로 변수를 다시 할당할 수 있다.

이제 int a = 2; 는 main{} 코드 블록을 선언을 하였고, main 코드 블록은 int a = 4; 선언했을 때보다 사용 범위가 넓다.

Scope는 접근 범위가 어디에 선언하느냐 따라 달라진 모습을 확인할 수 있었다.

for문에서 선언한 i 코드 블록 외부에서 사용할 수 없는 것과 같은 맥락이다.

스코프의 장점

  • 비효율적인 메모리 사용 감소
  • 코드 복잡성 감소 (유지보수 상승)

for문 초기 식 변수를 할당하게 되면 코드블록에만 사용이 가능하다. 그리고 for 문이 끝나면 초기식 변수를 메모리로 돌려주게 되어 메모리 사용에 감소한다.

while문의 초기 식을 가져온 카운터 변수라면 코드블록과 함께 바깥에서 관리를 해주어야하고, 관리하기도 복잡하다