03/25 TIL

김재혁·2025년 3월 25일

모의 면접준비 자료

Actor와 Component

Actor

  • 게임 내에서 직접 배치할 수 있는 독립적인 오브젝트로써 위치 회전 크기 같은 정보를 가지고 있으며 월드에서 다른 오브젝트와 상호작용을 할 수 있습니다.

Component

  • Component는 메쉬를 입히는 Static Mesh Component, 충돌 처리를 위한 Collision Component 등과 같이 Actor에 부가적인 기능을 추가하는 요소입니다.

  • Actor 클래스의 생성자에서 CreateDefaultSubobject<>() 함수를 사용해 Component를 생성하고, 생성된 Component를 Actor의 루트나 적절한 위치에 부착합니다. 예를 들어 캐릭터의 경우 기본 Capsule Component를 루트로 설정하고, 그 위에 메쉬나 카메라 Component를 추가합니다.

-> Scene Component가 있어야지 Root Component가 있을 수 있음.

Blueprint와 C++

Blueprint

  • Blueprint는 에디터 내에서 수정하고 결과를 바로 확인할 수 있어 반복 작업과 작업 속도 측면에서 유리하며, 프로그래밍 경험이 적은 디자이너나 아티스트도 쉽게 접근할 수 있습니다. 그러나 로직이 복잡해지면 가독성이 떨어지고, 인라인 최적화가 어려워 C++에 비해 성능이 다소 낮을 수 있습니다.

C++

  • C++은 네이티브 코드 기반으로 실행되어 최적화와 실행 속도 측면에서 강점을 가지며, 엔진의 깊은 부분까지 제어할 수 있습니다. 또한 버전 관리와 협업 측면에서도 유리하지만, 수정할 때마다 컴파일과 빌드 과정을 거쳐야 하므로 반복 테스트가 느리고 디버깅 난이도가 높다는 단점이 있습니다.

  • UI 이벤트, 간단한 게임플레이 로직, 이펙트 등은 Blueprint로 빠르게 구현할 수 있습니다. 물리 연산, 복잡한 AI, 네트워크 통신, 그리고 매 프레임 호출되는 핵심 로직은 C++로 구현하는 것이 좋습니다.

  • C++로 작성한 코드를 UFUNCTION과 UPROPERTY를 활용해 Blueprint에 노출시켜, 디자이너나 아티스트가 에디터 내에서 쉽게 조정할 수 있도록 하여 두 가지를 적절히 혼합해 사용하는 것이 좋습니다.

Tick

  • Tick 함수는 게임 내 오브젝트의 상태나 행동을 프레임 단위로 지속적으로 업데이트하는 역할을 합니다.

  • 컴퓨터마다 프레임률이 다르기 때문에 직전 프레임부터 현재프레임까지 걸린 시간(초)를 뜻하는 DeltaTime이라는 매개변수를 사용하여 일정한 시간 기반의 연산을 가능하게 해줍니다. 예를 들어, 캐릭터가 일정한 속도로 이동해야 한다면 ‘이동거리 = 속도 * DeltaTime’으로 계산하여 프레임 차이에 따른 영향을 최소화할 수 있습니다. 다만, Tick 함수는 매 프레임 호출되므로 필요할 때만 사용하거나 이벤트 기반이나 타이머를 활용하여 불필요한 성능 저하를 방지하는 것이 중요합니다.

포인터

  • 포인터는 데이터가 저장된 메모리의 주소를 저장하는 변수입니다. 쉽게 말해 데이터가 저장된 위치를 기억하는 변수라고 할 수 있습니다.

  • 포인터를 사용하면 데이터를 직접 복사하지않고 주소만 전달해 메모리 관리에 효율적입니다.

  • 포인터가 유효한지 확인하지 않으면 잘못된 메모리 주소에 접근하여 프로그램이 충돌할 수 있습니다. 따라서 항상 포인터 사용 전에 if (p != nullptr)와 같이 체크하는 것이 필수이고, 메모리 누수를 피하기 위해 알맞은 메모리 해제가 필요합니다

오버로딩 오버라이딩

오버로딩

  • 같은 이름의 함수를 매개변수의 종류나 개수를 다르게 여러 개 만드는 것입니다

  • 컴파일 시 인자에 따라 호출되는 함수가 결정됩니다.

오버라이딩

  • 상속 관계에서 부모 클래스의 가상 함수를 자식 클래스에서 재정의 하는 것입니다.

  • 런타임때에 객체의 실제 타입에 따라서 호출됩니다.

  • override 키워드를 사용하면 부모 클래스의 가상 함수와 시그니처가 정확히 일치하지 않을 경우 컴파일러가 오류를 발생시켜 실수를 방지할 수 있습니다.

  • 언리얼의 예로는 BeginPlay()와 Tick()등이 있습니다.

템플릿

  • 데이터 타입에 관계없이 하나의 코드를 여러 타입에 대하여 재사용 할 수 있게 하는 기능입니다.

  • 코드 중복을 줄이고 재사용성이 높지만 컴파일 시간이 늘어나고, 템플릿 관련 오류 메세지가 복잡해져 디버깅일 어려워 질 수있다는 단점이 있습니다.

STL

  • C++에서 제공하는 미리 구현된 자료구조와 알고리즘 모음입니다.

  • 언리얼 엔진은 STL과 유사한 역할을 하는 TArray와 TMap 등의 자체 컨테이너를 제공합니다. 이들은 엔진의 메모리 관리, 가비지 컬렉션, 리플렉션 등과 잘 통합되어 있어 엔진 내부 작업에 최적화되어 있습니다.

  • TArray -> 동적 배열 컨테이너로써 여러 데이터를 순서대로 저장하며 필요한 경우 크기를 조절 할 수 있습니다.

  • TMap -> 키와 값을 쌍으로 저장하는 연관 컨테이너로써 특정 키를 통해 해당하는 값을 빠르게 찾아올 수 있습니다.

0개의 댓글