static과 객체- 정적멤버변수, 정적멤버함수

0.들어가기에 앞서
static 로 선언된 변수나 함수는 정적메모리 영역에 들어간다.
그렇기때문에 스택메모리와 전혀 상관없다!!!
이 말이 무슨말인지 모르겠다면... 메모리 영역 공부 다시하고 와야할듯!

1.정적멤버변수

class 안에서 static 정적멤버변수를 선언하면 외부에서  :: 범위연산자를 이용해서 초기화를 꼭 해줘야한다.
이유는 모든 객체가 공유하는 변수기 때문에 객체가 주체가 아니고 클래스가 주체이다.
그래서 또하나의 특징인 객체가 인스턴스화 되지않아도 호출하여 사용할수 있다.(객체가 생성되기 이전에 생성됨)
보통 파일을 나눠서 할 경우 cpp파일에 초기화하는게 좋다( 이유는 h파일은 두번 참조될수!도 있기때문)
 

2.정적멤버함수
정적멤버함수도 마찬가지로 객체를 호출하지않고 ::범위연산자만으로 클래스 이름만으로 호출이 가능하다.
그리고 추가적으로 객체이름으로 부르는것도 허용한다( C++컴파일러 )
정적멤버함수는 특정한 객체에 의해 호출되는 것이 아니므로 숨겨진 인수 this 가 전달되지 않는다.!!!!
이 특징때문에 정적멤버함수는 정적 멤버만 액세스할 수 있으며 일반 멤버(비정적멤버)는 참조할수 없다.




*정적멤버함수 사용*
1. 단 한 번만 해야 하는 전역 자원의 초기화
2. 읽기 전용 자원의 초기화
3. 모든 객체가 공유해야 하는 정보 관리

=>상기의 tip: 모든 Manager 클래스를 static으로 만들자!!! 

이 글을 공유하기

댓글

Designed by JB FACTORY