스태틱 in 클래스, static의 클래스 안에서의 쓰임

보물창고·2021년 7월 26일
0
post-thumbnail
  • 코드 없는 프로그래밍 강의를 공부하고 정리한 내용입니다.

1. static 멤버 함수


이것이 가능한 이유는 오브젝트와 연관이 되어있지 않기 때문이다.
클래스의 this라는 키워드는 오브젝트의 주소를 가리킨다.
하지만 static 멤버 함수는 this와 바인딩이 되어 있지 않기 때문에 오브젝트를 생성하지 않아도 콜이 되는 것이다.

당연히 this에 접근이 불가능하므로 해당 클래스의 멤버 변수, 함수도 가리킬수 없다.

  • 클래스의 멤버 함수나 멤버 변수들은 this라는 오브젝트의 주소를 통해서 콜을 하게 되는데 static은 클래스와 바인딩되지 않으므로 클래스의 멤버들을 콜 및 참조가 불가능하다.

  • 오브젝트로 호출은 가능하다.
    메모리에 저장되는 영역만 다르지 어쨋든 StaticSpeak 함수는 클래스의 멤버함수이기 때문에

2. Static 멤버 변수

  • Static 멤버 변수는 전역변수이므로 외부에서 초기화를 해야한다.
  • 클래스의 멤버 함수에서 static 변수 참조는 가능하다. 어쨋든 멤버변수니까
  • 각 오브젝트의 멤버인데 값이 누적되는 이유는 static 변수는 오브젝트의 공간에 있지않고, static의 전역 공간에 할당되어 있기 때문이다.

  • 하지만 외부에서 아무렇게나 접근이 가능하다는 단점이 있다.

  • 방지하기 위해서는 static 멤버 변수를 클래스의 private으로 옮기자.
    -> 현재 static인 cnt 변수는 오직 speak라는 함수에서만 사용되므로 멤버 변수로 가질 필요 없이, 함수 내부에 선언하는 것이 좋다.

-> 이렇게 변경하면, 외부에서 초기화 한것을 함수내에서 초기화를 해야된다. 왜냐하면 class의 멤버 변수가 아니므로

-> static 변수가 함수 내부에 있지만, 함수가 호출될때 할당되는 것이 아니다. 여전히 전역변수이므로 프로세스 생성과 동시에 할당이 되지만 생성 순서에는 차이가 잇다.

3. static 에 const나 constexpr 이 붙여지면 선언과 동시에 초기화가 가능하다.

profile
🔥🔥🔥

0개의 댓글