Skip to content

Latest commit

 

History

History
42 lines (33 loc) · 2.54 KB

File metadata and controls

42 lines (33 loc) · 2.54 KB

스코프

지역 변수와 스코프

지역변수는 이름 그대로 특정 지역에서만 사용할 수 있는 변수라는 뜻이다. 그 특정 지역을 벗어나면 사용할 수 없다. 여기서 말하는 지역이 바로 변수가 선언된 코드 블록({})이다. 지역 변수는 자신이 선언된 블록 블록({})안에서만 생존하고, 자신이 선언된 코드 블록을 벗어나면 제거된다. 따라서 이후에는 접근할 수 없다.

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

  • int m은 main{}의 코드 블록 안에서 선언되었다. 따라서 변수를 선언한 시점부터 main{}의 코드 블록이 종료될 때 까지 생존한다.
  • if{}블록 내부에서도 외부 블록에서 선언된 M에 접근할 수 있다. 쉽게 이야기해서 생존 범위만 맞으면 다 접근할 수 있다.

int x

  • int x는 if{} 블록안에서 선언되었다. 따라서 변수를 선언한 시점부터 if{}의 코드 블록이 종료될 떄까지 생존한다.
  • if{} 내부에서는 자신의 범위에서 선언한 x에당연히 접근 할 수 있다.
  • if{} 코드 블록이 끝나버리면 x는 제거된다. 따라서 더는 x에 접근할 수 없다. 따라서 이후에 접근하면 cannot find symbol이라는 변수 이름을 찾을 수 없다는 컴파일 오류가 발생한다.

정리하면 지역 변수는 본인의 코드 블록 안에서만 생존한다. 그리고 자신의 코드 블록 안에서는 얼마든지 접근할 수 있다. 하지만 자신의 코드 브록을 벗어나면 제거되기 때문에 접근 할 수 없다.

이렇게 변수의 접근 가능한 범위를 스코프(Scope)라 한다. 참고로 Scope를 번역하면 범위라는 뜻이다.

스코프 존재 이유

  • 비효율적인 메모리 사용
  • 코드 복잡성 증가

정리

  • 변수는 꼭 필요한 범위로 한정해서 사용하는 것이 좋다. 변수의 스코프는 꼭 필요한 곳으로 한정해서 사용하자. 메모리를 효율적으로 사용하고 더 유지보수 하기 좋은 코드를 만들 수 있다.
  • 좋은 프로그램은 무한한 자유가 있는 프로그램이 아니라 적절한 제약이 있는 프로그램이다.