본문 바로가기

JAVA 프로그래밍/공부

객체 변수와 클래스 변수의 차이점


객체와 클래스의 차이점을 알고 계신다면 쉽게
이해할 수 있습니다.

클래스는 객체를 만들기 위한 "형틀"과 같은 것입니다.
붕어빵 만들기를 예로 들자면 붕어빵 모양의
기계가 클래스이고 그 기계로 만들어낸 실제
붕어빵이 객체라고 할 수 있죠.

다른 예로는 사람이 클래스라면 ineedyou84님은 사람 클래스에
속하는 실제로 존재하는 객체라고 할 수 있습니다.

각 사람들은 이름, 키, 몸무게, 생김새 등 사람이라면 가지고 있는
공통적인 속성을 가지고 있습니다. 그런데, 개별 사람들마다
그 값은 다릅니다. 님의 이름은 ineedyou84이지만,
저의 이름은 chul7416입니다.

이러한 사실을 클래스 변수와 객체 변수에 적용시켜 봅시다.

일단 객체 변수는 개별 사람들의 이름이라고 생각하시면 됩니다.
당연히 객체마다 다른 값을 갖게 될 것입니다.

그렇다면 클래스 변수는 어떤 것일까요?

클래스 변수의 개념을 이해하기 위해 지구상에
존재하는 모든 사람의 수를 관리한다고 합시다.

먼저, 이 값을 객체 변수로 관리하는 경우를 생각해 보죠.
위에서 언급하였던, 사람의 속성에 "총사람수"라는
속성을 추가한다고 합시다. 이 경우 모든 객체가 "총사람수"라는
값을 가지게 되고, 그 값은 동일한 값을 가지고
있어야 할 것입니다. 그런데, 새로운 객체가 생성될 때마다
"총사람수"의 값은 변경되어야 할 것입니다. 다시 말해서,
새로운 객체가 생성될 때마다 모든 객체의 "총사람수" 값을
업데이트해야 하는 것입니다. 여간 번거로운 일이 아닐 수 없습니다.

만약, "총사람수"와 같이 모든 객체들이 공유할 가능성이 있는
속성을 한 곳에서 관리할 수 있다면, 참 편리할 것입니다.

여기에서 클래스 변수의 필요성이 대두됩니다.

클래스 변수는 클래스 수준에서 정의됩니다. 클래스 변수는
클래스에서 관리됩니다. 이 클래스는 오직 하나만 존재합니다.
객체들이 여럿 존재하는 것이죠. 새로운 객체가 만들어지면
새롭게 만들어지는 객체는 간단히 클래스 변수인 "총사람수"를
하나 증가시켜 줍니다. 클래스 변수는 모든 객체들이 동일하게
참조하는 것이므로 다른 객체들은 정확한 "총사람수"를
클래스 변수를 보고 알 수 있습니다.


자, 지금까지 이야기한 시나리오를 간단히 클래스로 작성해 볼까요?

public class Person {
    public static int total = 0;

    public Person() {
        // Person 객체가 새롭게 생성될 때 "총사람수"를 하나 증가시켜
        // 줍니다.
        Person.total++;
    }

    // 총 사람수를 출력합니다.
    public void showTotal() {
        System.out.println("Total: " + Person.total);
    }
}

위의 클래스로 다음과 같은 일을 수행해 봅시다.

Person someone = new Person();
Person someone2 = new Person();
Person someone3 = new Person();

someone.showTotal();
someone2.showTotal();
someone3.showTotal();

출력값은 아마도 다음과 같을 것입니다.

Total: 3
Total: 3
Total: 3

이해가 좀 되시는지요? 간단히 생각나는대로 설명해 보았습니다.
이와 관련된 다른 많은 이야기들도 있으니 한번 찾아보시기 바랍니다.

참고로 자바에서는 클래스 조차도 객체화되어 관리됩니다.
Person.class라고 하면 Person 클래스에 대한 정보를 담은
Class 객체가 생성되어 반환됩니다.

Reflection과 같은 주제에 대해 공부를 해보는 것도 재미있을 겁니다.

그럼, 공부 열심히 하시구요.

출처 : http://kin.naver.com/detail/detail.php?d1id=1&dir_id=10106&docid=560305&qb=6rCd7LK0IOuzgOyImOyZgCDtgbTrnpjsiqQg67OA7IiY&enc=utf8&section=kin&rank=1&sort=0&spq=0&pid=fwg2qz331xlssurxS8Kssv--187997&sid=SwTxuHHfBEsAAFgOGAw