- 전역 변수(global variable) : method 밖에서 선언하는 변수
static : 전역으로 사용이 가능
main method 밖에서 static int i 를 선언했다. method 밖에서 선언했지만 변수가 static 이기 때문에 메인 메소드 안에서 호출했을 때
값을 출력할 수 있게 된다.
만약 static 이라고 하지 않은 상태에서 호출한다면 아래와 같이 에러가 난다. (static 메소드 안에서 i 를 찾을 수 없기 때문에)
이렇게 static 을 선언하면 다른 곳에서 변수를 사용할 수 있게 된다.
method 에서도 마찬가지로 사용이 된다.
method a() 를 static 으로 선언했다. 메인에서 실행시키는데 무리가 없다. 그렇다면 static을 빼면 어떻게 될까 ?
아래에서 볼 수 있듯 에러가 나며 에러 메세지는 method를 static으로 바꾸라고 뜬다.
하나 더 예시를 보자!
아래 코드를 보면 메인에서 test1()을 호출을 한다.
test1() 에 String global 이 들어있고 test2() 를 호출한다.
test2() 에는 global을 출력하는 코드가 들어있다.
여기서 드는 의문은 그렇다면 test1()에서 출력하는 global이 누구인가? 이다.
test2()에서 받아오는 변수는 전역변수이기 때문에 정답은 전역변수 global이다.
==== > "Hello" 출력 즉 test2(에 영향을 주지 못 한다.
- 지역 변수(local variable) : method 안에서 선언하는 변수
int a 와 같이 메소드 안에서 선언하는 변수를 지역 변수라고 하고 지역 변수는 전역 변수보다 우선 순위를 높게 가진다.
위의 예시를 볼 때 class Sum 안에서는 A 라는 전역 변수가 존재한다. sum() 메소드에는 그 A와 지역변수 B를 더하는 값을 출력하는 코드가 들어있다.
메인에서 클래스를 불러와 함수를 출력해 보면 20 + 10 = 30 이라는 값을 출력한다.
(static이 아닌 A가 함수 sum 안에서 에러가 발생하지 않는 이유는 아마도 sum 이 static 함수가 아니어서 그런 것 같다)
그런데 만약 sum 안에 지역 변수 A 를 (같은 이름) 선언한 뒤 A+B를 출력해 본다면, 지역 변수를 우선으로 두어 110이라는 값을 뽑아낸다.
이렇게 우리는 우선 순위가 전역 변수 < 지역 변수 라는 것을 알 수 있다.
'관심있는 주제 > Java' 카테고리의 다른 글
Extends, super (0) | 2018.11.20 |
---|---|
생성자(constructor) (0) | 2018.11.20 |
클래스 (0) | 2018.11.19 |
Scanner (0) | 2018.11.15 |
메소드 (0) | 2018.11.13 |