Game Develop

[UE5] 인터페이스였던것을 추상클래스로 바꾸려다가 다시 인터페이스로한것에 대하여 본문

UnrealEngine5/이것저것

[UE5] 인터페이스였던것을 추상클래스로 바꾸려다가 다시 인터페이스로한것에 대하여

MaxLevel 2024. 1. 24. 04:23

 

ActorPool로 관리할 액터들에게 PoolableActor라는 인터페이스를 상속시켰었다.

해당 인터페이스에는 m_bIsActive, 즉 활성화여부를 따지는 bool변수 딱 하나만 있었다.

아무생각없이 그렇게 하다가, 인터페이스 관련 글을 보다보니 원래 객체지향설계에서 인터페이스에는 멤버변수가 없는게 정설이라고들 하더라...

원시타입인 bool 하나라서 괜찮지 않을까? 싶다가도, 후에 특정 액터클래스에도 같은 변수명이 있을수도 있는, 즉 겹칠수도 있는 상황이 있을수도 있단다.

 

생각해보니 말이 된다. 물론, 현제 내가 아는 영역에서는 활성화여부란 액터풀에 관련된 활성화여부밖에 없지만, 그건 취준생의 생각일 뿐이다.

그래서 언리얼 인터페이스가 아니라 그냥 추상클래스로 바꾸려고 여러 시도를 했다. 거의 인터페이스에 가까운 추상클래스이긴 한데, 어쨌든..

 

근데 결국 다시 인터페이스로 만들었다. 즉, 추상클래스라 생각하긴 하는데 현재 내가 아는한, 언리얼구조상 빈 추상클래스로 사용하려면 일단 언리얼인터페이스를 상속받은 클래스로 만들어야 한다... 자연히 접두사 'I' 가 붙어서 굉장히 찝찝하지만, 어쩔 수 없는 것 같다.

 

아무것도 상속받지않는 C++클래스로 해버리면 엔진이 인식을 못한다. 그냥 class에 상속시키는거까지는 에러를 발생시키지 않는데, 후에 액터풀에서 형변환시키면 에러가 뜬다. 정확히 뭐라하는지 기억은 안난다만, 결론적으론 찾지를 못하는 것 같았다.

 

그래서... 결국 다시 원래대로 돌아와서 인터페이스로 만들고 기존코드 그대로 다시 복붙했다.

참 별거없는 과정같은데, 이 과정에서 많은 고민들과 시간이 들어갔다는게 참 아깝기도하고.. 어차피 했어야할 고민들이기도 한 것 같다. 경험상, 지금 걍 지나가더라도 결국 다시 마주하게 되기 때문이다.

 

사실 이런 시간들이 아까운게 아니라, 바로바로 진행 안되고 고민하다보면, 고민하다가 결국 딴짓하는게 문제..

 

참고로 혹시나 그냥 Actor같은거 상속받아서 하면 되지 않느냐? 라는 질문을 한다면, 당연히 안된다. (이미 해봤기도 하고..)

상속시킬 액터자체도 Actor클래스를 상속받았기 때문에, 상속구조가 다이아몬드형태가 된다. 즉 하나의 클래스가 Actor를 중복상속받게되서 Actor에 있는 멤버변수들에 대해 모호하다는 에러가 쏟아진다.

중복상속이더라도 그걸 없애주는 키워드가 있긴 한데, 그렇게까지 할필요 없이 그냥 언리얼인터페이스를 추상클래스처럼 사용하는게 맞는 것 같다.

 

하루하루 그냥 알고리즘문제나 기술면접대비관련된것만 하다보니 언리얼을 자꾸 안하다가 (딴짓하느라..) 좀 본격적으로 시동을 걸어보려 한다.

 

그리고 비쥬얼스튜디오2019를 원래 IDE로 사용했는데, 최근 라이더를 30일무료를 사용하고 있다.

비쥬얼스튜디오2019야 당연히 훌륭한 IDE지만, 인덱싱이 좀 느려서 많이 답답했었다.

라이더는 꽤 빠른편이라고 해서 한번 사용중인데 확실히 더 빠르긴 하다.

근데 메모리를 확~실하게 더 많이 사용하긴 해서.. 이기회에 랩 8,8짜리를 사서 총 16기가를 증설했다.

기존에 16기가였는데, 언리얼이랑 비쥬얼스튜디오 켜져있는 상태에서 크롬탭 몇개 좀 열려있으면 반응속도가 살살 느리다가, 시간이 좀 많이? 지나면 컴퓨터자체가 엄청 버벅였다. 종국에는 아예 멈추는 단계까지 이뤄서 그냥 꺼버리고 다음날 사용해야했다.

 

지금은 증설해서 총 32기가인데 상당히 체감된다. CPU사용률도 상당히 적게 나온다.

확실하게 알아본 건 아니지만, 램이 적으면 하드랑 페이지스왑을 자주해야하니 CPU사용률이 더 많이 나오는게 아닐까.. 생각한다. 그래서 램이 여유로우면 CPU사용률이 좀 적고..