오늘 공부한 내용

 

정적 바인딩 vs 동적 바인딩

일반적인 C++ 함수 호출은 컴파일 타임에 결정됨

언리얼 엔진은 런타임에 동적으로 함수를 찾아 실행하는 리플렉션 시스템을 제공한다.

 

ProcessEvent의 역할

UFunction 메타데이터를 이용해 함수를 런타임에 호출하는 핵심 가상 함수

매개변수가 있다면 구조체 포인터로 묶어 두번째 인자로 넘겨준다

 

Stack 구조

LIFO 구조(Last-In First-Out): 나중에 들어온 데이터가 먼저 나감

 

// Main.c

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <assert.h>

// TODO


enum
{
	FALSE = 0,
	TRUE = 1,
	MAXCOUNT = 1024

};

struct Stack
{
	int Data[MAXCOUNT];

	size_t Top;
};

typedef struct Stack Stack_t;

void Push(Stack_t* InStack, int InData);

int IsEmpty(Stack_t* InStack);

int Pop(Stack_t* InStack);

void Print(Stack_t* InStack);

int main(void)
{
	Stack_t Stack = { 0, };

	printf("===== Test 1 : Empty Stack =====\n");
	printf("Expected IsEmpty: %d\n", TRUE);
	printf("Actual IsEmpty  : %d\n", IsEmpty(&Stack));

	printf("Expected Top    : 0\n");
	printf("Actual Top      : %zu\n", Stack.Top);
	Print(&Stack);
	printf("\n");

	printf("===== Test 2 : Push One Item =====\n");
	Push(&Stack, 10);

	printf("Expected Top    : 1\n");
	printf("Actual Top      : %zu\n", Stack.Top);

	printf("Expected Data[0]: 10\n");
	printf("Actual Data[0]  : %d\n", Stack.Data[0]);

	printf("Expected IsEmpty: %d\n", FALSE);
	printf("Actual IsEmpty  : %d\n", IsEmpty(&Stack));
	Print(&Stack);
	printf("\n");

	printf("===== Test 3 : Push Multiple Items / LIFO Check =====\n");
	Push(&Stack, 20);
	Push(&Stack, 30);

	printf("Expected Top Before Pop : 3\n");
	printf("Actual Top Before Pop   : %zu\n", Stack.Top);

	printf("Expected First Pop      : 30\n");
	printf("Actual First Pop        : %d\n", Pop(&Stack));

	printf("Expected Second Pop     : 20\n");
	printf("Actual Second Pop       : %d\n", Pop(&Stack));

	printf("Expected Third Pop      : 10\n");
	printf("Actual Third Pop        : %d\n", Pop(&Stack));

	printf("Expected Top After Pop  : 0\n");
	printf("Actual Top After Pop    : %zu\n", Stack.Top);
	Print(&Stack);

	printf("\n");

	printf("===== Test 4 : Pop On Empty Stack =====\n");
	printf("Expected IsEmpty: %d\n", TRUE);
	printf("Actual IsEmpty  : %d\n", IsEmpty(&Stack));

	printf("Expected Pop    : assert(FALSE)\n");
	printf("Actual Pop      : %d\n", Pop(&Stack));

	printf("Expected Top    : 0\n");
	printf("Actual Top      : %zu\n", Stack.Top);
	Print(&Stack);

	printf("\n");

	return 0;
}


void Push(Stack_t* InStack, int InData)
{
	if (MAXCOUNT <= InStack->Top)
	{
		assert(FALSE);
		return;
	}
	InStack->Data[InStack->Top] = InData;
	++InStack->Top;
}

int IsEmpty(Stack_t* InStack)
{
	if (InStack->Top == 0)
	{
		return TRUE;
	}

	return FALSE;
}

int Pop(Stack_t* InStack)
{
	
	if (IsEmpty(InStack) == TRUE)
	{
		assert(FALSE);
		return FALSE;
	}
	
	--InStack->Top;
	return InStack->Data[InStack->Top];
}


void Print(Stack_t* InStack)
{
	if (IsEmpty(InStack) == TRUE)
	{
		return;
	}

	for (int i = (int)InStack->Top - 1; i >= 0; --i)
	{
		printf("%d\n", InStack->Data[i]);
	}
}

'Unreal5 공부 > TIL' 카테고리의 다른 글

2026/08/07 TIL  (1) 2026.08.07
2026/08/04 TIL  (0) 2026.08.04
2026/07/21 TIL  (0) 2026.07.21
2026/07/20 TIL  (1) 2026.07.20
20206/07/13 TIL  (0) 2026.07.14

+ Recent posts