충분히 쌓여가는
인스턴스 변수와 클래스 변수 본문
인스턴스 변수(instance variable)
개별 속성
클래스 영역에 선언되며, 클래스의 인스턴스를 생성할 때 만들어짐
-> 인스턴스 변수의 값을 읽어오거나 저장하기 위해서 인스턴스를 생성해야함
독립적인 저장공간을 가지므로 서로 다른 값을 가질 수 있다
인스턴스마다 고유한 상태를 유지해야 하는 경우 사용
클래스 변수(class variable)
공통 속성
모든 인스턴스가 공통된 저장공간(변수)를 공유하게 된다
한 클래스의 인스턴스들이 공통적인 값을 유지해야 하는 속성의 경우 사용
인스턴스를 생성하지 않고 언제라도 바로 사용가능
클래스가 메모리에 loading될 때 생성되어 프로그램이 종료될 때 까지 유지
public를 앞에 붙이면 같은 프로그램 내에서 어디서나 접근할 수 있는 전역변수의 성격을 갖게됨
public class Card {
// 인스턴스 변수: 개별 속성
String kind; // 무늬
int number; // 숫자
// 클래스 변수: 공통 속성
static int width = 100; // 폭
static int height = 250; // 높이
}
객체 사용 방법
비추천 방법(참조변수.클래스변수)
Card c = new Card();
c.kind = "HEART"; // instance 변수 사용
c.number = 5; // instance 변수 사용
c.width = 200; // class 변수 사용, 참조변수 c를 사용하는 것이 틀린건 아니지만 instance 변수와 비교하기 어려움
c.height = 300; // class 변수 사용, 참조변수 c를 사용하는 것이 틀린건 아니지만 instance 변수와 비교하기 어려움
추천 방법(클래스이름.클래스변수)
Card c = new Card();
c.kind = "HEART"; // instance 변수 사용
c.number = 5; // instance 변수 사용
Card.width = 200; // class 변수 사용, 클래스 이름(Card)을 붙이는 것이 좋다
Card.height = 300; // class 변수 사용, 클래스 이름(Card)을 붙이는 것이 좋다
인스턴스 변수는 인스턴스가 생성될 때 마다 생성되므로 인스턴스마다 각기 다른 값을 유지할 수 있다
클래스 변수는 모든 인스턴스가 하나의 저장공간을 공유하므로, 항상 공통된 값을 갖는다
class Card {
String kind ; // 카드의 무늬 - 인스턴스 변수
int number; // 카드의 숫자 - 인스턴스 변수
static int width = 100; // 카드의 폭 - 클래스 변수
static int height = 250; // 카드의 높이 - 클래스 변수
}
class CardTest{
public static void main(String args[]) {
System.out.println(Card.width); // 100
System.out.println(Card.height); // 250
System.out.println();
Card c1 = new Card();
c1.kind = "Heart";
c1.number = 7;
Card c2 = new Card();
c2.kind = "Spade";
c2.number = 4;
System.out.println(c1.kind); // Heart
System.out.println(c1.number); // 7
System.out.println(c1.width); // 100
System.out.println(c1.height); // 250
System.out.println();
System.out.println(c2.kind); // Spade
System.out.println(c2.number); // 4
System.out.println(c2.width); // 100
System.out.println(c2.height); // 250
System.out.println();
// c1의 width = 50, height = 80 변경
c1.width = 50;
c1.height = 80;
System.out.println(c1.kind); // Heart
System.out.println(c1.number); // 7
System.out.println(c1.width); // 50
System.out.println(c1.height); // 80
System.out.println();
// c1과 c2는 클래스 변수를 공유하기 때문에 같이 바뀐다
System.out.println(c2.kind); // Spade
System.out.println(c2.number); // 4
System.out.println(c2.width); // 50
System.out.println(c2.height); // 80
}
}
'Java > 객체지향' 카테고리의 다른 글
return 문 (void => return 문 생략 가능) (0) | 2023.05.25 |
---|---|
메서드(method) (0) | 2023.05.25 |
선언 위치에 따른 변수의 종류 (0) | 2023.05.23 |
클래스의 정의 (0) | 2023.05.22 |
객체 배열 (0) | 2023.05.22 |