inline
Get 같은 경우 inline 해주는게 최적화에 좋다. 함수 호출을 안하도록 설정하는 것.
그러나 inline을 쓰면 함수가 아니라 코드 하나하나가 늘어나는 것이기 때문에 main 함수 크기가 커지고 실행파일이 커진다.
어차피 Compiler가 알아서 하지만 Forceinline 과 같은 키워드 사용 시 무조건 함수를 교체하기 때문에
잘 판단하여 사용하는 것이 좋다.
우리가 인터넷(네이버, 다음 등)을 접속하면 처음들어갈땐 느리지만 그 다음부턴 재접속해도 빠르다.
이는 캐시 영역을 사용하기 때문인데, 처음엔 이미지 등을 다운받느라 느리고 그 다음부터는 캐시 영역에 데이터가 있기 때문에 빠르게 볼 수 있는 것이다.
inline을 사용하면 함수를 함수 내 구문으로 사용하도록 대체하므로 캐시 영역을 사용하기 때문에 더욱 빠르게
작동한다.
언리얼 엔진에서는 INLINE으로 대문자로 보통 사용한다.
Line Trace(Unreal Engine)
우리가 Blue Print를 통해 사용했던 Line Trace는 광선 추적을 하는 기능이다.
그래서 By Channel을 통해 해당 광선과 닿은 Actor를 반환받는 것이다.
Single과 Muti 두가지 타입이 있는데. Single은 광선과 맞은 Actor 하나를, Muti는 광선과 맞은 Actor 여러개를 반환 받는 것이다.
switch/case문을 통한 확률구현
#include <iostream>
using namespace std;
srand(time(NULL));
int Persent = rand() % 10;
switch(Persent)
{
case 0:
cout << "10%확률입니다." << endl;
break;
case 1:
case 2:
case 3:
case 4:
cout << "40%확률입니다." << endl;
break;
case 5:
case 6:
case 7:
case 8:
case 9:
cout << "50%확률입니다." << endl;
break;
}
배열과 내부 인덱스를 통한 Monster 수 설정
#include <iostream>
using namespace std;
int StageMonsterCount[10] = {1, 1, 2, 2, 2, 3, 3, 5, 6, 6};
int Stage = 1;
for(int i = 0; i < StageMonsterCount[Stage]; ++i)
{
cout << "Monster Spawn" << endl;
}
기타
- 보통은 기획자분들이 Excel File로 내용을 전달해주고, 막내 개발자들이 이걸 Data Base로 보내는 일을 한다.
- 지난주 공부했던 override가 있는 경우 부모 클래스에 동일한 함수가 존재한다는 걸 알 수 있고, virtual이 있는 경우 내 자녀에게 동일한 함수가 있을 것이라 예상할 수 있다. 또한 virtual을 붙이는 순간 자녀, 부모 함수를 모두 가지고 있는 테이블이 생성된다. 그래서 virtual을 붙이면 자녀의 함수가 있는걸 알 수 있게 되고 자녀의 함수를 쓸 수 있게되는 것이다. 다만, 테이블에 자녀와 부모 모든 함수를 가지고 있기때문에 성능에 있어서 좋진 않다.
- 부모 class 형 pointer로 자녀 class의 객체를 가르키는 경우. 자녀 class에 구현된 함수를 사용하고 싶다면 형변환을 해줘야 한다.
class Perent
{
protected:
int X;
int Y;
public:
inline int GetX(){return X;}
inline int GetY(){return Y;}
Perent();
virtual ~Perent();
}
class Child : public Perent
{
public:
Child();
virtual ~Child();
void Move();
}
int main()
{
vector<Perent*> Friend;
Friend.push_back(new Child);
Friend.push_back(new Child);
Friend.push_back(new Child);
(dynamic_cast<Child*>(Friend[0])).Move();
}
위의 코드와 같이 dynamic_cast<자녀 class>(포인터 배열 내 자녀객체).자녀함수();로 사용한다.
사실 dynamic_cast를 사용하면 해당 객체의 메모리 size가 4byte 더 커진 걸 알 수 있는데 이는 RTTI가 추가되기 때문이다. 이를 부모에서 자녀로, 밑으로 캐스팅한다고하여 다운캐스팅이라고 한다.
* RTTI : Run Time Type Information
Run Time 중 Type 즉, 어떤 자료형인지 정보를 저장하는 것.
static_cast가 단순 형변환을 검사해서 가능하게 해줬다면, dynamic_cast는 부모 포인터에서 자녀 포인터로 형 변환할때 여러 자녀 class 중 정확한 class인지 확인해주는 것이다.
이때 <>안에 있는 자녀 class와 실제 data가 일치하지 않는경우 nullptr을 반환한다.
'C++ > 문법' 카테고리의 다른 글
C++ 기본문법(Const, Class) (0) | 2024.11.25 |
---|---|
File Input Output & Delta Time (0) | 2024.11.07 |
Class 와 Template (0) | 2024.10.31 |
C++ 기본 문법(문자열, 동적할당, 구조체) (2) | 2024.10.25 |
C++ 기본 문법(변수와 함수) (0) | 2024.10.23 |