언리얼 실무 도구 정리 (Interface, Delegate, FString, 컨테이너)
언리얼 C++ 개념 학습 노트. 강의 2.5, 2.8~2.10 개념만. 인터페이스/델리게이트/문자열 쓸 때 다시 보기.
Unreal Interface
자식이 반드시 구현해야 할 행동을 강제하는 클래스. 다형성 + 의존성 분리(Decouple)에 유용.
핵심 효과: 주인 클래스가 새 인터페이스의 Fly()만 알면 됨. 참새/뱁새 내부가 바뀌어도 인터페이스가 그대로면 주인 클래스는 재컴파일 안 됨. (참새 - 새 인터페이스 - 주인) 사이가 끊어져 있음.
생성 시 함정: 인터페이스 만들면 한 파일에 두 클래스가 생김. U로 시작하는 타입 클래스(런타임 타입 정보용, 거의 안 씀), I로 시작하는 인터페이스 클래스(실제 설계에 사용). 보통 I쪽에 순수 가상함수 선언만. Unreal C++ Interface는 다른 언어와 달리 선언과 동시에 정의도 가능.
구현 여부 확인: GetClass()->ImplementsInterface(U타입::StaticClass()), Cast<I인터페이스>(개체)로 다형성 컬렉션 운용.
Delegate (발행-구독 패턴)
발행자-중개인-구독자 구조. 발행자/구독자는 서로 모르고 중개인(델리게이트)만 안다. 의존성 분리. 단점은 반대편 상황을 알 수 없음.
발행자가 Broadcast()/Execute(), 구독자가 Add()/Bind()로 연결.
선언 매크로 구조: DECLARE_{유형}DELEGATE{함수명세}
유형:
- 1:1, C++ → DECLARE_DELEGATE
- 1:N, C++ → DECLARE_MULTICAST_DELEGATE
- 1:1, C++ & 블루프린트 → DECLARE_DYNAMIC_DELEGATE
- 1:N, C++ & 블루프린트 → DECLARE_DYNAMIC_MULTICAST_DELEGATE
함수 명세: 없으면 공란, 인자 1개 OneParam, 인자 3개+반환값 RetVal_ThreeParams (인자 최대 9개)
호출/바인드:
- 1:1 → Execute(), Bind 계열
- 1:N → Broadcast(), Add 계열
- AddDynamic(다이나믹), AddUObject(멤버함수), AddUFunction(UFUNCTION 멤버함수)
함정: 다이나믹 델리게이트에 바인드되는 콜백은 UFUNCTION() 필수. 바인드한 건 Shutdown 등에서 IsAlreadyBound 확인 후 RemoveDynamic으로 해제. 전방 선언(class USXPigeon;)을 적극 활용 — 헤더 인클루드하면 순환 참조/불필요한 재컴파일 위험.
FString / FName / FText
언리얼은 내부적으로 UTF-16. 파일도 UTF-16 기본. 단 소스코드는 영문 권장(한글 필요 시 파일 인코딩 UTF-8 변환). UTF-16 문자열 리터럴은 TEXT() 매크로로 생성.
- TCHAR: UTF-16용 표준 문자 자료형
- FString: TCHAR 배열을 래핑한 헬퍼 클래스. 조작 자유로움. UE_LOG 등에 넘길 때 *String으로 TCHAR 배열 반환
- 변환: FString::Printf, FString::FromInt, FString::SanitizeFloat, FCString::Atoi/Atof
FName: 애셋 관리용. 문자열을 그대로 쓰면 연산량 큼 → 내부적으로 해시값으로 변환. 전역 Pool에 키-값으로 보관. 생성자에 문자열 넣으면 매번 Pool에서 FindOrAdd 발생.
FName 함정: 지역 변수로 FName(TEXT("...")) 선언하면 함수 호출/반복마다 Pool 조회 비용. 변하지 않는 키는 static const FName으로 한 번만(Best practice).
FText: 다국어(로컬리제이션)용. UI에서 자주 씀. 키처럼 동작, 별도 문자열 테이블 필요. 빌드 시 국가별로 자동 변환.
컨테이너 (TArray, TSet, TMap)
언리얼 자체 컨테이너 라이브러리(UCL). UObject 안정 지원, 다수 처리 유용. 현업에선 사실상 이 셋만 씀. STL도 되지만 비권장.
- TArray ≈ STL vector. 순서대로 관리. 캐시 지역성, 임의 접근
- TSet ≈ unordered set. 중복 없는 집합. 빠른 중복 감지
- TMap ≈ unordered map. 중복 없는 키-값
시간 복잡도:
- TArray: 접근 O(1), 검색/삽입/삭제 O(N)
- TSet: 접근/검색/삽입/삭제 O(1)
- TMap: 접근/검색/삽입/삭제 O(1)
선택 기준: 순서·인덱스 접근이면 TArray, 중복 체크가 잦으면 TSet, 키로 찾으면 TMap. 가운데 삽입/삭제가 잦은데 TArray 쓰면 O(N)이라 병목.
'학습 > Unreal' 카테고리의 다른 글
| 언리얼 Pawn과 게임플레이 프레임워크 정리 (GameMode, Controller, 입력, 애니메이션) (0) | 2026.05.01 |
|---|---|
| 언리얼 Actor와 컴포넌트 구조 정리 (컴포지션, UPROPERTY, 이벤트 함수, Movement) (0) | 2026.04.30 |
| 언리얼 UObject 동작 원리 정리 (CDO, Reflection, GC, Serialization) (0) | 2026.04.27 |
| [실습] Pawn 클래스 3D캐릭터 만들기 (0) | 2026.04.16 |
| PlayerController 알아보기 / Enhanced Input System을 활용한 입력 매핑 구현하기 (0) | 2026.04.15 |
