Notice
Recent Posts
Recent Comments
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

충분히 쌓여가는

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

Java/객체지향

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

빌드이너프 2023. 5. 24. 21:23

인스턴스 변수(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