본문 바로가기

Java

[Java] 지역 변수, scope 그게 뭔데?

변수는 선언한 위치에 따라 지역 변수, 멤버 변수(클래스 변수, 인스턴스 변수)와 같이 분류됩니다.

 

지역 변수(Local Variable)는 이름 그대로 특정 지역에서만 사용할 수 있는 변수라는 뜻입니다.

특정 지역을 벗어나면 사용할 수 없고, 지역이라는 것은 변수가 선언된 코드 블록( {   } ) 이겠죠?

지역 변수는 자신이 선언된 코드 블록 ( {  } ) 안에서만 생존하고, 자신이 선언된 코드블록을

벗어나면 제거됩니다. 이렇게 된다면 이후에 접근할 수도 없겠죠?

 

예제를 보면서 설명해드리겠습니다.

 

int m은 main{ }의 코드 블록안에서 선언되었습니다.

따라서 변수를 선언한 시점부터 main{ } 의 코드 블록이 종료될 때 까지 생존합니다.

 

또한, if{ } 블록 내부에서도 외부 블록에서 선언된 m에 접근할 수 있습니다.

이를 통해 생존 범위만 맞으면 어디든 접근할 수 있다는 것을 알 수 있습니다.

 

int x는 if{ } 블록안에서 선언되었습니다.

따라서 변수를 선언한 시점부터 if{ } 의  코드블록이 종료될 때 까지 생존합니다.

 

if{ } 내부에서는 자신의 범위에서 선언한 x에 당연히 접근할 수 있습니다.

하지만, if{ } 코드 블록이 끝나버리면 x는 제거됩니다.

따라서 x에 접근할 수 없습니다.

 

정리하면 지역 변수는 본인의 코드 블록 안에서만 생존하고, 자신의 코드 블록 안에서는 얼마든지

접근할 수 있습니다. 하지만, 자신의 코드 블록을 벗어나면 제거되기 때문에 접근할 수 없습니다.

 

변수를 선언한 시점부터 변수를 계속 사용할 수 있게 해도 되지 않을까?
왜 복잡하게 접근 범위(스코프) 라는 개념을 만들었을까?


이런 생각이 드시는 분들도 있을겁니다. 

그럼 진짜 왜??? 스코프가 필요한 걸까 예제를 통해 알아보겠습니다.

조건이 맞으면 변수 m의 값을 2배 증가해서 출력하는 코드이다.

 

여기서 2배 증가한 값을 저장해두기 위해 임시 변수 temp를 사용했습니다.

temp는 if 조건이 만족할 때 임시로 잠깐 사용하는 변수입니다.

그런데 임시변수 temp은 main( ) 코드 블록에 선언되어 있는데요.

임시변수인 temp가 if 문 안에 있지 않고 main( ) 코드 블록에 있다면 어떤 문제점이 생길까요?

 

만약 if 코드 블록안에 temp를 선언했다면 if가 끝나고 나면 tmep를 전혀 생각하지 않아도 되겠죠?

머리속에서 생각할 변수를 하나 줄일수 있고, 누군가 이 코드를 유지보수 할 때

m은 물론이고 temp 까지 계속 신경써야 할 것입니다.

 

변수는 꼭 필요한 범위로 한정해서 사용하는 것이 좋습니다.

변수의 스코프는 꼭 필요한 곳으로 한정해서 사용합시다.

메모리를 효율적으로 사용하고 더 유지보수하기 좋은 코드를 만들 수 있게 말이죠!

 

 

 

 

좋은 프로그램은 무한한 자유가 있는 프로그램이 아니라 적절한 제약이 있는 프로그램이다.