언리얼 공부/C++

순수가상함수, 추상클래스 그리고 인스턴스

jeongchanhyo 2025. 2. 20. 20:50

이 글을 적는 이유는 혼자서 비주얼 스튜디오에서 할 때에는 오류가 걸리지 않는 부분이라고 생각했던 게 언리얼에서 오류에 걸려 왜 걸리는지 이해를 못해 찾아보는데 시간을 많이 써서 적게되었다...

순수 가상 함수

virtual키워드와 =0으로 선언하는데

virtual void func() = 0;

추상클래스를 정의하는 데 사용되며, 반드시 파생되는 자식클래스에서 구현을 해야한다.

이런 개념인데 말 그대로 절대로 빼먹으면 안되는 그런 함수를 포함할 때 사용된다.

 

추상클래스

순수 가상함수를 최소 하나 포함한 클래스다.

일반 메서드와 멤버 변수를 포함할 수 있다.

class Gun 
{  
public:  
    virtual void func() = 0 // 순수가상함수  
};

이런식으로 되면 이 클래스는 추상클래스가 되는것이다.

 

추상클래스는 왜 인스턴스화가 되지 않을까?

그 이유는 "순수가상함수"의 존재 때문인데 이 함수 자체가 완전하지 않고 선언만 된 함수이기 때문이다.

virtual void func() = 0; // 구현 X

클래스에 순수가상함수가 하나라도 있으면 추상클래스가 되며, 객체 생성 시 이 함수를 호출할 수 없기 때문에 컴파일러가 차단을 하게됩니다.

그렇지만 나는 이 룰을 어기지 않았지만 빌드가 안되고 컴파일러차원의 보호를 받았다.

왜 그랬을까?

언리얼엔진의 특성

언리얼엔진은 UObject의 상속을 받는 클래스들은 전부 빌드 시에 한번씩 인스턴스화 한다.

이거 하나를 몰랐어서 나는 내가 잘못한줄알고 개념공부부터 다시 하면서 엄한거 건드려보고, 간단한것도 이해 못하는 멍청이라고 생각을 했지만 사실 그런게 아니였다.

그리고 이걸 기회로 삼아 개념공부를 한번 더 하며 점검했기 때문에 오히려 좋다! 오늘도 하나 배웠다!

'언리얼 공부 > C++' 카테고리의 다른 글

총알만들기  (0) 2025.02.27
총 만들기  (0) 2025.02.25
플로우 차트  (0) 2025.02.18
FPS무기 구조 생각  (0) 2025.02.17
일정 주기로 나왔다 사라지는 발판  (0) 2025.02.04