09.01 - TIL

김혁·2025년 9월 1일

TIL

목록 보기
8/84

오늘의 코드카타

110 옮기기

  • 특정 문자열 추출 후, 사전순 정렬
  • 숫자 카운팅하기
  • LV3 - 34%
    -> 문제 풀이

오늘의 공부

진행한 과제

내일 진행할 과제

  • 9번 과제
    • 기본 숫자 야구 로직 오류 수정
    • 도전 과제 : 시간 제한을 두고, 기회를 주는 기능 추가
  • 10번 과제

정리 노트

오늘의 CS

전치 증감 vs 후치 증감

전치 증감

  • 동작 과정
    1. 변수 i의 값을 먼저 1 증가
    2. 증가된 값을 반환
  • 특징
    • 불필요한 복사 객체를 만들지 않고, 자기 자신을 참조로 반환

후치 증감

  • 동작 과정
    1. 현재 값을 임시 변수에 저장 (복사 비용 발생)
    2. 변수 i의 값을 1 증가
    3. 증가 전 값을 반환
  • 특징
    • 원래 값을 반환해야 하므로, 임시 객체를 하나 더 생성해야 함
    • 전치 증감보다 비용이 큼

성능 비교

  • 원시 타입 (int, float 등)
    • 차이가 거의 없음 (컴파일러 최적화)
  • 사용자 정의 타입 (Iterator, BigInteger 등)
    • 후치 증감은 임시 객체 생성 -> 복사 -> 반환 과정 때문에 비용이 더 큼

언리얼 엔진의 RTTI 방식

  • C++ 표준 RTTI를 비활성화하고 자체 시스템을 사용
  • 이유 : 성능, 크로스플랫폼 일관성, 리플렉션
  • UObject + UClass의 메타데이터

핵심 구조

  1. UObject
  • 모든 리플렉션 가능한 클래스의 베이스
  • 각 인스턴스는 자신이 어떤 UClass에 속하는지 가리키는 포인터를 멤버로 가짐
  • 즉, MyActor->GetClass() 호출 시 자기 타입의 메타데이터 객체를 반환
  1. UClass
  • 클래스 자체를 설명하는 메타데이터 객체
  • SuperClass 포인터를 가지고 있어 계층 구조를 표현함
  • 리플렉션 정보(프로퍼티, 함수, 인터페이스 등)을 다 저장
  • UCLASS() 매크로를 쓰면 UHT(Unreal Header Tool)가 코드 생성 시 클래스마다 정보 생성
    • StaticClass() : 특정 클래스의 전역 UClass 객체를 반환
    • GetClass() : 객체가 실제로 어떤 UClass인지 반환

동작 과정

  1. UObject 인스턴스는 자기 타입을 가리키는 UClass*를 멤버로 들고 있음
  2. UClass는 자기 부모(SuperClass)를 가리킴 -> 타입 계층 구조 유지
  3. IsA() 호출 시, 현재 UClass부터 부모까지 올라가며 비교
  4. Cast<>()IsA() 확인 후 안전하게 C++ 캐스팅 수행

내부 동작 코드

  • IsA() : 자손 클래스인지 확인
bool UObject::IsA(const UClass* SomeClass) const
{
    for (UClass* CurrentClass = GetClass(); CurrentClass; CurrentClass = CurrentClass->GetSuperClass())
    {
        if (CurrentClass == SomeClass)
        {
            return true;
        }
    }
    return false;
}
  • Cast<>() : c++의 dynamic cast를 대체하는 안전한 다운 캐스팅
template<typename T>
FORCEINLINE T* Cast(UObject* Src)
{
    return (Src && Src->IsA(T::StaticClass())) ? (T*)Src : nullptr;
}
profile
게임 개발자를 향해..

0개의 댓글