{}
안에서만 생존하고, 자신이 선언된 코드를 벗어나면 제거되기 때문에 이후에는 접근할 수 없음{}
을 의미함public class Scope1 {
public static void main(String[] args) {
// m 생존 시작
int m = 10;
if (true) {
// x 생존 시작
int x = 20;
// 블록 내부에서 블록 외부는 접근 가능
System.out.println("if m = " + m);
System.out.println("if x = " + x);
} // x 생존 종료
// 오류, 변수 x에 접근 불가
// System.out.println("if x = " + x);
System.out.println("if m = " + m);
} // m 생존 종료
}
int m
은 main{}
전체에서 접근할 수 있기 때문에 스코프가 넓다.
m
이 선언된 코드블록 안에서만 생존이 가능하기 때문에 4번줄에서 20번줄에서만 생존이 가능함
int x
는 if{}
코드 블록 안에서만 접근할 수 있게 때문에 스코프가 짧다.
public class Scope2 {
public static void main(String[] args) {
int m = 10;
// 블록 내부, for문 내
for (int i = 0; i < 2; i++) {
// 블록 내부에서 외부는 접근 가능
System.out.println("for m = " + m);
System.out.println("for i = " + i);
} // i 생존 종료
// 오류, i에 접근 불가
// System.out.println("main i = " + i);
System.out.println("main m = " + m);
} // m 생존 종료
}
public class Scope3 {
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배 증가해 출력하는 코드temp
를 사용temp
는 if
조건이 만족할 때 임시로 잠깐 사용하는 변수인데 임시 변수 temp main()
코드 들럭에 선언되어있기에 좋은 코드라고 볼 수 없다.비효율적인 메모리 사용
temp
는if
코드 블록에서만 필요하지만main()
코드 블록이 종료될 때까지 메모리에 유지되기에 불필요한 메모리가 낭비된다.- 만약
if
코드 블록 안에temp
를 선언했다면 Java를 구현하는 곳에서if
코드 블록의 종료 시점에 이 변수를 메모리에서 제거해 더 효율적으로 메모리를 사용할 수 있다.
코드의 복잡성 증가
- 좋은 코드는 군더더기 없는 단순한 코드이다.
- 스코프가 불필요하게 넓음 : 현재 코드는
if
코드 블록이 끝나도maim()
어디서나temp
를 여전히 접근할 수 있다. 누군가 이 코드를 유지보수 할 때m
은 물론, temp까지 계속 신경써야한다.temp
는if
코드 블록에서만 필요하고 그 안에서만 사용하면 된다.if
코드 블록 안에temp
를 선언했다면if
가 끝나고 나면temp
를 전혀 생각하지 않아도 된다. (변수를 하나 줄일 수있다)
temp
를 코드 블록 안에서 선언하는 것으로 변경tmep
는 if
코드 블록 안으로 스코프 범위가 줄어들게 됨temp
메모리를 빠르게 제거해 메모리를 효율적으로 사용하고 temp
변수를 생각해야하는 범위를 줄여 유지보수하기 좋은 코드로 변경됨public class Scope3 {
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);
}
}
🔥 한줄 요약
좋은 프로그램은 무한한 자유가 있는 프로그램이 아니라 적절한 제약이 있는 프로그램이다.