전방 선언
전방 선언이 왜 필요할까?
우리가 어떤 클래스를 스텍이나 힙 등에 메모리에 할당하기 위해서는 그 클래스의 size를 알아야 메모리에 할당이 가능하다.
그런데 그 클래스안에 다른 클래스를 멤버 변수로 들고 있다고 해보자.
그러면 그 클래스의 size를 알 수 있을까??? 알수 없다. 예를 들어 Player 파일과 Monster 파일 그리고 Main 파일이 있고 Player 클래스 안에 Monster 라는 멤버 변수를 가지고 있다고 해보자. 그리고 우리가 어떤 함수에서 Player * p = new Player; 를 통해 동적할당을 하면 에러가 날 것이다.
그 이유는 Player의 정확한 size를 모르기 때문이다. 왜 모를까? Monster라는 클래스의 size를 건네 받지 못했기 때문이다.
이 문제를 해결하려면 Player.h 파일에 #include "Monster.h"를 통해 Monster 클래스의 존재 및 사이즈를 알려줘야 할 것이다.
그런데 만약 Monste라는 멤버 변수를 포인터로 가지고 있다고 해보자. 그러면 #include "Monster.h"를 통해 Monster 클래스의 존재 및 사이즈를 알려주지 않아도 Main에서 Player의 정확한 size를 알 수 있다. 그 이유는 포인터는 64비트 환경에서는 8바이트로 선언 되기 때문에 size를 알 수 있다.
그렇기 때문에 Player 파일에서 일단 Monster 라는 클래스의 존재만 알려주면 되는 것이다. 즉 class Monster; 라는 걸 선언해서 존재만 알려주게 되는 것이다.
'C++ > 기초' 카테고리의 다른 글
[C++] 함수 포인터 (0) | 2023.12.01 |
---|---|
[C++] C++의 위험성과 메모리 관리의 위험성 (3) | 2023.11.29 |
[C++] 복사, cast (0) | 2023.11.28 |
[C++] 타입 변환 - 2 (1) | 2023.11.28 |
[C++] 타입 변환 - 1 (0) | 2023.11.28 |