알버트의 개발하는 블로그

C 언어 / C++ 언어 제22강 클래스의 static (정적) 멤버 변수 본문

프로그래밍 언어/C & C++

C 언어 / C++ 언어 제22강 클래스의 static (정적) 멤버 변수

알버트 2021. 4. 30. 09:42

 

 

Static (정적) 멤버 변수란?

이번 시간에는 클래스의 멤버 변수 중에 하나인 static 멤버 변수에 대해서 알아보겠습니다.

클래스 멤버 변수는 크게 정적(static) 멤버 변수와 인스턴스 멤버 변수로 구분할 수 있습니다.

static이란 뜻은 '고정된'이란 뜻을 가지고 있습니다. 즉, 한번 선언되면 쭉 그 자리에 박혀있다는 뜻입니다.

정적 멤버 변수는 현재 클래스의 객체가 최초로 생성될 때 딱 1번만 메모리에 생성되고 초기화가 되고 그 자리에 쭉 고정되어 사용되어 집니다. 그래서 같은 클래스로 생성되는 모든 객체가 공유해서 사용할 수 있습니다. static 멤버변수와 다르게 인스턴스 멤버 변수는 현재 클래스로 생성되는 모든 객체에서 각각 독립된 메모리를 가집니다.

 

 

 


Static 멤버 변수 쓰는 법

자료형 클래스명::정적멤버변수명 = 초기치;

 

static 멤버변수를 선언하려면 클래스 내부에서 해야 합니다. 하지만, 초기화는 클래스 내부에서 할 수 없습니다.

클래스 내부에서는 선언만, 클래스 외부에서는 초기화를 해주어야 합니다. 클래스 내부에선 초기화를 시킬 수가 없습니다. 초기화 시키는 방법은, 자료형 클래스명::정적멤버변수명 = 초기치; 입니다.

 

 

 


Static 변수 예제

그럼 클래스를 선언하고 클래스 안에서 static 멤버변수를 선언하고 써보도록 하겠습니다.

대표사진 삭제

사진 설명을 입력하세요.

코딩을 이와 같이 해보았습니다. class로 Person을 만들고 static 멤버변수 count를 선언해주었습니다. 이 변수는 생성자 안에서 1씩 증가하여 no변수에 저장시켜 주었는데요. 결과를 확인하기 위해서 toString함수를 만들어서 출력해주었습니다. 여기서 우리가 주목해야 하는 변수은 바로 no입니다.

이제 메인함수에서 person1, person2, person4 객체를 만들어서 출력해보겠습니다.

static int count는 정적 멤버 변수이기 때문에 모든 객체가 공유하여 사용합니다.

person1의 no는 1이 출력될 것이고 person2는 1이 증가하므로 2가 출력될 것입니다.

그 다음에 person1.count의 값에 100을 넣어주었기 때문에 다음 객체를 생성하면 no는 101이 될 것입니다.

실행해보겠습니다.

 

대표사진 삭제

사진 설명을 입력하세요.

이처럼 첫줄에서는 1이 출력되고, 2번째 줄에서는 2가 출력됩니다.

그리고 마지막 줄에서는 101이 출력된 것을 알 수 있습니다.

 

 

이처럼 static 멤버 변수는 같은 클래스로 생성된 모든 객체가 메모리를 공유해서 같은 값을 쓰고 저장하기 때문에 아주 유용한 기능이라고 할 수 있겠습니다. 번호를 메기거나, 합계를 구하거나 할 때 아주 유용하게 쓰일 수가 있습니다. 읽어주셔서 감사합니다~