티스토리 뷰

Java/기본

015. 자바 : 변수 구분

따강아지 2022. 3. 1. 02:24

자바에서 변수는 지역변수, 인스턴스 변수, 클래스 변수로 나누어진다.

1. 지역변수

메서드 내부에서 정의되어 사용하는 변수
자동으로 초기화되지 않음
매개변수도 지역 변수
메서드가 인자로 사용되는 변수

2. 클래스 변수

1. 객체(클래스의 인스턴스)가 아니라 정의된 클래스와 연관되므로 Runtime Data Area의 Method Area에 한 개 존재 
   - 객체를 많이 생성해도 하나만 존재하며 초기화는 한 번만 실행됩니다.
2. static 한정자
  - 생성시점 : 최초 new 하는 경우 , Class가 최초로 참조되는 경우
  - 일반적으로 상수로 사용
  - static final double PI=3.14;  
  - Class. 클래스 변수로 접근 : ClassName.PI  
  - new로 객체를 생성하지 않아도 사용 가능합니다.

3. 인스턴스 변수

static으로 선언되어 있지 않는 모든 멤버 변수
객체(클래스의 인스턴스)는 자신만의 복사본을 Heap에 저장합니다.
  - new로 생성 시마다 Heap에 할당됩니다.
  - 인스턴스 변수의 값은 각각이 객체와 구분됩니다.

4. 변수 자동 초기화 

클래스, 인스턴스 변수는 자동 다음과 같이 초기화됩니다.
   - boolean -> false
   - char -> ‘\u0000’
   - Byte : short : int : long -> 0
   - Float -> 0.0f
   - Double -> 0.0d
   - Object type -> null

* 지역변수, 매개변수는 자동으로 초기화되지 않음

public class InitVariable {
   private boolean mvBoolean;
   private char mvChar;
   private byte mvByte;
   private short mvShort;
   private int mvInt;
   private long mvLong;
   private float mvFloat;
   private double mvDouble;
   private Object mvObject;

   public InitVariable() {}

   public void printInitVariable() {
      int localNum; // 초기화 되지 않음 오류
      // System.out.println(String.format("localNum  :: %s", localNum));
      System.out.println(String.format("Field mvBoolean  :: %s", mvBoolean));
      System.out.println(String.format("Field mvChar :: %s", mvChar));
      System.out.println(String.format("Field mvByte :: %s", mvByte));
      System.out.println(String.format("Field mvShort :: %s", mvShort));
      System.out.println(String.format("Field mvInt :: %s", mvInt));
      System.out.println(String.format("Field mvLong :: %s", mvLong));
      System.out.println(String.format("Field mvFloat :: %s", mvFloat));
      System.out.println(String.format("Field mvDouble :: %s", mvDouble));
      System.out.println(String.format("Field mvObject :: %s", mvObject));
   }
}

자동 초기화


5. JVM 변수 할당 


6. 변수 범위

변수의 선언 위치에 따라서 변수의 수명이 지역 범위를 가지는 지역 변수와 프로그램 전체에 영향을 주는 전역 변수로로 나누어지는데 JAVA는 전역 변수가 없으며 public로 선언한 멤버 변수는 객체를 생성 후 접근 가능 하며, 변수 선언시 static로 선언 한 변수는 객체 생성 없이 접근 해서 사용 할 수 있습니다.

클래스 안에 선언된 맴버 변수는 클래스 안에서 만 유효한 전역 변수라 할 수 있으며 접근 지정자의 선언에 따라서 접근할 수 있는 범위가 결정됩니다, 접근 지정자는 public, private, dafault(package), protected 가 있으면 변수는 클래스를 new연산자로 생성 후 사용 가능하며  public은 프로그램 전체에서 어디 에서나 사용 가능하고 , default는 동일 패키지 영역에서 접근이 가능하고, protected는 상속받거나 동일 패키지에서 사용할 수 있으며, private는 선언된 클래스에서만 사용 가능합니다.

메서드 안에 사용한 변수를 지역 변수로 합니다. 또한 블록 { } 안에 선언된 변수는 블럭 안에서만 유효합니다.

변수 범위


소스 : https://github.com/hyomee/JAVA_EDU/tree/main/Variable/src/com/javavariable

 

GitHub - hyomee/JAVA_EDU: 자바 기초 교육

자바 기초 교육. Contribute to hyomee/JAVA_EDU development by creating an account on GitHub.

github.com

 

'Java > 기본' 카테고리의 다른 글

017. 자바 : 연산자  (0) 2022.03.06
016. 자바 : 형변환  (0) 2022.03.01
014. 자바 : 문자열 API  (0) 2022.03.01
013. 자바 : 참조자료형 : 문자열  (0) 2022.03.01
012. 자바 : 2차원 배열  (0) 2022.03.01