코드일기장

[Java] 변수의 종류와 클래스 변수 인스턴스 변수(객체지향 1-4) 본문

Java/OOP

[Java] 변수의 종류와 클래스 변수 인스턴스 변수(객체지향 1-4)

won_hyeok2 2021. 12. 28. 23:45

 

🎯변수의 종류

 

 

이번 글에는 변수의 종류와 클래스 변수와 인스턴스 변수에 대해 배워보겠다.

 

Java에서 변수는 인스턴스 변수(instance variable), 클래스 변수(class variable), 지역 변수(local variable) 총 3가지가 있다.

 

변수의 종류를 결정짓는 가장 중요한 요소는 변수의 선언 위치이다. 변수가 선언될 수 있는 위치는 클래스 영역클래스 영역 이외의 영역(메서드, 생성자, 초기화 블록 내부)이 있다.

 

 

클래스 영역: 클래스 영역에는 선언문만 쓸 수 있다. 예를 들어 System.out.println() 같은 건 사용하지 못한다는 소리이다.

 

class Student{//클래스 영역 시작
	int iv;  //인스턴스변수
	static int cv;  //클래스변수
	
	void method() 
	{//메서드 영역
		int lv=0;  //지역변수
	}//메서드 영역 끝
	
}//클래스 영역 끝

 

 

변수의 종류 선언위치 생성시기
클래스 변수 클래스 영역 클래스가 메모리가 올라갈 때(Loding)
인스턴스 변수 인스턴스(객체)가 생성되었을 때
지역 변수 클래스 이외의 영역(메서드,생성자,초기화 블럭 내부) 변수 선언문이 수행될 때 (메서드 실행 등)

 


 

인스턴스 변수

  객체가 생성되었을 때 인스턴스 변수가 생성이 된다. 객체 생성에 대해서는 1-2글을 읽기 바란다.  이렇게 생각하면 객체란 인스턴스를 묶어 놓은 것이라고 정의 내릴 수도 있다. 

 

 

 

클래스 변수

  클래스 변수는 클래스가 메모리에 올라갈 때 즉, 로딩될 때 생성이 된다. 메모리에 올라간다라는 말이 무엇일까?

  저장 공간에서 class파일을 RAM에 로딩이 된다면 클래스 변수도 즉시 생성된다.  그래서 인스턴스와 달리 클래스 변수는 따로 인스턴스화 (객체 생성)을 안하고 사용할 수 있다.     클래스 이름. 클래스 변수 이런 식으로 사용 가능하다.

 

  클래스 변수의 사용 방법은 인스턴스 변수 앞에 static 키워드만 붙이면 된다. 예) static int classvariable 이런 식으로 static만 앞에 쓰면 된다.

 

 

지역 변수

  지역 변수는 클래스 이외의 영역에 선언된다. 메서드의 블록 안이나 for문 while문의 블럭안 생성사 블럭안 등이 있다.

지역 변수는 선언문이 수행되었을 때 생성된다. 즉, 메서드가 실행될 때 생성된다는 말이다. 그리고 메서드의 실행이 다 끝나고 종료가 되면 지역 변수는 가비지 컬랙터(GC)로 자동 삭제된다.


 

 

인스턴스 변수와 클래스 변수 사용 코드 예

public class Main {
	public static void main(String[] args){
		System.out.println("티비의 높이는:"+Tv.height+" / 티비의 폭은:"+Tv.width);
		Tv tv1=new Tv();
		Tv tv2=new Tv();
		tv1.price=600;
		tv1.modelname="SAMSUNG";
		tv2.price=800;
		tv2.modelname="LG";
		
		Tv.height=350;  //tv2 참조변수를 이용해서 값을 바꾸면 iv라고 생각할 수 있다.
		Tv.width=450;
		System.out.println("티비 사이즈를 변경했습니다.");
		System.out.println(tv1.modelname+" 가격:"+tv1.price+", 높이:"+Tv.height+", 폭:"+Tv.width);
		System.out.println(tv2.modelname+" 가격:"+tv2.price+", 높이:"+Tv.height+", 폭:"+Tv.width);
	}
}

class Tv{
	static int width=500;
	static int height=400;
	int price;
	String modelname;
}

실행결과

 

코드처럼 클래스 변수인 width와 height은 main메서드 첫 번째 줄처럼 따로 객체 생성 없이 호출해서 사용 가능하다.

참조 변수 tv1, tv2를 객체 생성해서 인스턴스 변수인 price와 modelname을 사용하고 있다 여기서 tv1과 tv2는 다른 주소를 사용하고 있어서 별도로 움직인다. 

 

클래스 변수는 참조 변수를 이용해서 사용해도 좋다 (tv1.width) 이런 식으로 말이다. 하지만 클래스 변수는 클래스 이름. 클래스 변수로 사용하는 것이 바람직하다.  

 

 

 

 

 

 

 

 

 

🎈다음 글 보기 (객체지향 1-5)



 

 

🚀이전 글 보기 (객체지향 1-3)


 


 

Comments