A. 전방 선언(Forward Declaration)
1. 전방 선언
a. 전방 선언이란?
🌟 컴파일러에게 식별자(함수, 클래스, 변수 등)가 미리 선언되어 있다고 알려주는 것
C++ 및 다른 프로그래밍 언어에서 사용되는 중요한 개념 중 하나
헤더 파일의 사용을 최소화하고 코드를 더 효율적으로 구성하는 데 도움
b. 전방 선언의 목적
- 순환 참조(Circular Dependency) 문제를 해결하고 헤더 파일의 의존성을 최소화하는 데 사용
- 컴파일 속도를 향상시키고 중복된 코드를 방지하는 데도 도움
- 특히 대규모 프로젝트에서 중요한 역할
👉 즉, 무거워지고 꼬이기때문에 사용하는 것
💥 순환 참조의 컴파일 오류
순환 참조는 서로에 대한 헤더 파일을 포함하거나 의존하는 경우 발생할 수 있으며,
이로 인해 컴파일 오류가 발생할 수 있음
2. 전방 선언의 종류
a. 함수의 전방선언
🌟 함수의 원형(Prototype)을 제공해 컴파일러가 함수가 어떤 매개변수를 받고 어떤 값을 반환하는지 알림
⏳ 예제 : 함수의 전방선언
// 전방선언
void myFunction(int param1, double param2);
int main() {
// 함수 호출
myFunction(42, 3.14);
return 0;
}
// 함수 정의
void myFunction(int param1, double param2) {
// 함수 내용
}
b. 클래스의 전방선언
🌟 클래스의 선언을 제공해 클래스의 멤버 함수 또는 멤버 변수를 정의하지 않고 클래스의 존재를 알림
1) 전방 선언을 해야할때
다른 클래스가 포인터로 관리되는 상황일 때
헤더에다가는 전방선언하고, cpp파일에 추가해주기!
2) 전방 선언이 안될때
- 멤버 변수로 들고 있거나 (메모리 크기를 가늠해야하기 때문에 정확히 알아야 함)
- 상속받고 있는 부모 클래스가 있을 때
- 다른 클래스의 멤버 변수를 수정할 때
⏳ 예제 : 클래스의 전방선언
// 전방선언
class MyClass;
int main() {
MyClass* myObject; // 포인터 선언 가능
return 0;
}
// 클래스 정의
class MyClass {
public:
void myMethod();
};
void MyClass::myMethod() {
// 멤버 함수 내용
}
💙 단 한 코드만 전방선언이 필요할 때
아래 그림과 같이 바로 전방선언을 코드에 넣을 수 있음
3. 실습 문제 수정
a. 인벤토리 실습
1) 문제 발견
아이템을 받을 인벤토리를 생성할 때 아이템을 배열로 받기 위해 Item.h를 포함시켰음
근데 이렇게 헤더파일에 헤더파일을 포함하는 것은 특히 순환참조가 발생할 수 있다
2) 전방 선언으로 해결
Item 클래스를 선언해줌으로서 굳이 필요하지 않은 내용을 받아오지 않고도 오류 없이 코드를 실행시킬 수 있음
하지만 직접적인 값이 꼭 필요한 cpp파일에서는 틀만 있으면 안됨
정확안 클래스의 형태가 있어야 함수를 호출하고 하기 때문에
cpp파일에서 #include "item.h" 코드를 추가시켜준다
'프로그래밍 언어 > C++' 카테고리의 다른 글
[게임 프로그래머 입문 올인원] 템플릿 문법 (52강) (0) | 2024.02.15 |
---|---|
[게임 프로그래머 입문 올인원] 동적할당과 캐스팅 : 버그 유형과 디버깅 연습/답안 (43, 44강) (2) | 2023.10.05 |
[게임 프로그래머 입문 올인원] 동적할당과 캐스팅 : C 스타일 캐스팅 과 캐스팅 4총사(37강, 42강) (1) | 2023.09.14 |
[게임 프로그래머 입문 올인원] 동적할당과 캐스팅 : 동적할당 기초 (35강) (0) | 2023.09.14 |
C++ OPP 3대요소 : 다형성 (0) | 2023.09.14 |