Programming Language/Java

[JAVA] 자바에서의 변수 종류

BS Kwak 2021. 7. 13. 15:10

선언 위치에 따른 변수의 종류

선언 위치에 따라 종류가 3가지로 나뉜다. 

(1) iv  인스턴스 변수 (2) cv 클래스 변수(static, 공유 변수) (3) lv(지역 변수)

 

코드로 구분해 보면 다음과 같다. 

class Variables{
    int iv;	//인스턴스 변수
    static int cv;	//클래스 변수 
    
    void method(){
    	int lv =0; //지역 변수
    }
}

 

(1) iv(instance variable)

인스턴스가 생성되었을 때 생성

Time class가 있다고 가정할 때, "int hour; int min; int sec;" 이것들을 iv라 할 수 있음! 

언제 생성됨? 객체를 생성할 때, 만들어짐

객체는 iv를 묶어놓은것! 이라고 이해하면 쉽다. (엄밀히 얘기하면 틀린 말이지만, 일차적인 이해를 위해서는 이렇게 생각하는 것이 좀 더 쉬울 것)

 

(2) cv(class variable)

클래스가 메모리에 올라갈 때 생성

클래스(설계도가)필요할 때 만들어짐 - 

 

(3) lv(local variable)

변수 선언문이 수행되었을 때 생성

 

영역은 크게 클래스 영역, 메소드 영역으로 나뉜다. 

클래스 영역에서 선언된 변수를 iv라 하고, static한 변수의 경우는 cv라 한다.

메소드 영역(클래스 영역 이외의 영역)에서 선언된 변수를 lv라 한다. 

 

클래스 영역에서 선언되는 변수는 인스턴스 변수와 클래스 변수가 있는데 이 둘의 차이는 무엇일까?

객체의 속성 중 개별적인 속성을 갖는 변수는 인스턴스 변수!

객체의 속성 중 공통적인 속성을 갖는 변수는 클래스 변수! static을 붙임

 

카드로 예시들면 조금 쉽다. 

class Card{

	//개별적인 속성
	String kind; //무늬
    int number; //숫자
    
    //공통적인 속성
    static int width = 100; //폭
    static int height = 250; //높이
}

 

해당 클래스를 사용하려면 다음과 같이 쓸 수 있다. 

Card c = new Card(); //객체 생성
//객체의 사용
c.kind = "HEART";	
c.number = 5;

Card.width =200;
Card.height=300;

클래스 변수를 사용할 때, 참조변수(c.width, c.height)로 써도 되지만, 권장하지 않음