본문 바로가기
Java

지역변수와 전역변수의 개념

by Kaia Gwak 2024. 10. 18.

1.지역 변수 (Local Variables):정의:

  • 메소드나 블록 내에서 선언된 변수

  • 선언된 블록 내에서만 사용 가능

    특징:
  • 메소드나 블록이 실행될 때 생성되고, 종료될 때 소멸됨

  • 다른 메소드에서 접근할 수 없음

  • 초기화하지 않으면 사용할 수 없음

    예시:java:
    public void exampleMethod() {
      int localVar = 10; // 지역 변수
      System.out.println(localVar);
    } // localVar는 여기서 소멸됨

    2. 전역 변수 (Global Variables):

    자바에서는 strict한 의미의 전역 변수가 없지만, 이와 유사한 개념으로 클래스 변수(static 변수)와 인스턴스 변수가 있습니다.

    클래스 변수 (Static Variables):
  • 클래스 내에서 static 키워드로 선언된 변수

  • 모든 객체가 공유하는 변수

  • 클래스가 메모리에 로드될 때 생성되고, 프로그램이 종료될 때 소멸됨

    예시:java:
    public class Example {
      static int classVar = 0; // 클래스 변수
    }
    인스턴스 변수 (Instance Variables):
  • 클래스 내에서 선언되지만 메소드 밖에서 선언된 변수

  • 각 객체마다 별도의 복사본을 가짐

  • 객체가 생성될 때 생성되고, 객체가 소멸될 때 함께 소멸됨

    예시:java:
    public class Example {
      int instanceVar; // 인스턴스 변수
    
      public void setVar(int value) {
          this.instanceVar = value;
      }
    }

    3. 비교

    스코프:
  • 지역 변수: 선언된 블록 내에서만 접근 가능

  • 클래스/인스턴스 변수: 클래스 전체에서 접근 가능

    라이프타임:
  • 지역 변수: 메소드 실행 동안만 존재

  • 클래스 변수: 프로그램 실행 전체 기간 동안 존재

  • 인스턴스 변수: 객체가 존재하는 동안 존재

    메모리 할당:
  • 지역 변수: 스택 메모리에 할당

  • 클래스/인스턴스 변수: 힙 메모리에 할당

4. 주의사항

  • 변수 이름 충돌을 피하기 위해 지역 변수와 인스턴스 변수의 이름을 다르게 하는 것이 좋습니다.
  • 필요 이상으로 넓은 스코프의 변수를 사용하면 코드의 복잡성이 증가할 수 있습니다.

5. 좋은 프랙티스

  • 변수의 스코프는 가능한 한 좁게 유지하는 것이 좋습니다.
  • 전역 변수(클래스 변수)의 사용은 필요한 경우로 제한하는 것이 좋습니다.

이러한 변수 개념을 이해하고 적절히 사용하면 코드의 구조와 가독성을 개선할 수 있으며, 메모리 관리도 더 효율적으로 할 수 있습니다.