언리얼

이득우의 언리얼 프로그래밍 5 - 컴포지션

햄시나 2025. 4. 21. 13:07

먼저, 상속이란 Is-A 관계이고, 컴포지션은 서로 다른 객체에서 한 객체가 다른객체를 Has-A 하고 있는 형태다.

하나의 클래스가 다른 클래스를 멤버 변수로 가질때, 우리는 그동안 아래와 같이 했다.

Person 헤더에서의 추가
파일에서 생성하기

그런데 언리얼에서는 정해진 형태가 있다. 

컴포지션의 Has-A 관계에서 "내가 소유한" 오브젝트는 Subobject 다.

"나를 소유한" 상위 오브젝트는 Outter라고 한다.

Person의 헤더
cpp파일

저렇게 생성시에 FName을 적어줘야하는데, 이게 일반 String이 아니고 FName이라고 명시적으로 알려주기 위해서 NAME_을 앞에 붙여주는 것이 좋다고 한다.

 

그러고나서 Person이 소유한 카드를 불러오는 방법이다. 카드 enum class는 바로 아래와 같다.

 내가 만든 Getter를 이용했다. 

 

출력값

그런데 따로 메타 데이터를 설정해준게 있으니, 그걸 출력해보자.

1. 선언한 타입으로 오브젝트 찾기 : FindObject<UEnum>

2. 언리얼  오브젝트의 절대 주소인 /Script/ 로 접근 : TEXT("/Script/

3. 모듈이름을 뒤에 적는다. : 프로젝트 이름이 모듈이름. = HamUnreal

4. 찾아서 사용할 클래스 명을 적음 : ECardType

5. 메타데이터를 가져옴 : GetDisplayNameTextByValue

출력값