Jin's Dev Story

[JAVA] 지역 변수 & 전역 변수 & static(정적) 변수 본문

Programming Language/JAVA

[JAVA] 지역 변수 & 전역 변수 & static(정적) 변수

woojin._. 2023. 8. 15. 16:57

지역 변수(stack 영역)

  • 지역 안에서 선언된 변수
  • 그 영역의 닫는 중괄호를 만났을 때 메모리에서 해제됨
  • 사용자가 직접 초기화 해야 함
  • 다른 영역에서 접근할 수 없기 때문에 보안성이 뛰어남
  public class Main {


      public static void main(String[] args) {
          int a = 0; //지역변수.
      }
  }

 

전역 변수(data 영역)

  • 클래스 영역 안에 있고, 전체 영역에서 사용 가능한 변수
  • 클래스 영역 외의 어떠한 영역에도 포함되어 있지 않음
  • new를 만났을 때 초기화 됨
  • 프로그램 종료 시 메모리에서 해제 됨
  • 다른 영역에서도 접근할 수 있기 때문에, 보안성이 상대적으로 낮음
    • 전역 변수 종료
      • static 변수 : 다른 클래스에서도 호출 가능
      • 인스턴스 변수 : 같은 클래스 내에서 호출 가능
  public class Main {

      int a = 0; //전역변수 - 인스턴스 변수

          static int width = 100; //전역변수 - static 변수
      public static void main(String[] args) {

      }
  }

 

인스턴스 메서드

  • 인스턴스 객체를 생성 후 “인스턴스변수.메서드()” 형태로 호출하는 방식
  • 인스턴스 멤버와 관련된 작업을 하는 메서드
  • 메서드 내에서 인스턴스 변수를 사용할 수 있음
  class Math1 {

      //인스턴스 변수
      int a,b;

      // 인스턴스 메서드
      int add(){
          return a + b;
      }
  }

  class Main {

      public static void main(String args[]) {

          //인스턴스 생성
          Math1 mt1 = new Math1(); 
          mt1.a = 200;
          mt1.b = 100;

          //인스턴스 메서드 호출
          System.out.println(mt1.add());
      }
  }

static 변수, 클래스 변수(data 영역)

  • 컴파일을 하게 되면 가장 먼저 메모리에 올라가고, 어떠한 경우에도 초기화가 되지 않음
  • 단, 프로그램 종료 시 메모리에서 해제 됨
  • 메모리에 고정되기 때문에 남용 시 메모리 혹은 프로그램 실행 속도에 악영향을 줌

정적(Static)

  • 변하지 않는 것

정적 멤버(클래스 멤버)

  • 정적 변수(정적 필드) + 정적 메소드

정적 변수

  • 메모리에 고정적으로 할당되어, 프로그램이 종료될 때 해제되는 변수

정적 메서드

  • 객체 생성 없이 “클래스.메서드()” 형태로 호출하는 방식
  • 인스턴스 멤버와 관련 없는 작업을 하는 메서드
  • 메서드 내에서 인스턴스 변수를 사용할 수 없음
  class Math1 {

      //static 메서드
      static int add(int a, int b){
          return a + b;
      }
  }

  class Main {

      public static void main(String args[]) {

          //static 메서드(클래스 메서드) 호출 => 객체 생성 없이 호출 가능
          System.out.println(Math1.add(200,100);

      }
  }

'Programming Language > JAVA' 카테고리의 다른 글

[JAVA] List & Set &Map  (0) 2023.08.15
[JAVA] Call By Value와 Call By Reference  (0) 2023.08.15
[JAVA] 인터페이스(interface)  (0) 2023.08.12
[JAVA] 가비지 컬렉션(Garbage Collection)  (0) 2023.08.01
[JAVA] JVM  (0) 2023.08.01