JAVA

[JAVA] 지역 변수와 전역 변수

때래뚫 2023. 7. 7. 16:04

전역변수와 지역변수란?

- 지역변수란 선언된 블록에서 사용되고 블록이 끝나면 같이 소멸되는 변수를 뜻합니다. 예를 들면

public class Main {
    public static void main(String[] args) {
        int a = 1;
    }
}

 해당 main 메소드 안의 a라는 정수형 변수는 main메소드가 종료됨과 동시에 사라집니다. 다른 예시로는

public class Main {
    public static void main(String[] args) {
        int a = 1; // 지역변수

        if(a == 1){
            int b = 3; // 지역변수
        }
    }
}

a가 1이면 실행되는 조건문을 추가하고 실행문에 변수 b를 선언하였습니다. 하지만 여기서 main메소드에 b를 사용하려하면 어떻게 될까요? 

b라는 변수를 찾을 수 없습니다.

b라는 변수를 찾을 수 없다고 컴파일 에러가 발생합니다.. 이유는 조건문의 실행이 끝나면서 선언한 int b가 같이 소멸했기 때문입니다. 그렇듯 지역변수는 해당 블록이 끝나는 순간 같이 소멸하기 때문에 항상 주의하여야합니다.

 

그렇다면 전역변수는 무엇을 뜻할까요?

-- 전역변수는 해당 클래스가 존재하는 한 사라지지 않는 변수라고 생각합니다. 선언 위치는 class의 블록에 선언하거나 main메소드가 있는 경우 main 메서드블럭에 선언하면됩니다. 예시를 먼저 보여드리겠습니다

public class Main {
        int all = 6; // 전역변수
    public static void main(String[] args) {
        int a = 1;

        if(a == 1){
            int b = 3;
        }


    }
}

이렇게 전역 변수를 선언하면, 해당 클래스의 어느 블록에서든 값을 초기화하고 연산할 수 있습니다.

그렇다면 전역 변수를 if블럭에 넣어 연산했을 때, 블럭이 끝나면 값도 다시 원래값으로 돌아갈까요?

public class Main {
      static int all = 6; // 전역변수
    public static void main(String[] args) {
        int a = 1;

        if(a == 1){
            int b = 3;
            all += b; // 지역에서 연산
        } // if블럭 끝
        System.out.println(all); 과연 값은?

    }
}

 

코드를 보면 전역변수인 all이 if블럭(지역)에 들어가 연산되어 나옵니다. 하지만 지역변수는 블럭이 끝나면 사라지니까 안에서 선언한 부분도 사라질거야! 라고 생각하는 분들이 있을 수 있습니다. 결과는 연산하기전인 6일까요, 아니면 연산한 값인 9일까요?

 

값은 9입니다!

전역변수는 말그대로 클래스 내에서 사라지지않는 변수이기때문에, 임의의 지역에서 연산 되면 해당 값을 계속해서 가지고있습니다. 이렇게 전역변수와 지역변수의 차이점을 알아보았는데요. 예시를 많이 검색하셔서 비슷하게 만들어보며 이것이 지역변수인지 전역변수인지 생각을 자주해보는게 중요한 것같습니다. 읽어주셔서 감사합니다!