20.03 ~ 20.08 국비교육/JAVA

변수 유효범위

찹키리 2020. 3. 24. 01:03

<변수 유효범위>

 

1)변수의 영역

 

{a
     {a b
          {a b
          }
     }//b(o)
}//a, b(x)

 

: 변수는 블록 밖으로 나올 수 없다. 수평한 블록 간(안기지 않은)에 변수를 가져오려면 함수화(stack복사)가 필요하다.

 

 

<예제>

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class Variable {
 
    String movie = "트로이"// 멤버변수, 전역변수
 
    public void show() {
        System.out.println("show 메소드 영역: " + movie);
    }
 
    public void title() {
        String movie = "바람의 전설";
        System.out.println("title 메소드 영역: " + movie); //자기거 우선
        System.out.println("멤버변수: " + this.movie); //this: 전역변수 
    }
 
    public static void main(String[] args) {
        Variable v = new Variable();
        v.show();
        v.title();
    }
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter

 

 


2)외부변수, 내부변수, 변수의 범위


-클래스 변수: 다른 객체(클래스)에서도 인스턴스 생성 없이 사용 가능
-전역 변수: 클래스 안에서 자유롭게 사용 가능(외부 클래스에서는 인스턴스 생성 필수)
-지역: 메소드 안에서 자유롭게 사용 가능

 

 

<예제>

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Block {
 
    String block = "바람의 전설";
 
    public static void main(String[] args) {
 
        String block = "트로이";
        System.out.println("Movie: " + block);
 
        int i = 0;
    {
        String block2 = "달콤한 인생";
        System.out.println("Mpvie: " + block2);
 
        for(int j = 0; j < 5; j++) {
        } // for문 안에서 선언된 변수 j는 이 반복문 블록을 벗어날 수 없다.
 
        for(i = 0; i < 5; i++) {
        } // for문 안의 변수 i는 "외부변수"이므로 반복문 안과 밖 모두 사용 가능하다.
    }//block, block2 모두 호출 가능. 멤버변수 영향 無
    } //main
//class
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter

*static 키워드가 붙은 메소드 및 변수는 다른 클래스에서도 객체를 생성할 필요가 없다.

그러나 static 메소드(main 함수 포함) 안에서는 외부 영역의 멤버변수를 this로 불러올 수 없다. 반드시 new를 사용해 인스턴스를 생성해주어야 한다.