관심있는 주제/Java

전역변수 / 지역변수

Lynn123 2018. 11. 20. 21:43
반응형


- 전역 변수(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