2. Reflection / GC

JUSTICE_DERยท2023๋…„ 7์›” 20์ผ
0

๐ŸŒตUNREAL

๋ชฉ๋ก ๋ณด๊ธฐ
33/42

๐Ÿธ

๋ฆฌํ”Œ๋ ‰์…˜์ด ๋ญ”์ง€ ์ฒ˜์Œ ์•Œ์•˜๋˜ ๋•Œ

์œ„์˜ ๊ธ€์—์„œ Actor๋ฅผ ์ƒ์„ฑํ•˜๋ฉด generated.h๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ถ”๊ฐ€๋˜์–ด์žˆ๋‹ค๊ณ  ํ–ˆ๋‹ค.
ํ•ด๋‹น ํ—ค๋”๋Š” ๋ฆฌํ”Œ๋ ‰์…˜๊ธฐ๋Šฅ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ๋ฆฌํ”Œ๋ ‰์…˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฌ๋‹ค.

๊ทธ ๋ฆฌํ”Œ๋ ‰์…˜์ด ๋ญ”์ง€ ์ •ํ™•ํžˆ ์•Œ์•„๋ณด์ž

4๊ฐ€์ง€์˜ ๊ธ€์„ ์ฐธ๊ณ ํ•˜์˜€๋‹ค.


1. Reflection

1-1. Reflection์ด๋ž€

๋ฆฌํ”Œ๋ ‰์…˜์€ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰์‹œ๊ฐ„์—(RunTime) ์ž๊ธฐ ์ž์‹ ์„ ์กฐ์‚ฌํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋ผ๊ณ  ํ•œ๋‹ค.
(์–ธ๋ฆฌ์–ผ ๊ณต์‹ ์‚ฌ์ดํŠธ)

์œ„์ฒ˜๋Ÿผ ์ปดํŒŒ์ผํƒ€์ž„์—๋Š” ์‹ค์ œ ํƒ€์ž…์„ ๋ชจ๋ฅด๋Š” ๊ฐ์ฒด๊ฐ€ ์ฃผ์–ด์ ธ๋„
๋Ÿฐํƒ€์ž„์— ํ•ด๋‹น ๊ฐ์ฒด์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.
(C#์šฉ ์ฝ”๋“œ์ด๊ณ , Object๋Š” ์ตœ์ƒ์œ„ํด๋ž˜์Šค๋ผ์„œ ์–ด๋–ค๊ฐ์ฒด์ธ์ง€ ๋ชจ๋ฅด๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค)

  • ๋ฆฌํ”Œ๋ ‰์…˜์€ ๊ทธ๋ž˜ํ”ฝ์ชฝ์˜ ์šฉ์–ด๋กœ๋„ ์“ฐ์—ฌ์„œ, ํ˜ผ๋™์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด
    ํ”„๋กœํผํ‹ฐ ์‹œ์Šคํ…œ์œผ๋กœ ๋ถ€๋ฅด๊ธฐ๋„ ํ•œ๋‹ค.
  • CPP๋Š” ๋ฆฌํ”Œ๋ ‰์…˜์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.
    ๋ฆฌํ”Œ๋ ‰์…˜์ด๋ž€ ๊ฒƒ์ด ์—„์ฒญ๋‚˜๊ฒŒ ์œ ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—
    UE์—์„œ UObject์— ๋Œ€ํ•˜์—ฌ ๋ฆฌํ”Œ๋ ‰์…˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  • ์‹ค์ œ๋กœ ๋ฆฌํ”Œ๋ ‰์…˜์€
    ์—๋””ํ„ฐ์˜ ๋””ํ…Œ์ผ ํŒจ๋„, ์‹œ๋ฆฌ์–ผ๋ผ์ด์ œ์ด์…˜, ๊ฐ€๋น„์ง€ ์ฝœ๋ ‰์…˜, ๋„คํŠธ์›Œํฌ ๋ฆฌํ”Œ๋ฆฌ์ผ€์ด์…˜, ๋ธ”๋ฃจํ”„๋ฆฐํŠธ/C++ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ๋“ฑ
    ๋‹ค์ˆ˜์˜ ์‹œ์Šคํ…œ์— ํƒ‘์žฌ๋˜์—ˆ๋‹ค.

๊ฒŒ์ž„์—๋Š” ์—ฌ๋Ÿฌ ๋ชจ๋“ˆ๋กœ ๊ตฌ์„ฑ๋˜๋Š”๋ฐ ์ปดํŒŒ์ผํƒ€์ž„์—๋Š” ํ•ด๋‹น ๋ชจ๋“ˆ์˜ ์กด์žฌ๋ฅผ ์„œ๋กœ ์•Œ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ,
๋™์ ์ธ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ง์ปค๋‚˜ ๋Ÿฐํƒ€์ž„์‹œ์— ํ•ด๋‹น ํด๋ž˜์Šค๊ฐ€ ๋ฌด์—‡์ธ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

A. UObject

  • Java๋‚˜ C#์˜ Object์ฒ˜๋Ÿผ ์ตœ์ƒ์œ„ ์ถ”์ƒํด๋ž˜์Šค
  • ์–ธ๋ฆฌ์–ผ์€ ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ ํ•ด๋‹น UObject๋ฅผ ์ƒ์†๋ฐ›์„ ํ•„์š”๋Š” ์—†์ง€๋งŒ,
    UObject๋ฅผ ์ƒ์†ํ•œ ํด๋ž˜์Šค์— ๋Œ€ํ•ด์„œ ํŽธ๋ฆฌํ•œ ๊ธฐ๋Šฅ๋“ค์„ ์ œ๊ณตํ•œ๋‹ค.

1-2. Reflection ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด

๋‚ด๊ฐ€ ์ ์€๊ธ€์„ ์ฐธ๊ณ 
https://velog.io/write?id=1251400e-46a4-4c5c-b193-d9955cc503e3

  • ๋ฆฌํ”Œ๋ ‰์…˜์ด ์žˆ๋Š” ์œ ํ˜•์œผ๋กœ ๋งˆํ‚น์„ ํ•˜๋ ค๋ฉด
    ํŒŒ์ผ ์ƒ๋‹จ์— generated.h๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ๋งˆํ‚นํ•ด์ค€๋‹ค.

  • ๊ทธ๋Ÿฌ๋ฉด ๋‹ค๋ฅธ generated.h๊ฐ€ ๋ถ™์€
    ๋ฆฌํ”Œ๋ ‰์…˜์ด ์žˆ๋Š” ์œ ํ˜•์€ ํ•ด๋‹น ํŒŒ์ผ์„ ๊ณ ๋ คํ•ด์•ผํ•˜๋Š” ๊ฒƒ๊ณผ
    ์‹œ์Šคํ…œ ๊ตฌํ˜„์—๋„ ํ•„์š”ํ•จ์„ UHT์— ์•Œ๋ ค์ค€๋‹ค.
    (unreal header tool)

  • generated.h๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์œผ๋‹ˆ,
    UENUM(), UCLASS(), USTRUCT(), UFUNCTION(), UPROPERTY()
    ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

#include "StrategyChar.generated.h"


UCLASS(Abstract)
class AStrategyChar : public ACharacter, public IStrategyTeamInterface

{

    GENERATED_UCLASS_BODY()

    UPROPERTY(EditAnywhere, Category = Pawn)
    int32 ResourcesToGather;
    
    uint8 MyTeamNum;
}

๊ฐ„๋‹จํ•œ ์˜ˆ์‹œ๋ฅผ ๊ฐ€์ ธ์™”๋‹ค.

  • generated.h
    • generated.h๊ฐ€ ์‚ฌ์šฉ๋˜์–ด ๋ฆฌํ”Œ๋ ‰์…˜์ด ์žˆ๋Š” ์œ ํ˜•์œผ๋กœ ๋ช…์‹œ์ ์œผ๋กœ ์•Œ๋ฆฐ๋‹ค.
    • generated.h๊ฐ€ ์‚ฌ์šฉ๋˜์–ด UCLASS์™€ ๊ฐ™์€ ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.
  • ๋ฆฌํ”Œ๋ ‰์…˜ ํ‚ค์›Œ๋“œ
    • UCLASS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ACharacter๋ฅผ ์ƒ์†๋ฐ›์€ AStrategyChar๋ฅผ ๋ฆฌํ”Œ๋ ‰์…˜ ๋˜์—ˆ์Œ์„ ๋ช…์‹œํ•œ๋‹ค.
    • ๋ฆฌํ”Œ๋ ‰์…˜ ํ‚ค์›Œ๋“œ๊ฐ€ ๋ถ™์ง€์•Š์€ MyTeamNum์˜ ๊ฒฝ์šฐ,
      ๋ฆฌํ”Œ๋ ‰์…˜ ์‹œ์Šคํ…œ์ด ์˜์กดํ•˜๋Š” ์‹œ์Šคํ…œ ์ „๋ถ€์— ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค.
      • ๋ฆฌํ”Œ๋ ‰์…˜์ด ์˜์กดํ•˜๋Š” ์‹œ์Šคํ…œ
        • Blueprint
        • UnrealEngine Editor
    • generated์˜ ํ•จ์ˆ˜์—๋Š” StaticClass() / StaticStruct() ๊ฐ™์€ ๊ฒƒ์ด ํฌํ•จ๋˜์–ด ์žˆ์–ด,
      ์œ ํ˜•์— ๋Œ€ํ•œ ๋ฆฌํ”Œ๋ ‰์…˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด ์‰ฌ์›Œ์ง„๋‹ค
  • GENERATED_UCLASS_BODY()
    • generated์— ์ •์˜๋œ ๋งคํฌ๋กœ
    • UCLASS ๋‚ด์˜ UFUNCTION / UPROPERTY .. ๋“ฑ๋“ฑ
      ๋ฆฌํ”Œ๋ ‰์…˜ ํ‚ค์›Œ๋“œ๊ฐ€ ๋ถ™์€ ํ•จ์ˆ˜, ๋ณ€์ˆ˜๋“ค์„ ๋ฆฌํ”Œ๋ ‰์…˜ ๋ฐ์ดํ„ฐ๋กœ ๋“ฑ๋กํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.
    • ๋”ฐ๋ผ์„œ UCLASS๊ฐ€ ๋ถ™์€ CLASS๋‚ด์— UFUNCTION๋งŒ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ๋ฆฌํ”Œ๋ ‰์…˜์ด ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค.
      UCLASS()๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค๋ฉด GENERATED_UCLASS_BODY()๊ฐ€ ๋“ค์–ด๊ฐ€๋Š”๊ฒŒ ํ•„์ˆ˜
      ๋“ค์–ด๊ฐ€์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋ฆฌํ”Œ๋ ‰์…˜์„ ์“ฐ๊ฒ ๋‹ค๊ณ  ์„ ์–ธ์€ ํ–ˆ๋Š”๋ฐ ์‹ค์ œ๋กœ ๋ฆฌํ”Œ๋ ‰์…˜์„ ํ•˜์ง€ ์•Š๋Š” ๊ผด์ด ๋œ๋‹ค
    • ํ•ด๋‹น ํ‚ค์›Œ๋“œ๊ฐ€ ๋ถ™์€ ํ•จ์ˆ˜/๋ณ€์ˆ˜๋ฅผ ์‹ค์ œ๋กœ ๋ฆฌํ”Œ๋ ‰์…˜์— ๋“ฑ๋กํ•˜๋Š”๊ฑด GENERATED_UCLASS_BODY()

๊ฒฐ๋ก 

generated.h๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌํ”Œ๋ ‰์…˜์ด ์žˆ๋Š” ์œ ํ˜•์ž„์„ ์•Œ๋ฆฐ๋‹ค.

generated.h๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌํ”Œ๋ ‰์…˜ ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๊ณ ,
UObject๋ฅผ ์ƒ์†๋ฐ›๋Š” CLASS์—
UCLASS()์™€ GENERATED_UCLASS_BODY()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ
UCLASS()๋œ ๋ฆฌํ”Œ๋ ‰์…˜๋œ ํด๋ž˜์Šค ๋‚ด๋ถ€์˜ ๋ฆฌํ”Œ๋ ‰์…˜ ํ‚ค์›Œ๋“œ๊ฐ€ ๋ถ™์€
๋ฉค๋ฒ„ํ•จ์ˆ˜, ๋ณ€์ˆ˜๋“ค์„ ๋ฆฌํ”Œ๋ ‰์…˜ ๋ฐ์ดํ„ฐ์— ๋„ฃ๋Š”๋‹ค.

์ตœ์ข…์ ์œผ๋กœ BP์™€ UE editor์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

์ •๋ง ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€..
UObject๊ฐ์ฒด๋ผ๋ฉด, ๋ฌด์กฐ๊ฑด generated.h / UCLASS / ๊ทธ๋ฆฌ๊ณ  U์ ‘๋‘์‚ฌ / UObject์˜ ์ƒ์† / GENERATED_BODY()
์ด 5๊ฐœ๊ฐ€ ๋ฌด์กฐ๊ฑด ํฌํ•จ๋˜์–ด์žˆ์–ด์•ผ ํ•˜๋ฏ€๋กœ,
UObject๋Š” ๋ฌด์กฐ๊ฑด ๋ฆฌํ”Œ๋ ‰์…˜์ด ๋œ๋‹ค๊ณ  ๋ณด๋Š”๊ฒƒ์ด ๋งž๋‹ค.

+ Enum / Struct

  • UObject๊ฐ€ ์•„๋‹ˆ์ง€๋งŒ ๋ฆฌํ”Œ๋ ‰์…˜์„ ์ œ๊ณตํ•œ๋‹ค.
  • ์ถ”๊ฐ€๋กœ ์–ธ๋ฆฌ์–ผ์€ CPP์™€ ๋‹ฌ๋ฆฌ ๊ตฌ์กฐ์ฒด์™€ ํด๋ž˜์Šค๊ฐ€ ๋‹ค๋ฅด๊ณ ,
    USTRUCT ๋‚ด์— UFUNCTION๊ฐ™์€ ํ‚ค์›Œ๋“œ๋ฅผ ๋„ฃ์„ ์ˆ˜ ์—†๋‹ค.
  • ์ถ”๊ฐ€๋กœ UENUM๊ณผ USTRUCT๋Š” ์ฃผ๋กœ ๊ฐ’์œผ๋กœ ์ทจ๊ธ‰ํ•˜๊ณ 
    ๋ฆฌํ”Œ๋ ‰์…˜ ํ‚ค์›Œ๋“œ(๋งคํฌ๋กœ)๋ฅผ ๋ถ™์˜€์Œ์—๋„ GC์˜ ๋Œ€์ƒ์ด ๋˜์ง€ ์•Š๋Š”๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ํ‚ค์›Œ๋“œ๋ฅผ ์™œ ๋ถ™์ด๋Š”๊ฑธ๊นŒ

  • ๊ทธ์ € EDITOR๋‚˜ BP์—์„œ ๊ด€๋ฆฌํ•˜๊ธฐ ํŽธํ•˜๊ธฐ ์œ„ํ•จ์ธ๋“ฏ ์‹ถ๋‹ค.

1-3. Reflection ๋™์ž‘ ์›๋ฆฌ

  • Unreal Build Tool(UBT)์™€ Unreal Header Tool (UHT)๊ฐ€ ํ•จ๊ป˜ํ•˜์—ฌ
    ์‹คํ–‰์‹œ๊ฐ„ ๋ฆฌํ”Œ๋ ‰์…˜์„ ๊ฐ•ํ™”์‹œํ‚ค๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค

1 -UBT(Unreal Build Tool)๋Š” ํ—ค๋”๋ฅผ ์Šค์บ”ํ•œ ๋‹ค์Œ
๋ฆฌํ”Œ๋ ‰์…˜๋œ ์œ ํ˜•์ด ์ตœ์†Œ ํ•˜๋‚˜ ์žˆ๋Š” ํ—ค๋”๊ฐ€ ๋“ค์–ด์žˆ๋Š” ๋ชจ๋“ˆ์„ ๊ธฐ์–ต.

2 -๊ทธ ํ—ค๋” ์ค‘ ์ด์ „ ์ปดํŒŒ์ผ ์ดํ›„ ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค๋ฉด, UHT๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๋ฆฌํ”Œ๋ ‰์…˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  ์—…๋ฐ์ดํŠธ.

3 -UHT ๋Š” ๋ฆฌํ”Œ๋ ‰์…˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์žˆ๋Š” C++ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑ

4 -๋นŒ๋“œ ์‹œ ํ•ด๋‹น ์ฝ”๋“œ์™€ ๊ฐ™์ด ์ปดํŒŒ์ผ

[๊ณต์‹์‚ฌ์ดํŠธ์˜ ๊ธ€์„ ์š”์•ฝํ•œ ๊ธ€ - ๋ฆฌํ”Œ๋ ‰์…˜ ์ž‘๋™ ์›๋ฆฌ]

๊ฒฐ๋ก 
์Œ... ๊ทธ๋ƒฅ ๊ทธ๋Ÿฐ๊ฐ€๋ณด๋‹ค ํ•˜๊ณ  ๋„˜์–ด๊ฐ„๋‹ค.

์ค‘์š”ํ•œ๊ฑด UBT์™€ UHT๊ฐ€ ๋ฆฌํ”Œ๋ ‰์…˜ ์œ ํ˜•์ด ์žˆ๋Š” ํ—ค๋”๋ฅผ ๊ฐ์‹œํ•˜๊ณ ,
๋ฆฌํ”Œ๋ ‰์…˜ ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค

2. Garbage Collection

  • CPP์—์„  ์ž๋™์œผ๋กœ Delete๋ฅผ ํ•ด์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•ด์•ผ๋งŒ ํ–ˆ๋Š”๋ฐ
    ์–ธ๋ฆฌ์–ผ์—์„  UObject์— ๋Œ€ํ•ด Reflection๊ธฐ๋Šฅ์„ ๋ฐ”ํƒ•์œผ๋กœ GC๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

  • UCLASS์˜ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋“ค์€ UPROPERTY๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌํ”Œ๋ ‰์…˜์„ ์ ์šฉ์‹œํ‚ค๊ณ ,
    GC๋ฅผ ์ ์šฉ์‹œํ‚ค๊ฒŒ ๋˜๋Š”๋ฐ
    ์–ธ๋ฆฌ์–ผ์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋‚˜ ์ž๋ฃŒํ˜•์ด ์•„๋‹Œ,
    UHT๊ฐ€ ๋ชจ๋ฅด๋Š” ์ž๋ฃŒํ˜•์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ์ค‘์ฒฉ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ
    UPROPERTY๋ฅผ ๋ถ™์ด๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

2-1.AddReferencedObject

๊ทธ๋Ÿฐ ๊ฒฝ์šฐ, AddReferencedObject ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๊ณ ,
GC์—๊ฒŒ ์ง์ ‘ ํ•ด๋‹น ํฌ์ธํ„ฐ์˜ ์ฃผ์†Œ๊ฐ’์„ ๋„˜๊ฒจ์ฃผ๊ฒŒ ๋œ๋‹ค.

ํ•ด๋‹น ํ•จ์ˆ˜๋Š” GC์‚ฌ์ดํด๋งˆ๋‹ค ํ˜ธ์ถœ์ด ๋œ๋‹ค๊ณ  ํ•จ.

C++ ๊ฐ์ฒด ๋‚ด์— UObject ํฌ์ธํ„ฐ๊ฐ€ ์กด์žฌํ•˜๋ฉด,
ํ•ด๋‹น ๊ฐ์ฒด๊ฐ€ FGCObject๋ฅผ ์ƒ์†ํ•˜๊ฒŒ๋” ํ•œ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด AddReferencedObject๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๊ณ ,
UObjectํฌ์ธํ„ฐ๋ฅผ GC์—๊ฒŒ ์•Œ๋ ค์ค„ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ, UObject๊ฐ€ ์•„๋‹Œ ์‚ฌ์šฉ์ž ์ •์˜ ๊ฐ์ฒด๋ผ๋ฉด..
AddRefer~ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด์„œ GC์— ์•Œ๋ ค์ค˜์•ผ ํ•œ๋‹ค๊ณ  ๋ฐฉ๊ธˆ๋ดค๋Š”๋ฐ
๋ชจ์ˆœ๋˜๋Š” ๋ง ์•„๋‹Œ๊ฐ€..?

ํ ...

๋ฆฌํ”Œ๋ ‰์…˜๋œ UObject Raw ํฌ์ธํ„ฐ๋Š” ๊ฐ•ํ•œ ์ฐธ์กฐ?
๊ฐ•ํ•œ ์ฐธ์กฐ๋Š” ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋™์•ˆ ๊ฐ์ฒด๊ฐ€ ํ•ด์ œ๋˜์ง€ ์•Š์Œ
(๋ถˆํ•„์š”ํ•˜๊ฒŒ ์‚ด๋ฆฌ๊ณ  ์‹ถ์ง€ ์•Š์€ ๊ฒฝ์šฐ TWeakObjectPtr๋ฅผ ์‚ฌ์šฉ)

์ด๋ฅผ ์›์น˜ ์•Š๋Š” ๊ฒฝ์šฐ์—๋Š” TWeakObjectPtr์„ ์ œ๊ณตํ•œ๋‹ค๊ณ  ํ•จ
TWeakPtr์ด๋ž‘ ๋‹ค๋ฅด๋‹ค๊ณ  ํ•จ
(์ˆœํ™˜์ฐธ์กฐ๋ฅผ ์—†์• ๊ธฐ ์œ„ํ•œ ์šฉ๋„๊ฐ€์•„๋‹˜?)

IsValid()๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด๊ฐ€ ํ•ด์ œ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ธฐ๋Šฅ.

์ผ๋‹จ ์š”์•ฝ๋งŒ ํ•ด๋ณธ๋‹ค..
์–ธ๋ฆฌ์–ผ ์•ค์ง„์€ Mark & Sweep์œผ๋กœ ๊ด€๋ฆฌ๋˜๋Š” UObject๊ฐ์ฒด์™€
New Delete / ์ฐธ์กฐ์นด์šดํ„ฐ ๋ฐฉ์‹์œผ๋กœ ๊ด€๋ฆฌ๋˜๋Š” NativeCPP๊ฐ์ฒด
2๊ฐ€์ง€๊ฐ€ ํ˜ผ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์œ ์˜ํ•ด์•ผ๋งŒ ํ•œ๋‹ค๊ณ  ํ•จ.

์„œ๋กœ ์ฐธ์กฐํ•  ๋•Œ๋Š” ์œ„์˜ ์š”์†Œ๋ฅผ ์ฐธ๊ณ ํ•˜๊ณ ,

UObject๊ฐ€ NativeCPP ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•  ๋•Œ ์ฃผ์˜์‚ฌํ•ญ์€
UObject๊ฐ€ NativeCPP๋ฅผ ์†Œ์œ ํ•˜๋Š” ๊ฐœ๋…์ด ๋˜์–ด์„œ
๊ณ„์† ์‚ด์•„์žˆ๊ฒŒ ๋œ๋‹ค๊ณ  ํ•จ

NativeCPP์ด UObject๋ฅผ ์ฐธ์กฐํ•  ๋•Œ
์ž ๊น๋™์•ˆ Root Set์ด ๋˜๋Š” ํšจ๊ณผ๊ฐ€ ์žˆ์–ด์„œ
๋‚ด๊ฐ€ ํ•ด์ œํ•˜๋ฉด(๋ˆ„์ˆ˜ํ•˜๋ฉด) ์ฐธ์กฐํ•œ ๋‹ค๋ฅธ ๊ฐ์ฒด๋“ค๊นŒ์ง€ ๋ˆ„์ˆ˜๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์— ์ฃผ์˜

๊ฒฐ๋ก 
https://www.youtube.com/watch?v=VpEe9DbcZIs
์ผ๋‹จ ์˜์ƒ์„ ๋ดค๊ณ , ์š”์•ฝ์„ ํ–ˆ๋Š”๋ฐ,
TWeakObjectPtr , Raw Ptr์ด๋Ÿฐ
์ฒ˜์Œ๋ณด๋Š” ํฌ์ธํ„ฐ ๊ฐœ๋…์ด ๋‚˜์™€์„œ ์ดํ•ด๊ฐ€ ์ „ํ˜€ ๋˜์ง€ ์•Š์•˜๋‹ค.

๋จผ์ € ํฌ์ธํ„ฐ๋ถ€ํ„ฐ ๊ณต๋ถ€ํ•œ ํ›„์— GC๋ฅผ ๋‹ค์‹œ ์ดํ•ดํ•ด๋ณธ๋‹ค.

profile
Time Waits for No One

1๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2023๋…„ 7์›” 20์ผ

๋›ฐ์–ด๋‚œ ๊ธ€์ด๋„ค์š”, ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ