변수(Variable)의 종류

변수의 종류 선언위치 생성시기 사용할 때
클래스 변수
(class variable)
클래스 영역 클래스가 메모리에 올라갈 때 모든 인스턴스가 공통된 저장공간(변수=값)을 공유
인스턴스 변수
(instance variable)
클래스 영역 인스턴스가 생성되었을 때 독립적인 저장공간을 가지므로
인스턴스마다 고유한 상태를 유지해야하는 속성일 때
지역변수
(local variable)
클래스 영역 이외의 영역
(메서드, 생성자, 초기화 블럭 내부)
변수 선언문이 수행되었을 때 생성된 블락 내에서만 사용 가능
class Sunny {
    int sunnyiv;        // 인스턴스변수
    static int sunnycv; // 클래스변수(static변수, 공유변수)
    
    void sunnym() {
        int sunnylv = 0; // 로컬(지역) 변수
    }
}



클래스 변수

  • 선언 방법 : 인스턴스변수 앞에 static을 붙이면 됨

  • 모든 인스턴스가 공통된 저장공간(변수)을 공유

  • 한 클래스의 모든 인스턴스들이 공통된 값을 사용해야 하는 속성의 경우 사용

    • 변경될 경우 전체 반영
  • 클래스가 메모리에 ‘로딩(loading)’될 때 생성되어 프로그램이 종료될 때까지 유지

  • public을 앞에 붙이면 같은 프로그램 내에서 어디서나 접근할 수 있는 ‘전역변수(global variable)’의 성격을 갖음

  • 인스턴스를 생성하지 않아도 언제라도 바로 사용할 수 있음

  • ‘클래스명.클래스변수명’ 형식으로 호출

    • 인스턴스명.클래스변수명으로도 호출이 가능하지만, 그렇게 되면 인스턴스 변수와 혼동이 오기 때문에 클래스명.클래스변수명으로 호출할 것



인스턴스 변수

  • 독립적인 저장공간을 가지므로 서로 다른 값을 가질 수 있음

  • 클래스의 인스턴스를 생성할 때 만들어지므로, 사용하려면 먼저 인스턴스를 생성해야 함



지역 변수

  • 메서드 내에 선언되어 메서드 내에서만 사용 가능, 메서드가 종료되면 소멸

  • for문 또는 while문의 블럭 내에 선언된 지역변수는, 선언된 { } 블럭 내에서만 사용 가능, 벗어나면 소멸