Variable

임준철·2021년 3월 14일
0

JavaAdvanced

목록 보기
14/15

변수 (Variable,필드, 속성, 멤버 변수)

  • 변수의 자료형은 기본 자료형, 참조 자료형으로 나눠진다.
    • 변수에 대한 생성은 생성자에서 주로하는데 사용하기 전에만 하면 된다.
      생성하기 전 상태에서 값을 넣으면 NullPointException이 발생할 수 밖에 없다.
      메모리가 없는데 값을 넣으면 에러가 날 수 밖에 없다.

선언된 위치에 따라 구분되는 변수는 생성 및 소멸 시기, 저장되는 메모리 공간과 사용 방법까지 서로 다르다.

변수생성 시기소멸 시기저장 메모리사용 방법
클래스 변수클래스가 메모리에 올라갈 때(클래스가 사용이 될 때)프로그램이 종료될 때메소드 영역클래스 이름, 변수 이름
인스턴스 변수인스턴스가 생성될 때인스턴스가 소멸할 때힙 영역인스턴스 이름, 변수 이름
지역 변수블록 내에서 변수의 선언문이 실행될 때블록을 벗어날 때스택 영역변수 이름
public class Variables{
   int instanceVar; // 인스턴스 멤버 변수
   static int classVar; // 클래스 멤버 변수

   public void method(int parameterVar){ //파라미터 변수
         int localVar = 0; //로컬 변수
   }
}

클래스 멤버 변수(static variable, class variable)

  • 처음 프로그래밍에 로드될 때 클래스 영역에 생긴다, 메모리에 할당된다.
  • static을 이용하여 정의하는 변수, 클래스에서 바로 접근이 가능한 변수를 의미한다.
  • 인스턴스(객체)들이 공통으로 사용하는 변수, 외부에서 접근하지 못하게 접근제어자를 private을 사용하는 것이 좋다.
  • 초기화를 해주지 않았을 경우, 자동으로 자료형의 기본값으로 초기화가 된다.(static int num; 이라 했을 때 static int num = 0;과 같음)
  • 객체명으로도 접근이 가능하지만 권장하지 않는다.

  • 모든 인스턴스에 공통적으로 사용되는 클래스 변수가 된다, 클래스가 메모리에 로드될 때 생성된다.

  • 처음 프로그램이 로드될 때 데이터 영역(static 영역, 클래스 영역)에 생성이 된다.

  • 인스턴스의 생성과 상관 없이 사용할 수 있으므로 클래스 이름으로 참조한다.(ex- 클래스명.static변수명,Student.name = "홍길동")

             static int classVar; 
                  
             System.out.println("클래스 변수");
             System.out.println(Variable.classVar); // 0으로 초기화가 된다. 

인스턴스 멤버 변수

  • 객체를 생성해서 사용하는 변수로 클래스명으로 접근이 불가능하다.

  • 초기화를 해주지 않았을 경우, 자동으로 자료형의 기본값으로 초기화가 된다.

            int instanceVar; // 인스턴스 멤버 변수, 필드, 속성
            System.out.println("인스턴스 멤버 변수");
            Variable var = new Variable();
            // 인스턴스를 만들어야 실체가 있기 때문에
            System.out.println(var.instanceVar);  
            //0으로 초기화가 됨.외워야됨.
  • 각 자료형의 초기화값

    변수의 타입초기값
    char'\u0000'
    byte,short,int0
    long0L
    float0.0f
    double0.0
    booleanfalse
    배열,인스턴스 등null

클래스 변수와 인스턴스 변수

  • 각각의 객체들은 데이터 영역에 위치한 동일한 메모리를 참조한다.

로컬 변수

  • 메소드 또는 중괄호 블록 내부에서 생성되는 변수
  • 스택 영역에 생성되며, 초기화가 자동으로 이루어지지 않는다.
  • 생명 주기(Life cycle)은 생성된 중괄호 블록이 종료될 때 까지이다.

파라미터 변수

  • 메소드에서 값을 호출할 때 넣어 주는 변수. 메소드 내부에서만 사용 가능.
    public void method(int paramVar){ //로컬 파라미터 변수
    System.out.println(paramVar);
    int localVar; //로컬 변수
    System.out.println(localVar); //error 로컬변수는 초기화가 자동으로 안됨. 
    localVar = 10;
    System.out.println(localVar); //이렇게 값을 대입해서 사용해야 한다.
    {
      localVar = 30;
    }
    int localVar2 = 20;
    }
    System.out.println(localVar); //블록 내에서 수정한 것도 반영됨.     
    localVar2 = 40; // 접근 불가. 생명주기가 끝났다. Life-Cycle이 끝났다.
profile
지금, 새로운 문을 열자! 문 저편에 무엇이 있을지 두렵더라도!!

0개의 댓글