Java

유효범위

Sun-Koo 2023. 3. 7. 16:06

유효범위 = 스코프(Scope)

전역변수, 지역변수를 나눠서 좀 더 관리하기 편리하도록 한 것

ex )

public class Scope{

    static void a() {
        int i = 0; // 지역 변수
    }

    public static void main(String[] args) {
         for(int i = 0 ; i  < 5; i++) {
              a(); // i 를 0으로 지정 해줬지만 유효범위를 초과하여 영향X
              System.out.println(i); // 0,1,2,3,4
        }
    }
}

 

public class Scope{
	
    static int i; // 전역 변수
    
    static void a() {
         i = 0;  // 만약 int i = 0; 이라고 하면 0,1,2,3,4 출력 
         // 이유: a안에서만 유효한 변수라서 a가 끝나면 i의 값이 사라짐 그러므로 i = 0
    }

    public static void main(String[] args) {

         for(i = 0 ; i  < 5; i++) { // 만약 int i = 0; 이라고 하면 0,1,2,3,4 출력
         // 이유: for문 안에서만 유효한 변수라서 윗부분과 동일
              a(); // i 를 0으로 지정
              System.out.println(i); // 0만 무한 반복
        }
    }
}

 

ex 2)

public class Scope{
	
    Static int i = 5;
    static void a() {
    	int i = 10;
        b()
    }
    static void b() {
    	// int i = 30; 주석을 풀면 답은 30이 된다.
        System.out.println(i); // 전역변수 i 실행
    }
    public static void main(String[] args) {
    	a(); // 답은 5   
    }
}
//정적인 유효범위
// b를 호출한 것이기 때문 b를 기준으로 한다.
// 동적인 유효범위
// 만약 Static int i = 5;이 없고 a의 i를 출력한다면 동적인 유효범위

this

class C3 {
    int v = 10;
 
    void m() {
        int v = 20;
        // 한번은 20 한번은 10을 출력하고 싶다면?
        System.out.println(v);  // 20
        System.out.println(this.v); // 10  인스턴스 자신을 의미하는 v 는 10이다.
    }
}
 
public class ScopeDemo9 {
 
    public static void main(String[] args) {
        C3 c1 = new C3();
        c1.m();
    }
 
}