{} 안에서만 생존하고, 자신이 선언된 코드를 벗어나면 제거되기 때문에 이후에는 접근할 수 없음{} 을 의미함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);
}
}
🔥 한줄 요약
좋은 프로그램은 무한한 자유가 있는 프로그램이 아니라 적절한 제약이 있는 프로그램이다.