[Java] 클래스 변수와 인스턴스 변수

Yeoonnii·2023년 1월 28일
0

Java

목록 보기
20/30
post-thumbnail

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

위의 카드를 객체라고 생각하는 경우,
카드 객체의 속성을 숫자, 무늬, 카드의 폭, 높이로 나눌 수 있다.


이때 카드가 가지는 개별값과 공통값을 나눠보면

  • 개별값 : 숫자와 무늬는 객체마다 다르게 유지되어야 한다
  • 공통값 : 카드의 폭, 높이는 모든 카드가 동일해야한다

객체의 속성중 개별적인 속성값인스턴스 변수로 사용되고,
공통적인 속성값클래스 변수로 사용된다.



클래스 변수와 인스턴스 변수 사용하기

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)는 클래스가 메모리에 올라가는 시점에 자동으로 생성되기 때문에 객체를 생성하지 않아도 사용이 가능하다

출력결과 ➡️

클래스 변수의 값을 변경하는 경우

클래스 변수값 변경시 생성된 모든 인스턴스 변수는 클래스 변수값을 공유하므로 동일하게 변경된 값이 출력된다.

출력결과 ➡️

0개의 댓글