OOP - Class Member Variable(클래스 멤버 변수)
오늘은 전에 적었던 글에서 언급한 내용인 클래스 변수와 인스턴스 변수에 대해 알아보도록 할 것이다.
https://smilefactory.tistory.com/22
OOP - 생성자(Constructor)
지난 OOP를 주제로 작성한 글에서 클래스의 구성요소에 대해 나열하였다. https://smilefactory.tistory.com/21 Class(클래스)와 Object(객체) 오늘은 OOP의 기본적인 내용인 클래스와 객체에 대해 기록해놓을
smilefactory.tistory.com
그럼 일단 클래스의 멤버종류는 3가지로 나눌수있다.
- 멤버 변수
- 멤버 메서드
- 생성자
이 중 1번에 해당하는 멤버 변수에 관한 내용을 남겨볼까 한다. 그럼 바로 시작해보도록 하자!

멤버 변수도 마찬가지로 2가지로 나눠볼 수 있다.
- 클래스 변수
- 인스턴스 변수
위 두가지로 나눠볼 수 있는데 쉽게 정리를 해보자면
클래스 변수는 클래스가 선언될때 생성되는 변수, 인스턴스 변수는 객체가 생성될때 만들어지는 변수로 서로 각각 다른 속성을 띄고 있다. 바로 두 변수에 대한 접근 방식과 적용 범위가 다르다는 것이다.
1. 접근 방식
클래스 변수에 접근하려면 해당 클래스의 이름을 통해 접근을 해야하고 인스턴스 변수는 해당 객체의 메모리 주소값으로 접근해야 한다. 이 차이점을 통해서 거대한 프로젝트의 클래스 변수와 인스턴스 변수를 간단하게 구분 할 수 있겠다는 생각이 문득들었다.(과연 이 내용을 유용하게 사용 할 일이 있을까 싶기도하다.)
2. 적용범위
클래스 변수의 적용 범위는 해당 클래스를 이용해 만들어진 객체들이 서로 공유한다. 즉, 모든 객체에서 사용할 수 있다. 인스턴스 변수의 적용 범위는 해당 객체 내에서만 사용 할 수 있다.
따라서, 클래스를 이용해 만들어진 각각의 객체들의 공통적인 사항을 클래스 변수로 설정하면 될것이고, 각 객체마다 다르게 설정해야하는 부분이 있다면 인스턴스 변수로 설정하면 될것이다.
※ 참고로 인스턴스 변수는 효율성을 위해 왠만하면 생성자로 생성 해주자
그럼 위와같은 개념들이 대체 어떻게, 어디에서 사용이 되는지 예시를 들어보면 이해하는데에 조금 도움이 될것이다.
전 글에서 사용했던 코드를 다시 가져와봤다. 저번글에서는 생성자를 포함한 코드의 전반적인 흐름을 설명하였는데 이번에는 클래스 변수와 인스턴스 변수의 속성을 중점적으로 다뤄볼것이다.(파란색 큰 박스는 참고만 하시면 될거같다.)
첫번째로 파란색 작은박스안에 적힌 코드를 보면 생성된 객체의 메모리 주소값으로 접근하여 인스턴스 변수를 생성했다.
두번째로 빨간색 박스안에 적힌 코드를 보면 클래스의 이름을 통해 클래스 변수에 접근하였다.
위에서 언급했던 변수에 대한 접근방식이 다르다는 말이 이에 해당하는 내용이다.
이제 하얀색 박스에 해당하는 코드가 실행되면 어떤일이 발생하는지 순서에 맞게 살펴보자
- Foo 클래스를 이용해 obj1이라는 객체를 생성
- 객체를 생성할 때 생성자가 실행되고 이에대한 매개변수는 'hjs'가 된다.
- obj1이라는 객체에 myName이라는 인스턴스 변수를 만들고 해당 생성자의 argName('hjs')이라는 매개변수값을 대입한다.
- obj1이라는 객체에 myId라는 인스턴스 변수를 만들고 Foo 클래스의 id변수에 1을 더한값을 대입한다.
- Foo클래스의 id변수에 1을더한다.
이 정도로 정리해볼 수 있다.
그럼 위 과정을 진행한 뒤 obj2라는 객체를 생성하기 전, Foo클래스의 id라는변수의 값은 몇이 되는가? 답은 '1'이다.
객체가 생성될때마다 번호가 1씩 증가해야하는 상황에서 생성자에 1씩 더하는 코드를 작성하여 모든 객체들이 해당값을 공유하고 그 값을 받아와서 사용하게 된다. 이에 해당하는 내용은 위에 언급한 '각각의 객체들이 공통적으로 사용하는 부분을 클래스 변수, 각 객체마다 고유의 값을 가지는부분을 인스턴스 변수로 설정한다'는 내용이 담겨있는 예시이다.
일단 클래스 변수의 종류에 대한 내용은 여기까지 기록할것이다.
다음은 멤버 메서드에 대해서 다뤄볼 예정이다.
글을 막상 다시 읽어보니 두서없이 적은 느낌이 매우 강하게 들고, 처음보는 사람들은 이해하기 매우 어려울 것으로 생각된다. 모든 과정을 일일히 다 적으려고 하다보니 이렇게 된거같다. 슬슬 머리에 과부하가 오는듯하다. ㅠㅠ
