위의 카드를 객체라고 생각하는 경우,
카드 객체의 속성을 숫자, 무늬, 카드의 폭, 높이로 나눌 수 있다.
이때 카드가 가지는 개별값과 공통값을 나눠보면
객체의 속성중 개별적인 속성값은 인스턴스 변수로 사용되고,
공통적인 속성값은 클래스 변수로 사용된다.
class Card {
String kind; // 무늬
int number; // 숫자
static int width; // 폭
static int height; // 높이
}
위와 같은 Card class 사용시,
클래스 변수는 클래스명.변수명
으로 사용하는 방식을 권장한다.
Card c = new Card(); // 객체생성
/* 인스턴스 변수 */
c.kind = "Heart";
c.number = 5;
/* 클래스 변수 */
Card.width = 200;
Card.height = 300;
클래스 변수를 아래와 같이 표현하는 경우,
c.width = 200; c.height = 300;
인스턴스 변수로 오해할 수 있기 때문에 클래스 변수는
클래스명.변수명
으로 사용하는것이 좋다.
아래와 같이 인스턴스 변수(iv)는 객체마다 생성이 되고,
클래스 변수(cv)는 다른공간에 1개만 생성되어 공유된다.
⇒ 같은 값이 중복 저장되면 메모리 낭비일 뿐!
또한 클래스 변수(cv)는 클래스가 메모리에 올라가는 시점에 자동으로 생성되기 때문에 객체를 생성하지 않아도 사용이 가능하다
출력결과 ➡️
클래스 변수값 변경시 생성된 모든 인스턴스 변수는 클래스 변수값을 공유하므로 동일하게 변경된 값이 출력된다.
출력결과 ➡️