팀프로젝트는 현재 거의 완료 되어서 내일 정리해서 올릴예정.
팀프로젝트 (Text RPG 거의 완료) | AI 통한 기본 개념 정리 및 문제 풀이 | 코드카타 (두개 뽑아서 더하기 & K번째수)
AI 통한 기본 개념 정리 및 문제풀이
개념 정리
- 언리얼 C++ 빌드 프로세스 이해
- 라이브 코딩은 에디터를 실행한 상태에서 코드 변경사항을 반영할 수 있는 편리한 기능이지만, 모든 변경사항을 완벽하게 지원하지는 않습니다. 클래스 구조의 큰 변경이나 헤더 파일의 일부 변경사항은 에디터 재시작이 필요할 수 있습니다. A, B, D는 모두 라이브 코딩의 올바른 특징입니다.
- 컴파일 단계는 사람이 작성한 C++ 소스 코드(.cpp 파일)를 컴퓨터가 이해할 수 있는 기계어 형태의 오브젝트 파일(.obj)로 변환하는 과정
- 링크 (Link) 단계
- 여러 오브젝트 파일을 하나의 실행 파일로 결합한다
- 외부 라이브러리의 함수 주소를 연결한다
- 최종 실행 파일(.exe 또는 .dll)을 생성한다
- Unresolved External Symbol 오류는 링크 단계에서 발생하는 대표적인 오류로, 선언은 되어 있지만 정의(구현)를 찾을 수 없을 때 발생.
- Actor 생명주기와 컴포넌트 구조 이해
- Actor의 생명주기는 Constructor(생성자) → BeginPlay(게임 시작 시 호출) → Tick(매 프레임마다 호출) → EndPlay(소멸 시 호출) 순서로 진행됩니다. Constructor는 Actor가 메모리에 생성될 때 가장 먼저 호출되고, BeginPlay는 게임이 시작되거나 Actor가 스폰될 때 호출되며, Tick은 게임 실행 중 반복 호출되고, EndPlay는 Actor가 제거될 때 마지막으로 호출됩니다.
- BeginPlay는 게임이 시작되거나 Actor가 런타임에 스폰될 때 단 한 번만 호출되는 함수입니다. 매 프레임마다 반복적으로 호출되는 함수는 Tick 함수입니다. BeginPlay는 초기화 작업을 수행하기에 적합하며, 모든 컴포넌트가 준비된 상태에서 호출되므로 안전하게 컴포넌트에 접근할 수 있습니다.
- DeltaTime은 이전 프레임과 현재 프레임 사이에 경과한 시간(초 단위)을 나타냅니다. 이 값을 사용하면 프레임률에 관계없이 일정한 속도로 객체를 움직이거나 변화시킬 수 있습니다. 예를 들어 이동 속도에 DeltaTime을 곱하면 프레임률이 다르더라도 동일한 속도로 이동하게 됩니다. 이는 프레임 독립적인 게임플레이를 구현하는 데 필수적입니다.
- 언리얼 리플렉션 시스템 이해
- 언리얼 엔진의 **리플렉션 시스템(Reflection System)**은 프로그램이 실행(런타임) 중에 자신의 구조, 즉 클래스, 변수, 함수, 속성 등의 메타데이터를 스스로 조사하고 조작할 수 있게 해주는 기능
- 기본 C++ 언어는 리플렉션 기능을 지원하지 않지만, 언리얼 엔진은 자체적인 **프로퍼티 시스템(Property System)**을 통해 이를 구현합니다. UCLASS, UPROPERTY, UFUNCTION 같은 매크로를 사용해 C++ 코드를 작성하면, 빌드 시 **언리얼 헤더 툴(UHT, Unreal Header Tool)**이 해당 정보를 분석하여 객체의 메타데이터를 생성합니다.
- 에디터 통합 (디테일 패널): C++에 선언한 변수(UPROPERTY)를 언리얼 에디터의 속성 창에 자동으로 노출시키고 편집할 수 있게 합니다.
- 블루프린트 연동: C++로 작성한 함수(UFUNCTION)나 변수를 블루프린트에서 노드로 가져와 사용할 수 있도록 연결해 줍니다.
- 가비지 컬렉션 (GC): 메모리에 할당된 객체들의 참조 상태를 추적하여 더 이상 사용하지 않는 객체를 자동으로 해제합니다.
- 네트워크 리플리케이션(복제): 멀티플레이어 게임에서 서버의 변수 상태를 클라이언트로 동기화할 때 객체의 속성 정보를 활용합니다.
- 직렬화 (Serialization): 객체의 데이터를 저장(저장 및 로드)하거나 불러올 때 클래스 구조를 파악하여 데이터를 읽고 씁니다.
- UCLASS(): 언리얼 엔진이 해당 클래스를 인식하고 메타데이터를 생성하도록 지시합니다.
- UPROPERTY(): 변수를 엔진에 등록하여 가비지 컬렉션의 대상이 되거나, 블루프린트 에디터에 노출시킵니다.
- UFUNCTION(): C++ 함수를 엔진(블루프린트 등)에서 호출할 수 있는 이벤트나 함수로 등록합니다.
- 리플렉션 시스템은 UPROPERTY, UFUNCTION 등의 매크로를 명시적으로 사용한 멤버에만 적용됩니다. 일반 C++ 멤버 변수나 함수는 리플렉션 시스템에 등록되지 않습니다. 나머지 선택지들은 모두 리플렉션 시스템의 올바른 특징입니다.
- UPROPERTY 매크로는 프로퍼티를 가비지 컬렉션 시스템에 등록하고, 에디터에서 편집 가능하게 만들며, 시리얼라이제이션(저장/로드)을 지원하는 역할을 합니다.
- BlueprintCallable 지정자는 C++로 작성된 함수를 블루프린트 그래프에서 노드로 호출할 수 있게 해줍니다. 이는 블루프린트와 C++ 간의 상호운용성을 제공하는 핵심 기능입니다. 나머지 선택지들은 BlueprintCallable과 관련 없는 기능들입니다.
- 언리얼 엔진의 강력한 기능들은 대부분 이 리플렉션 시스템을 기반으로 작동합니다.
- 블루프린트와 C++ 연동 방식 이해
- 블루프린트로 작성된 함수도 BlueprintImplementableEvent나 BlueprintNativeEvent를 통해 C++에서 호출할 수 있습니다.
- C++로 작성한 함수에 UFUNCTION(BlueprintCallable)을 지정하면 블루프린트에서 호출할 수 있다
- 블루프린트에서 구현한 이벤트를 C++에서 호출하려면 UFUNCTION(BlueprintImplementableEvent)를 사용한다
- C++ 클래스를 블루프린트로 상속받아 확장할 수 있다
문제풀이
언리얼 C++ 빌드 프로세스 이해
- 언리얼 엔진에서 C++ 코드 빌드 과정의 순서를 옳게 나열한 것은?
컴파일 → 링크 → 실행 파일 생성링크 (Link): 컴파일된 여러 오브젝트 파일과 엔진 라이브러리, 필요한 리소스 등을 하나로 연결하여 하나의 실행 가능한 파일(예: .exe 또는 .dll)로 묶어주는 작업입니다. - 실행 파일 생성: 링크 과정을 통해 최종적으로 언리얼 에디터를 실행하거나 패키징할 수 있는 결과물이 완성됩니다.
- 컴파일 (Compile): 작성한 C++ 코드(.cpp)를 컴퓨터가 이해할 수 있는 기계어 형태의 오브젝트 파일(.obj 또는 .o)로 변환합니다. 이 단계에서 문법 오류를 검출합니다.
- A컴파일 → 링크 → 실행 파일 생성 B링크 → 컴파일 → 실행 파일 생성 C실행 파일 생성 → 컴파일 → 링크 D컴파일 → 실행 파일 생성 → 링크
- 언리얼 엔진의 라이브 코딩(Live Coding) 기능에 대한 설명으로 옳지 않은 것은?
라이브 코딩은 에디터를 실행한 상태에서 코드 변경사항을 반영할 수 있는 편리한 기능이지만, 모든 변경사항을 완벽하게 지원하지는 않습니다. 클래스 구조의 큰 변경이나 헤더 파일의 일부 변경사항은 에디터 재시작이 필요할 수 있습니다. A, B, D는 모두 라이브 코딩의 올바른 특징입니다. - A에디터를 종료하지 않고 C++ 코드를 수정하고 반영할 수 있다 B단축키 Ctrl+Alt+F11을 사용하여 라이브 코딩을 실행할 수 있다 C모든 종류의 코드 변경사항을 완벽하게 핫리로드할 수 있다 D개발 속도를 향상시키기 위한 기능이다
- 컴파일(Compile) 단계에서 수행되는 작업으로 옳은 것은?
컴파일 단계는 사람이 작성한 C++ 소스 코드(.cpp 파일)를 컴퓨터가 이해할 수 있는 기계어 형태의 오브젝트 파일(.obj)로 변환하는 과정입니다. A, C, D는 모두 링크(Link) 단계에서 수행되는 작업입니다. - A 여러 오브젝트 파일을 하나의 실행 파일로 결합한다 B 소스 코드(.cpp)를 기계어 오브젝트 파일(.obj)로 변환한다 C 외부 라이브러리의 함수 주소를 연결한다 D 최종 실행 파일(.exe 또는 .dll)을 생성한다
- 링크(Link) 단계에서 발생할 수 있는 오류로 옳은 것은?
Unresolved External Symbol 오류는 링크 단계에서 발생하는 대표적인 오류로, 선언은 되어 있지만 정의(구현)를 찾을 수 없을 때 발생합니다. A는 컴파일 단계의 오류이며, C와 D는 런타임 오류입니다. - A Syntax Error - 문법 오류 B Unresolved External Symbol - 정의되지 않은 외부 심볼 C Null Pointer Exception - 널 포인터 예외 D Array Index Out of Bounds - 배열 인덱스 범위 초과
Actor 생명주기와 컴포넌트 구조 이해
- Unreal Engine에서 Actor의 생명주기 함수들의 실행 순서로 옳은 것은?
Actor의 생명주기는 Constructor(생성자) → BeginPlay(게임 시작 시 호출) → Tick(매 프레임마다 호출) → EndPlay(소멸 시 호출) 순서로 진행됩니다. Constructor는 Actor가 메모리에 생성될 때 가장 먼저 호출되고, BeginPlay는 게임이 시작되거나 Actor가 스폰될 때 호출되며, Tick은 게임 실행 중 반복 호출되고, EndPlay는 Actor가 제거될 때 마지막으로 호출됩니다. - A.Constructor → BeginPlay → Tick → EndPlay B.BeginPlay → Constructor → Tick → EndPlay C.Constructor → Tick → BeginPlay → EndPlay D.BeginPlay → Tick → Constructor → EndPlay
- 다음 중 BeginPlay 함수에 대한 설명으로 옳지 않은 것은?
BeginPlay는 게임이 시작되거나 Actor가 런타임에 스폰될 때 단 한 번만 호출되는 함수입니다. 매 프레임마다 반복적으로 호출되는 함수는 Tick 함수입니다. BeginPlay는 초기화 작업을 수행하기에 적합하며, 모든 컴포넌트가 준비된 상태에서 호출되므로 안전하게 컴포넌트에 접근할 수 있습니다. - A.게임이 시작될 때 한 번만 호출된다 B.Actor의 모든 컴포넌트가 초기화된 후 호출된다 C.매 프레임마다 반복적으로 호출된다 D.Actor가 월드에 배치되었을 때 게임 시작 시점에 실행된다
- Tick 함수의 DeltaTime 매개변수의 용도로 가장 옳은 것은?
DeltaTime은 이전 프레임과 현재 프레임 사이에 경과한 시간(초 단위)을 나타냅니다. 이 값을 사용하면 프레임률에 관계없이 일정한 속도로 객체를 움직이거나 변화시킬 수 있습니다. 예를 들어 이동 속도에 DeltaTime을 곱하면 프레임률이 다르더라도 동일한 속도로 이동하게 됩니다. 이는 프레임 독립적인 게임플레이를 구현하는 데 필수적입니다. - A.게임 시작 후 경과한 총 시간 B.이전 프레임과 현재 프레임 사이의 시간 간격 C.다음 프레임까지 남은 시간 D.초당 프레임 수(FPS) 값
언리얼 리플렉션 시스템 이해
- 언리얼 엔진의 리플렉션 시스템(Reflection System)에 대한 설명으로 옳지 않은 것은?B.가비지 컬렉션, 시리얼라이제이션, 네트워크 리플리케이션 등의 기능을 지원한다D.블루프린트와 C++ 간의 상호운용성을 가능하게 한다
리플렉션 시스템은 UPROPERTY, UFUNCTION 등의 매크로를 명시적으로 사용한 멤버에만 적용됩니다. 일반 C++ 멤버 변수나 함수는 리플렉션 시스템에 등록되지 않습니다. 나머지 선택지들은 모두 리플렉션 시스템의 올바른 특징입니다. - C.UPROPERTY와 UFUNCTION 매크로 없이도 모든 C++ 멤버에 자동으로 적용된다
- A.런타임에 클래스, 프로퍼티, 함수 등의 메타데이터에 접근할 수 있게 해준다
- UPROPERTY 매크로의 주요 역할로 옳은 것을 모두 고르면?
UPROPERTY 매크로는 프로퍼티를 가비지 컬렉션 시스템에 등록하고, 에디터에서 편집 가능하게 만들며, 시리얼라이제이션(저장/로드)을 지원하는 역할을 합니다. 나머지 선택지들은 UPROPERTY의 역할과 관련이 없는 기능들입니다. - A.가비지 컬렉션 대상으로 등록, 에디터에서 편집 가능, 시리얼라이제이션 지원 B.컴파일 속도 향상, 메모리 사용량 감소, 코드 최적화 C.자동 주석 생성, 코드 포맷팅, 변수명 검증 D.멀티스레딩 동기화, 예외 처리, 타입 변환
- 다음 코드에서 빈칸에 들어갈 적절한 매크로는?A.UFUNCTION B.UPROPERTY C.USTRUCT D.UENUM
멤버 변수(프로퍼티)를 리플렉션 시스템에 등록하고 에디터에서 편집 가능하게 만들려면 UPROPERTY 매크로를 사용해야 합니다. UFUNCTION은 함수용, USTRUCT는 구조체용, UENUM은 열거형용 매크로입니다. - UCLASS() class MYGAME_API AMyActor : public AActor { GENERATED_BODY() ___________(EditAnywhere, BlueprintReadWrite) int32 Health; };
- UFUNCTION 매크로의 BlueprintCallable 지정자의 역할은?
BlueprintCallable 지정자는 C++로 작성된 함수를 블루프린트 그래프에서 노드로 호출할 수 있게 해줍니다. 이는 블루프린트와 C++ 간의 상호운용성을 제공하는 핵심 기능입니다. 나머지 선택지들은 BlueprintCallable과 관련 없는 기능들입니다. - A.블루프린트에서 해당 함수를 호출할 수 있게 만든다 B.함수를 자동으로 컴파일 타임에 인라인 처리한다 C.함수 실행 시 자동으로 로그를 출력한다 D.함수를 멀티스레드 환경에서 안전하게 만든다
블루프린트와 C++ 연동 방식 이해
- 언리얼 엔진에서 블루프린트와 C++의 연동 방식에 대한 설명으로 옳지 않은 것은?
블루프린트로 작성된 함수도 BlueprintImplementableEvent나 BlueprintNativeEvent를 통해 C++에서 호출할 수 있습니다. A는 C++ 함수를 블루프린트에 노출하는 방법, B는 블루프린트 이벤트를 C++에서 호출하는 방법, C는 일반적인 연동 방식으로 모두 옳은 설명입니다. - A.C++로 작성한 함수에 UFUNCTION(BlueprintCallable)을 지정하면 블루프린트에서 호출할 수 있다 B.블루프린트에서 구현한 이벤트를 C++에서 호출하려면 UFUNCTION(BlueprintImplementableEvent)를 사용한다 C.C++ 클래스를 블루프린트로 상속받아 확장할 수 있다 D.블루프린트로 작성된 함수는 C++에서 직접 호출할 수 없으므로 반드시 C++로 재작성해야 한다
코드 카타: 두개 뽑아서 더하기 & K번째수
- 049. 두 개 뽑아서 더하기 | Solved Date: 2026-05-27-Wed | Problem Link
- 048. K번째수 | Solved Date: 2026-05-27-Wed | Problem Link
