개발/JAVA

자바) 인스턴스 변수와 클래스 변수에 대해서 (+ 지역변수)

hubaek 2024. 9. 24. 01:01

 

선언 위치에 따라서 변수의 종류가 달라진다.

Class Variables {
                                // 2~5 Line 클래스영역
    int iv;			// 인스턴스변수
    static int cv;		// 클래스변수(static변수)
    
    void method() {		// 5~7 Line 메서드영역
    	int lv = 0;  		// 지역변수
    }
}

 

변수의 종류 선언위치 생성시기
클래스변수 클래스 영역 클래스가 메모리에 올라갈 때
인스턴스변수 인스턴스 생성시
지역변수 메서드 영역 변수 선언문 수행시

 

인스턴스변수(instance variable)

 - 각 인스턴스의 개별적인 저장공간. 인스턴스마다 다른 값 저장 가능

 - 인스턴스 생성 후, '참조변수.인스턴스변수명' 으로 접근 가능

    예시) Variables var = new Variables();   

             var.iv;   

 

클래스변수(class variable)

 - 같은 클래스의 모든 인스턴스들이 공유하는 변수

 - 인스턴스 생성없이 '클래스이름.클래스변수명'으로 접근 가능 (예시. Variables.cv; )

 - 클래스가 로딩 될 때 생성되고 프로그램이 종료될 때 소멸

 

지역변수(local variable)

 - 메서드 내에 선언되며, 메서드의 종료와 함께 소멸

 - 조건문, 반복문의 블럭{} 내에 선언된 지역변수는 블럭을 벗어나면 소멸  

 

 

class Car {

    // 인스턴스 변수 자동차의 색상, 스피드 
   String color;
   int speed;
   
   static int maxSpeed = 240; // 클래스변수, 자동차의 최고속도는 240km
    
    Car(String color, int speed) {
        this.color = color;
        this.speed = speed;
    }
    
    void drive() {
        int currentSpeed = 80;  // 지역변수, 자동차의 현재 속도는 80km
    }

}

 

인스턴스변수 : 자동차는 색상과 스피드를 가진다고 했을때, 자동차는 여러색상과 제각기의 스피드를 가진다.

클래스변수 : 모든 자동차의 최고속도는 240km이다.

로컬변수 : 현재 자동차의 속도는 80km이다. 

IV, CV, LV를 이미지화 시킨 사진