1. 자바에서 전역변수 선언
class내에서 맨 위에 public static이라고 선언한 변수는 global 변수가 된다.
그래서 해당 class내의 모든 함수,class내에서 해당 global 변수를 참조할 수 있게 된다
public class Main {
//arr은 모든 함수에서 참조할 수 있게 된다
public static int[] arr = new int[]{1, 2, 3, 4};
public static int sumAll() {
int sum = 0;
for(int i = 0; i < 4; i++)
sum += arr[i];
return sum;
}
public static void main(String[] args) {
int totalSum = sumAll();
System.out.println(totalSum);
}
}
>> 10
2. 변수의 scope
자바도 마찬가지로 함수 안에서 정의한 변수는, 그 함수를 벗어나면 더 이상 쓰일 수 없다.
public class Main {
public static int[] arr = new int[]{1, 2, 3, 4};
public static int sumAll() {
int sum = 0;
for(int i = 0; i < 4; i++)
sum += arr[i];
return sum;
}
public static void main(String[] args) {
int totalSum = sumAll();
System.out.println(sum);
}
}
>>
Main.java:14: error: cannot find symbol
System.out.println(sum);
^
symbol: variable sum
location: class Main
1 error
특히 자바는 for문도 하나의 local scope로 생각하여 해당 for문 내에서 정의한 변수는 for문을 벗어나면 사용할 수 없다
public class Main {
public static void main(String[] args) {
for(int i = 0; i < 4; i++) {
int sum = 0;
for(int j = 0; j < 4; j++) {
int x = j;
sum += x;
}
System.out.println(x);
}
}
}
>>
Main.java:9: error: cannot find symbol
System.out.println(x);
^
symbol: variable x
location: class Main
1 error
3. 연습문제
다음과 같이 작성된 코드의 출력결과를 예상해본다면?
public class Main {
public static int a = 10, b = 20;
public static void printAandB() {
System.out.println(a + " " + b);
}
public static void modify(int a, int b) {
System.out.println(a + " " + b);
printAandB();
int temp = a;
a = b;
b = temp;
}
public static void main(String[] args) {
modify(50, 60);
printAandB();
}
}
main이 먼저 수행되어.. modifiy(50,60)이 수행
modifiy(50,60)내에서 System.out.println(a + " " + b);가 수행되어 50 60을 출력
그리고 printAandB()가 수행되는데...
public static void printAandB() {
System.out.println(a + " " + b);
}
여기 a,b는 어떤 a,b인가..?
public static void modify(int a, int b) {
modify함수의 int a, int b인가?
public static int a = 10, b = 20;
global 영역의 int a, int b인가?
printAandB()가 a,b를 인자로 받지 않으므로 printAandB()함수는 global 영역의 a,b를 참조하게 된다
그래서 10 20이 출력된다
그리고 50,60을 swap하지만 함수 밖으로 나가면 끝이지
그리고 main의 printAandB()를 수행하는데.. 역시 아무런 인자를 받지 않고 a,b를 참조하고 있으므로,..
global 변수의 a,b를 참조하여 10 20이 출력된다
50 6010 2010 20
보통 참조가 가능하며, 가장 가까이에 있는 변수를 먼저 찾게 된다
'알고리즘 > Java 기초' 카테고리의 다른 글
자바 초보부터 B형까지9 -class 생성하기 필수- (0) | 2023.03.01 |
---|---|
자바 초보부터 B형까지8 -2차원 배열 필수- (0) | 2023.03.01 |
자바 초보부터 B형까지6 -함수 작성법 필수- (0) | 2023.03.01 |
자바 초보에서 B형까지5 -문자열 필수지식- (0) | 2023.02.26 |
자바 자료구조2 -이중 연결리스트(LinkedList) (0) | 2023.02.24 |