선언위치 변수종류
Class Variables
{
int iv; //인스턴스 변수
static int cv; //클래스 변수 (static 변수, 공유변수)
void method()
{
int lv = 0; //지역변수
}
}
클래스 영역에서는 선언문만 가능하다. ( 메서드, 변수의 선언 )
클래스안에 인스턴스변수와 static변수는 변수 선언이 되었다. void method() 라는 메서드가 선언이 되었고 그 안에는 메서드가 정의되었으며 lv는 지역변수를 뜻한다.
지역변수는 메서드 안에서만 유효하며 종료시 자동 제거된다. 인스턴스변수와 static변수는 클래스 영역에서 사용된다.
자동초기화가 되지 않으며 try-catch 구문을 사용시 try블럭이 성공되지 않으면 초기화가 안되는 상태를 유지하기 때문에 예외발생시 사용이 불가하다.
변수의 종류 | 선언위치 | 생성시기 |
클래스변수(class variable) | 클래스 영역 | 클래스가 메모리에 올라갈 때 |
인스턴스변수(instance variable) | 인스턴스가 생성되었을 때 | |
지역변수(local variable) | 클래스 영역 이외의 영역 (메서드 생성자, 초기화 블럭내부) |
변수 선언문이 수행되었을 때 |
인스턴스변수
class Time {
int hour;
int minute;
int second;
}
Time 클래스안에 있는 변수는 인스턴스 변수이다.
Time t = new Time(); 객체를 생성했을 때 아래의 그림처럼 인스턴스 변수가 만들어 진다.
클래스변수
SSD , HDD 등에는 파일이 들어있는데 CPU가 속도차이로 인해 직접 읽지 못한다.
CPU가 훨씬 빠르기 때문이다. 그렇기 때문에 중간에 RAM(메모리)에 가지고 있는 파일을 올린다. 이것을 로딩이라고 하며 반대로 메모리에서 저장하지 않으면 날아가기 때문에 다시 디스크에 저장하는 것을 Save라고 한다.
파일을 메모리에 올리게 되면 CPU가 읽을 수 있다. CPU는 모든 작업을 RAM하고만 한다.
파일(클래스)가 메모리에 올라갈 때 클래스변수(Static) 가 생성이 된다.
인스턴스 변수와 클래스변수(static)의 차이점은 객체생성 유무이다.
인스턴스변수는 객체를 생성해서 사용을 하며 클래스(static)변수는 객체를 생성하지 않으며 클래스 변수가 메모리에 올라갈 때 자동생성이 된다.
class Card {
String Kind; //무늬
int number; //숫자
static int width = 100; //폭
static int height = 250; //높이
}
클래스(static)변수와 인스턴스변수의 또 다른 차이점으로는 클래스(static)변수는 공통속성, 인스턴스변수에는 개별적인속성을 사용한다.
Card c = new Card();
c.kind = "HAERT"; //iv
c.number = 5; //iv
c.width = 200; //staic
c.height = 200; //static
클래스(static)변수는 참조변수를 앞에 붙혀서 사용해도 되지만 클래스이름을 붙혀서 사용하는 것을 권장한다.
Card.width = 200;
Card.height = 300;
'객체지향' 카테고리의 다른 글
[상속] 클래스간의 관계, 상속과 포함 (0) | 2021.11.04 |
---|---|
[상속] 상속 개념 (0) | 2021.11.03 |
[객체지향] 클래스의 정의 (0) | 2021.10.26 |
[객체지향] 객체 배열 (0) | 2021.10.26 |
[객체지향] 2. 클래스 작성방법 & 객체의 생성과 사용 (0) | 2021.10.25 |