☕️[Java] 스코프 존재 이유 1
package scope;
public class Scope3_1 {
public static void main(String[] args) {
int m = 10;
int temp = 0;
if (m > 0) {
temp = m * 2;
System.out.println("temp = " + temp);
}
System.out.println("m = " + m);
}
}
조건이 맞으면 변수 m의 값을 2배 증가해서 출력하는 코드입니다.
여기서 2배 증가한 값을 저장해두기 위해 임시 변수 temp를 사용했습니다.
그런데 이 코드는 좋은 코드라고 보기는 어렵습니다.
그 이유는 임시 변수 temp는 if 조건이 만족할 때 임시로 잠깐 사용하는 변수입니다
그런데 임시 변수 temp가 main()코드 블록에 선언되어 있습니다.
이렇게 되면 다음과 같은 문제가 발생합니다.
비효율적인 메모리 사용:
만약 if 코드 블록 안에 temp를 선언했다면 자바를 구현하는 곳에서 if 코드 블록의 종료 시점에 이 변수를 메모리에서 제거해서 더 효율적으로 메모리응 사용할 수 있습니다.
package scope;
public class Scope3_1 {
public static void main(String[] args) {
int m = 10;
if (m > 0) {
int temp = m * 2;// temp의 생존 시작
System.out.println("temp = " + temp);
} // temp의 생존 종료
System.out.println("m = " + m);
}
}
코드 복잡성 증가:
- 좋은 코드는 군더더기 없는 단순한 코드입니다.
temp는 if코드 블록에서만 필요하지만, main() 코드 블록이 종료될 때 까지 메모리에 유지됩니다.
따라서 불필요한 메모리가 낭비됩니다.
만약 if 코드 블록 안에 temp를 선언했다면 if가 끝나고 나면 temp를 전혀 생각하지 않아도 됩니다.
즉, 머리속에서 생각할 변수를 하나 줄일 수 있다는 말입니다.
그런데 지금 작성한 코드는 if 코드 블록이 끝나도 main() 어디서나 temp를 여전히 접근할 수 있습니다.
누군가 이 코드를 유지보수 할 때 m은 물론이고 temp까지 계속 신경써야 합니다.
스코프가 불필요하게 넓은 것입니다.
지금은 코드가 매우 단순해서 이해하는데 어려움이 없겠지만 실무에서는 코드가 매우 복잡한 경우가 많습니다.