Language/Java
Java 스코프 존재 이유
괘창
2024. 7. 1. 09:57
■ 스코프 존재 이유
예제 코드)
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() 코드 블록에 선언되어 있기 떄문에 아래와 같은 문제가 발생한다.
- 비효율적인 메모리 사용 : temp 는 if 코듭 블록에서만 필요하지만, main() 코드 블록이 종료될때 까지 메모리에 유지
따라서 불필요한 메모리가 낭비되며, if 코드 블록 안에 temp를 선언했다면 자바를 구현하는 곳에서
if 코드 블록의 종료 시점에 이 변수를 메모리에서 제거하여 더 효율적인 메모리를 사용할 수 있다. - 코드 복잡성 증가 : 좋은 코드는 군더더기 없는 단순한 코드이다.
temp는 if 보드 블록에서만 필요하고. 해당 블록에서만 사용하면 된다.
만약 if 코드 블록 안에 temp를 선언했다면 if가 끝나고 나면 temp를 전혀 생각하지 않아도 된다.
하지만 위 예제 코드는 if 블록이 끝나도 main() 어디서나 temp 를 여전히 접근할 수 있다.
누군가 위 코드를 유지보수할 때 m은 물론 temp까지 계속 신경써야하기 떄문에 스코프가 불필요하게 넓다.
현재 코드는 단순해서 이해할 수 있지만 실무에서는 코드가 복잡한 경우가 많다.
temp 스코프가 필요한 곳에 이동한 예제)
package scope;
public class Scope3_2 {
public static void main(String[] args) {
int m = 10;
if (m > 0) {
int temp = m * 2;
System.out.println("temp = " + temp);
}
System.out.println("m = " + m);
}
}
실행 결과)

# temp 를 if 코드 블록 안에 선언하여 temp는 if 코드 블록 안으로 스코프가 줄어든다.
덕분에 temp는 메모리를 빨리 제거하여 효율적으로 메모리 사용이 가능하며, temp 변수를 생각해야 하는 범위르 줄여
보다 유지보수 하기 좋은 코드로 만들었다.
■ while문 vs for문 - 스코프 관점
while 예시)
package scope;
public class ScopeWhile {
public static void main(String[] args) {
int sum = 0;
int i = 1;
int endNum = 3;
while (i <= endNum) {
sum = sum + i;
System.out.println("i = " + i + " sum = " + sum);
i++;
}
}
}
For 예시)
package scope;
public class ScopeFor {
public static void main(String[] args) {
int sum = 0;
int endNum = 3;
for (int i = 1; i <= endNum; i++) {
sum = sum + i;
System.out.println("i = " + i + " sum = " + sum);
}
}
}
# 변수 스코프 관점에서 카운터 변수 i 비교
- while 문의 경우 변수 i 의 스코프가 main( ) 메소드 전체가 된다.
반면 for 문의 경우 변수 i 스코프가 for 문 안으로 한정되어 있다. - 이에 따라 변수 i 와 같이 for 문 안에서만 사용되는 카운터 변수가 있다면 while문 보다는 for문을 사용해서
스코프의 범위를 제한하는 것이 메모리 사용과 유지보수 관점에 더 좋다.
※ 정리
- 변수는 꼭 필요한 범위로 한정해서 사용하는 것이 좋다.
변수의 스코프는 꼭 필요한 곳으로 한정해서 아용하자!
메모리를 효율적으로 사용하고 더 유지보수하기 좋은 코드를 만들 수 있다. - 좋은 프로그램은 무한한 자유가 있는 프로그램이 아닌 적절한 제약이 있는 프로그램이다.