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 클래스를 선언해줌으로서 굳이 필요하지 않은 내용을 받아오지 않고도 오류 없이 코드를 실행시킬 수 있음