배그 하시는 분들 검색 키워드에 이끌려 오셨다면 죄송합니다ㅋㅋ

이거 아님

Java에서 스코프(Scope) 란 무엇인가?

스코프(Scope)란 변수가 접근 가능한 범위를 의미한다.

자세한건 아래 코드의 예제를 통해 설명하겠다.

package scope;

public class Scope1 {
    public static void main(String[] args) {
        int m  = 10; //m 생존시작
        if (true){
            int x = 20; //x 생존시작
            System.out.println(x);
            System.out.println(m);
        } // x 생존 종료

        System.out.println(x); // 이건 출력 안댐ㅋㅋ
        System.out.println(m);
    } // m 생존 종료
}

//즉 m의 생존 범위가 넓기 때문에 스코프가 넓고, x는 if문에서만 생존이 가능하기 때문에 스코프가 좁다

위 예제처럼 m 은 main 블럭 안에서 선언한 지역변수이고, x 는 if문 안에 선언한 지역변수이다

스코프의 관점에서 m은 코드의 시작부터 마지막까지 사용이 가능한 변수이고, x 는  if 문 안에서만 사용가능 하고 메모리를 반납하는 변수이다(생존 주기는 코드 참조). 즉 위 코드 출력에서 x는 출력 되지 않는다.

 

스코프는 왜 필요할까?

package scope;
 public class Scope3 {
     public static void main(String[] args) {
         int m = 10;
         int temp = 0;
         if (m > 0) {
							temp = m * 2;
             System.out.println("temp = " + temp);
         }
         System.out.println("m = " + m);
     }
}

위 코드를 예시로, 스코프가 존재하는 이유는 두가지 정도 존재한다.

  1. 메모리 낭비 방지 : 위에서처럼 우리는 값을 임시로 저장하기 위한 변수 temp 를 선언하였는데 이는 코드의 시작부터 끝까지 살아있는 변수로써 main()블럭이 종료될 때까지 메모리에 유지된다. 우리처럼 개인적으로 공부할 때는 상관이 없지만 기업에서 돌리는 프로그램은 결국 메모리 싸움 → 즉 메모리 낭비를 최소화 하여 효율적으로 메모리를 관리해야한다.

  2. 코드 복잡도 증가 방지: temp는 if 문안에서만 사용할 것이니까 그 안에서 선언하고 사용하면 된다. if 문안에서 temp 를 선언하고 사용하고 블럭을 종료하면 그 이후에는 그것에 대해 전혀 신경 쓰지 않아도 되니까 코드의 복잡도가 높아진다.아무튼 스코프는 불필요한 메모리 누수와 코드의 필요한데서 필요한 변수를 사용할 수 있도록 필요한 개념이다.

    위 코드처럼 temp가 if문 이후에도 여전히 접근이 가능하다면, 이 코드를 유지 보수할 때, m과 더불어 신경써야하는 변수가 하나 늘어나기때문에 불필요하게 스코프를 넓게 설정할 필요가 없다.

 

추가적으로 우리가 반복문에 사용하는 변수 (주로 i를 선언)들도 위 내용들을 접목하여 생각해보면 스코프적 관점에서 어떤식으로 동작하는지 쉽게 유추할 수 있을 것이다.

그럼 오늘도 20000!