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();
}
}