언리얼 실무 도구 정리 (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)이라 병목.

+ Recent posts