[Java] 스코프 1 - 지역 변수와 스코프

코드 속의 "진돌"·2023년 12월 30일
0
post-thumbnail

변수는 선언한 위치에 따라 지역 변수, 멤버 변수(클래스 변수, 인스턴스 변수)와 같이 분류된다.
지금까지 학습한 변수들은 모두 영어로 로컬 변수(Local Variable), 한글로 지역 변수라 한다.

✅ 지역 변수


지역 변수는 이름 그대로 특정 지역에서만 사용할 수있는 변수라는 뜻이다. 그 특정 지역을 벗어나면 사용할 수 없다.

여기서 말하는 지역이 바로 변수가 선언된 코드 블록({})이다. 지역 변수는 자신이 선언된 코드 블록({}) 안에서만 생존하고, 자신이 선언된 코드 블록을 벗어나면 제거된다. 따라서 이후에는 접근할 수 없다.

✏️ Scope1

package scope;

public class Scope1 {

  public static void main(String[] args) {
    int m = 10;  // m 생존 시작
    
    if (true) {
      int x = 20;  // x 생존 시작
      System.out.println("if m = " + m);  // 블록 내부에서 블록 외부는 접근 가능
      System.out.println("if x = " + x);
    }  // x 생존 종료
    // System.out.println("main x = " + x);  // 오류, 변수 x에 접근 불가
    System.out.println("main m = " + m);
  }  // m 생존 종료
}
  • int m
    • int mmain{}의 코드 블록안에서 선언되었다. 따라서 변수를 선언한 시점부터 main{}의 코드 블록이 종료될 때 까지 생존한다.
    • if{}블록 내부에서도 외부 블록에서 선언된 m에 접근할 수 있다. 쉽게 이야기해서 생존 범위만 맞으면 다 접근할 수 있다.
  • int x
    • int xif{}블록 안에서 선언되었다. 따라서 변수를 선언한 시점부터 if{}의 코드 블록이 종료될 때까지 생존한다.
    • if{} 내부에서는 자신의 범위에서 선언한 x에 당연히 접근할 수 있다.
    • if{} 코드 블록이 끝나버리면 x는 제거된다. 따라서 더는 x에 접근할 수 없다. 따라서 이후에 접근하면 cannot find symbol이라는 변수 이름을 찾을 수 없다는 컴파일 오류가 발생한다.

✓ 지역 변수 정리


  • 지역 변수는 본인의 코드 블록 안에서만 생존한다.
  • 자신의 코드 블록 안에서는 얼마든지 접근할 수 있다.
  • 자신의 코드 블록을 벗어나면 제거되기 때문에 접근할 수 없다.

✅ 스코프


변수의 접근 가능한 범위스코프(Scope)라 한다.

int mmain{} 전체에서 접근할 수 있기 때문에 스코프가 넓고, int xif{} 코드 블록 안에서만 접근할 수 있기 때문에 스코프가 좁다.

✏️ Scope2

package scope;

public class Scope2 {

  public static void main(String[] args) {
    int m = 10;
    for (int i = 0; i < 2; i++) {  // 블록 내부, for문 내
      System.out.println("for m = " + m);  // 블록 내부에서 외부는 접근 가능
      System.out.println("for i = " + i);
    }  // i 생존 종료

    // System.out.println("main i = " + i);  // 오류, i에 접근 불가
    System.out.println("main m = " + m);
  }
}

for문의 경우 for(int i = 0; …)과 같이 for문 안에서 초기식에 직접 변수를 선언할 수 있다. 그리고 이렇게 선언한 변수는 for문 코드 블록 안에서만 사용할 수 있다.

profile
매일 성장하는 주니어 개발자의 기록📝

0개의 댓글

관련 채용 정보