본문 바로가기

C++

[19] 정적 멤버

728x90

멤버와 객체

클래스의 멤버는 객체를 생성한 후에 각 객체의 멤버에 접근을 할 수 있습니다. 이렇게 객체와 멤버가 연결되어있는 상태를 "클래스 00에 연결되었다."라고 합니다.

반면, 객체를 생성하지 않고도 이용할 수 있는 멤버가 있는데 이를 "클래스 전체에 연결되었다."라고 합니다.

클래스 전체에 연결된 멤버는 특징을 하나 갖고 있습니다.

그 특징은 아래에서 알아보도록 하겠습니다.

 

정적 멤버

클래스 전체에 연결된 멤버를 말합니다. 사용할 때는 앞에 static(기억 클래스 지정자)을 붙여서 사용합니다.

 

정적 데이터 멤버 초기화

정적 데이터 멤버를 초기화하기 위해서 모든 함수와 클래스의 바깥에 위와 같이 적습니다. 어떤 타입이고, 어느 클래스의 멤버인지 컴파일러에게 알려줍니다.

정적 데이터 멤버는 모든 객체들이 공통적으로 접근해야 하는 데이터를 저장합니다.

이런 구조는 마치 "싱글톤"디자인 패턴과 굉장히 유사한 느낌이 듭니다.

 

정적 멤버 함수 호출

정적 멤버 함수는 객체의 생성 여부에 관계없이 호출을 할 수 있기 때문에 일반적인 멤버 함수와 다른 방법으로 호출합니다.

생성자를 통해서 객체가 생성될 때마다 수를 증가시키면서 정적 멤버 함수를 호출하면

이렇게 전체 객체의 수를 관리할 수 있는 구조를 만들 수 있습니다.

 

정적 멤버 함수 사용시 주의점

정적 멤버는 특정 클래스에 연결되어 있지 않습니다. 즉, 각 객체의 멤버에는 접근을 할 수 없습니다.

따라서, 정적 멤버 함수에서 정적 데이터 멤버가 아닌 일반 데이터 멤버에 접근을 하려고 할 경우에는 에러가 발생합니다.

static이 아닌 멤버에 접근하려고 했을때 에러가 발생

그러므로, 정적 멤버 함수에서 클래스의 일반 멤버에 접근하지 않도록 주의합시다.

728x90

'C++' 카테고리의 다른 글

[21] 가상함수  (0) 2021.05.06
[20] 상속  (0) 2021.05.06
[18] 생성자  (0) 2021.05.03
[17] 인수와 객체  (0) 2021.05.02
[16] 접근 제한  (0) 2021.05.02