TIL | JAVA 선언 위치 변수 종류 (iv, cv, lv)

김윤희·2022년 8월 1일
0

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

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


선언 위치에 따라서 변수는 3가지 종류로 나누어진다

class Variables{
	int iv;			//인스턴스 변수
   static int cv;	//클래스 변수(static변수, 공유변수)
   //cv = (static + iv(인스턴스변수 앞에 static을 붙인 거)
   
   void method(){
   	int lv = 0;	//지역변수
   }
}
  • 먼저 클래스 영역과 메서드 영역 두가지로 나뉘는데
    • 클래스 영역
      • 인스턴스변수
      • 클래스변수 (static변수, 공유변수)
    • 메서드영역
      • 지역 변수

✔ 클래스 안에는 변수나 메서드 선언문만 넣을 수 있다 (y=x+3;나 system.out.println()은 들어갈 수 없다)


출처 - 자바의 정석

❗ 위의 사진에서 중요한 건 인스턴스 변수는 인스턴스가 생성되었을 때
즉, 객체 생성하면 인스턴스 변수가 생성된다 (객체는 iv 변수 묶인거라고 생각하면 쉽다 그리고 iv는 참조변수 사라지면 Garbage Collection에 의해서 제거된다)

❗❗ cpu는 RAM(메모리)하고만 일을 하는데, 그래서 하드디스크가 로딩해서 메모리에 올릴때 클래스 변수는 생성 된다!
(즉, 객체 생성하지 않아도 된다. 인스턴스 변수와는 다르게 만들지 않고도 아무때나 사용 가능하다)



클래스 변수와 인스턴스 변수 (cv ,iv)

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


✔ 포커 카드로 예를 들어보면 카드들은 모든 객체가 공통적인 속성으로 폭과 높이를 가진다. 하지만 무늬나 숫자의 값은 달라야 한다(객체의 속성중에는 개별적인 것과 공통적인 걸로 나뉜다)

객체의 속성중에 개별적인 값을 가져야 하는 것은 인스턴스 변수(iv)로 하고,
모든 인스턴스가 공통으로 가져야하는 속성은 클래스 변수(cv)로 한다.

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 참조변수를 쓰는 것도 가능하지만 권장하지 않는다) - 인스턴스 변수로 오해할 수 있음

출처 - 자바의 정석

✔ 실제 함수가 실행되는 것을 보면 cv와 iv는 따로 실행되며,
cv는 하나로 묶여서 메모리를 절약하고, 객체를 생성할 때마다 cv와 iv가 함께 생성되는게 아니라 iv만 새로 생성된다
(그래서 만약 모든 객체의 공통 속성인 cv 변수를 변경하게 된다면 모든 객체의 cv값이 변경된다)

0개의 댓글