본문 바로가기
Programming/JAVA

6-2 변수의 스코프

by CGS 2019. 4. 11.

스코프(scope)란 "범위", 또는 "영역"이라는 뜻을 가지고 있습니다.

 

여기서 영역은 변수의 접근, 변수가 존재할 수 있는 영역을 의미합니다.

 

{}는 우리가 메소드의 몸체 부분을 정의할 때, if문/if~else문/switch문/반복문 등에서 사용되는 걸 이미 배웠습니다.

 

이렇게 중괄호로 영역이 형성이 되면 감싸지는 영역은 변수에 관한 별도의 스코프를 형성하게 됩니다.

 

public class LocalVariable {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		boolean scope=true;
		if(scope) {
			int num=1;
			num++;
			System.out.println(num);
		}

		else {
			int num=2;
			System.out.println(num);
		}
		
		simple();
	}
	
	public static void simple() {
		int num=3;
		System.out.println(num);
	}

}

num이라는 이름의 변수 세 개를 선언했습니다.

 

같은 이름을 가진 변수를 여러개 선언할 수 있는 이유는 선언된 변수가 속하는 중괄호의 영역이 다르기 때문입니다.

 

기본적으로 변수는 자신이 속한 중괄호 내에서만(선언된 이후부터) 접근이 가능합니다. 그렇기 때문에 속한 영역이 다르면 이름이 동일하더라도 문제가 되지 않습니다. 그리고 이러한 변수의 영역은 반드시 중괄호에 의해서만 형성되는 것은 아닙니다. for문의 일부로 선언되는 변수와 메소드의 매개변수는 중괄호 내에 선언되지는 않지만, 이어서 등장하는 중괄호 내에서만 접근이 가능합니다.

 

즉,

 

for(int num=0; num<5;  num++) {

  /*추가적인 변수 num 선언 불가 지역*/

}

 

public static void myFunc(int num) {

  /*추가적인 변수 num 선언 불가 지역*/

}

 

for문의 변수 num은 for문 내에서 접근이 가능한 변수이기 때문에 for문의 중괄호 내에서 num이라는 이름의 변수 선언이 불가능합니다. 마찬가지로 매개변수도 메소드 내에서 접근이 가능하기 때문에 동일한 이름의 변수 선언이 불가능합니다.

 

지금까지 설명한 중괄호 내에 선언이 된 변수들을 "지역변수"(local variable)이라고 합니다. 지역변수의 특징은 선언된 지역을 벗어나면 메모리 공간에서 소멸됩니다.

 

소멸될 때는, 자동으로 소멸이 이루어집니다. 메모리 공간에 계속 남아있게 된다면 계속되는 프로그램의 실행에 문제가 될 수 있기 때문에 필요없어진 이러한 지역변수들은 자동으로 소멸시키게 됩니다.

'Programming > JAVA' 카테고리의 다른 글

6-3 메소드의 재귀호출  (0) 2019.04.19
6-1 메소드에 대한 이해와 메소드의 정의  (0) 2019.04.02
5-5 반복문의 중첩  (0) 2019.03.25
5-4 continue & break  (0) 2019.03.09
5-3 for, while, do~while  (0) 2018.10.13