변수는 모두 생명주기 (life cycle) 이 있습니다. 변수를 사용하기 위해 선언하면, 그 선언된 지역에서 가장 가까운 (변수를 감싸고 있는) 중괄호가 그 변수의 유효 범위가 됩니다. 메소드 안에서 선언된 변수는 메소드 중괄호 안이 유효 범위가 되고, 선택 제어문이나 반복 제어문 안에서 선언된 변수도 마찬가지 입니다. 예를 들어, for 문에서 사용되는 초기문 내에서 선언된 반복제어변수인 i 변수도 for 문 안에서만 유효합니다. 추가적으로, 메소드의 매개변수도, 해당 메소드가 유효 범위가 됩니다.


이러한 변수는, 선언된 시점에서 메모리에 할당되었다가, 유효 범위가 끝나면, 메모리에서 자동 해제되므로, 지역 변수 (local variable) 라고 부르기도 합니다.


만약 범위가 중첩되어 있는 경우에는, 안쪽에 있는 영역에서는, 바깥 영역의 변수를 접근해서 사용할 수 있습니다. 예를 들어, 메소드에 선언된 변수는 메소드 내의 for 문안에서 접근할 수 있습니다.


따라서, 중첩되어 있는 경우에, 같은 이름의 변수명으로 선언되어 있다면, 그 이름의 변수를 접근할 때는, 접근 위치에서 가장 가깝게 선언된 변수를 가져와서 사용하게 됩니다. (즉, 바깥에 선언될 수록 안쪽에 선언된 동일한 이름의 변수에 의해 가려지게 됩니다.)


이와 더불어, 클래스의 멤버로 선언된 변수를 멤버 변수라고 부릅니다. 이 멤버 변수 또한 유효 범위는 클래스 내부가 됩니다. 클래스 내부의 어느 영역에서든 접근이 가능합니다. (메소드 영역 or 내부 클래스 영역)


클래스의 메소드 내부에서 변수를 접근할 때에는, 기본적으로, 메소드 내부에 선언된 변수들을 참조하려고 하고, 만약 없을 경우에는, 멤버 변수를 참조하려고 합니다. 멤버 변수에도 없는 경우에는 컴파일 에러가 납니다.


이러한 변수들을 선언하고 사용할 때는, 유효 범위를 잘 고려하여 사용해야 합니다.

by kkikkodev 2015. 6. 16. 14:51