본문 바로가기
스터디

이득우의 언리얼 프로그래밍 스터디 기록 - 5회차 : Unreal Object Reflection System2

by se.jeon 2025. 2. 27.
728x90
반응형

강의 개요

  • 목표: 언리얼 오브젝트 리플렉션 시스템을 활용한 언리얼 오브젝트 관리 방법 학습
  • 실습 예제: 학교에서 학생과 교수가 함께 수업하는 상황 구현

1. 클래스 설계

(1) 기본 클래스 구조

  • Person 클래스 (부모)
    • 속성: Name (FString), Year (int)
    • 함수:
      • doLesson() (가상 함수, 수업 참여 기능)
      • getName(), setName() (getter, setter)
    • 언리얼 리플렉션 시스템을 사용하기 위해 UProperty, UFunction 매크로 적용
  • Student 클래스 (자식)
    • 상속: Person
    • 추가 속성: ID (int, 학번)
    • doLesson() 오버라이딩 → 수업 듣는 기능
    • 기본값 설정:
      • 이름: "학생"
      • 학번: 1
      • 연차: 1년차
  • Teacher 클래스 (자식)
    • 상속: Person
    • 추가 속성: ID (int, 사번)
    • doLesson() 오버라이딩 → 수업 가르치는 기능
    • 기본값 설정:
      • 이름: "이선생"
      • 사번: 1
      • 연차: 3년차

2. 클래스 구현

  1. Person 클래스 생성
    • FString Name, int Year 속성 선언 (Protected)
    • UProperty 매크로 적용
    • doLesson() 함수 선언 (UFunction 매크로 적용)
    • 생성자에서 기본값 설정: 이름="홍길동", 연차=1
  2. Student 클래스 생성
    • Person.h 포함 (generated.h 아래에 위치해야 함)
    • doLesson() 함수 오버라이딩 (super::doLesson() 호출 후 학생 로그 출력)
    • 생성자에서 기본값 설정
  3. Teacher 클래스 생성
    • Person.h 포함 및 상속
    • doLesson() 함수 오버라이딩 (super::doLesson() 호출 후 선생님 로그 출력)
    • 생성자에서 기본값 설정

3. 오브젝트 생성 및 활용

  1. 객체 생성
    • NewObject<UStudent>(), NewObject<UTeacher>() 사용 (C++ new 대신 사용)
  2. Getter/Setter 활용
    • setName(), getName()을 사용해 student의 이름을 변경 후 출력
  3. 리플렉션 시스템 활용
    • FindPropertyByName()을 사용해 Teacher 객체의 Name 속성 가져오기
    • getValueInContainer()로 현재 Teacher 이름 조회
    • setValueInContainer()로 Teacher 이름 변경
    • 변경된 값이 정상적으로 반영되는지 확인 (getter 활용)

4. 마무리하며

  • 리플렉션 시스템을 사용해 언리얼 오브젝트의 특정 속성과 함수를 이름으로 검색할 수 있다.
  • 리플렉션 시스템을 사용해 접근 지시자와 무관하게 값을 설정할 수 있다.
  • 리플렉션 시스템을 사용해 언리얼 오브젝트의 함수를 호출할 수 있다.

언리얼 엔진의 기본 프레임웍은 리플렉션을 활용해 구축되어 있으므로

엔진을 이해하기 위해서는 리플렉션 시스템을 이해하는 것이 필요하다.

728x90
반응형