์„œ๋น„์Šค
๊ต์œก ์ฒ ํ•™

Pooling System

Abstract

๐Ÿ“Œ
ํ’€๋ง์€ "๋งŒ๋“ค๊ณ  ๋ฒ„๋ฆฌ๋Š” ๋Œ€์‹  ๋Œ๋ ค ์“ด๋‹ค"๋Š” ํ•œ ๊ฐ€์ง€ ์•„์ด๋””์–ด์ž…๋‹ˆ๋‹ค. ํ”„๋ ˆ์ž„์›Œํฌ์—๋Š” ํ’€์ด ์„ธ ๊ฒน์œผ๋กœ ๋“ค์–ด ์žˆ๊ณ , ๊ทธ์ค‘ ๊ฒŒ์ž„ ์ฝ”๋“œ๊ฐ€ ์ง์ ‘ ๋งŒ์งˆ ์ผ์ด ์žˆ๋Š” ๊ฒƒ์€ ์‚ฌ์‹ค์ƒ ํ•˜๋‚˜(๋ ˆํผ๋Ÿฐ์Šค ํ’€)์ž…๋‹ˆ๋‹ค. ๋‚˜๋จธ์ง€๋Š” ์—”ํ‹ฐํ‹ฐ์™€ UI ๋ฅผ ์“ฐ๋ฉด ์ €์ ˆ๋กœ ๋•๋‹ˆ๋‹ค.
์„ธ ๊ฒน์˜ ํ’€ โ€” ๋ฌด์—‡์ด ๋ฌด์—‡์„ ์žฌ์‚ฌ์šฉํ•˜๋‚˜
ํ’€
์žฌ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ
๊ฒŒ์ž„ ์ฝ”๋“œ๊ฐ€ ํ•˜๋Š” ์ผ
ToyboxNightmare
์—”ํ‹ฐํ‹ฐ ๊ทธ๋ฃน / UI ๊ทธ๋ฃน (๋‚ด๋ถ€์ ์œผ๋กœ ์˜ค๋ธŒ์ ํŠธ ํ’€)
ํ”„๋ฆฌํŒน ์ธ์Šคํ„ด์Šค(GameObject)
ShowEntity / HideEntity ๋งŒ ๋ถ€๋ฅธ๋‹ค. ํ’€์€ ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค
์ ยทํˆฌ์‚ฌ์ฒดยท์ดํŽ™ํŠธ ์ „๋ถ€
์˜ค๋ธŒ์ ํŠธ ํ’€ (ObjectPoolComponent)
์—”ํ‹ฐํ‹ฐ๋„ UI ํผ๋„ ์•„๋‹Œ ๊ฒƒ โ€” ์›”๋“œ HP ๋ฐ”, ๋ฐ๋ฏธ์ง€ ์ˆซ์ž ๋“ฑ
ํ’€์„ ์ง์ ‘ ๋งŒ๋“ค๊ณ  Spawn / Unspawn
์ง์ ‘ ์“ฐ์ง€ ์•Š์Œ
๋ ˆํผ๋Ÿฐ์Šค ํ’€ (ReferencePool)
์ˆœ์ˆ˜ C# ๊ฐ์ฒด โ€” ์ด๋ฒคํŠธ ์ธ์ž, ์—”ํ‹ฐํ‹ฐ ๋ฐ์ดํ„ฐ
Acquire / Release
์ด๋ฒคํŠธ ์ธ์ž 7์ข…, ์—”ํ‹ฐํ‹ฐ ๋ฐ์ดํ„ฐ 7์ข…
๊ณ ๋ฅด๋Š” ๊ธฐ์ค€
โ€ข
๊ฒŒ์ž„ ์›”๋“œ์— ๋‚˜ํƒ€๋‚ฌ๋‹ค ์‚ฌ๋ผ์ง€๋Š” ๊ฒƒ โ†’ ์—”ํ‹ฐํ‹ฐ๋กœ ๋งŒ๋“ ๋‹ค. ํ’€๋ง์€ ๋”ฐ๋ผ์˜จ๋‹ค.
โ€ข
ํ™”๋ฉด์— ๋œจ๋Š” ์ฐฝ โ†’ UI ํผ์œผ๋กœ ๋งŒ๋“ ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€.
โ€ข
์œ„ ๋‘˜์— ์•ˆ ๋งž๋Š”๋ฐ ์ž์ฃผ ์ƒ๊ธฐ๋Š” GameObject โ†’ ์˜ค๋ธŒ์ ํŠธ ํ’€.
โ€ข
new ๋กœ ์ž์ฃผ ๋งŒ๋“œ๋Š” ์ž‘์€ ํด๋ž˜์Šค โ†’ ๋ ˆํผ๋Ÿฐ์Šค ํ’€.
ํ’€ ํฌ๊ธฐ๋Š” ์–ด๋””์„œ ์ •ํ•˜๋‚˜
์—”ํ‹ฐํ‹ฐ ๊ทธ๋ฃน์˜ ํ’€ ์„ค์ •์€ GameFramework.prefab ์˜ Entity ์˜ค๋ธŒ์ ํŠธ์— ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ์ œ์˜ ๊ฐ’์ž…๋‹ˆ๋‹ค.
๊ทธ๋ฃน
Instance Capacity
๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ
Player
4
์„ ํƒ ํ™”๋ฉด์˜ Girl / Boy, ํ”Œ๋ ˆ์ด ์ค‘์ธ ์บ๋ฆญํ„ฐ
Enemy
64
์  5์ข… (์Šคํฐ ํ…Œ์ด๋ธ”์˜ ๋™์‹œ ์ƒ์กด ์ƒํ•œ ํ•ฉ๊ณ„๋Š” 13)
Projectile
64
์Šฌ๋ผ์ž„ยท์•…์ทจ ํˆฌ์‚ฌ์ฒด
Effect
32
ํ”ผ๊ฒฉ ์ดํŽ™ํŠธ
Ally
2
์†Œํ™˜๋œ ์•„๊ตฐ (Sheep / Dog)
Capacity ๋Š” "ํ’€์— ๋ณด๊ด€ํ•ด ๋‘˜ ์ตœ๋Œ€ ์ˆ˜"์ด์ง€ ์Šคํฐ ์ƒํ•œ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋„˜์ณ๋„ ์Šคํฐ์€ ๋˜๊ณ , ๋„˜์นœ ๋งŒํผ์€ ํšŒ์ˆ˜๋  ๋•Œ ๋ณด๊ด€๋˜์ง€ ์•Š๊ณ  ํŒŒ๊ดด๋  ๋ฟ์ž…๋‹ˆ๋‹ค. Expire Time(์˜ˆ์ œ 60์ดˆ) ๋™์•ˆ ๋‹ค์‹œ ์“ฐ์ด์ง€ ์•Š์€ ์ธ์Šคํ„ด์Šค๋Š” Auto Release Interval(60์ดˆ)๋งˆ๋‹ค ๋„๋Š” ๊ฒ€์‚ฌ์—์„œ ์ •๋ฆฌ๋ฉ๋‹ˆ๋‹ค.
โš ๏ธ
๋ณธ๋ฌธ์„ ์ฝ์„ ๋•Œ ์ฃผ์˜ํ•  ์ 
โ€ข
๋ณธ๋ฌธ์€ ์˜ค๋ธŒ์ ํŠธ ํ’€์„ "Unity GameObject ์ „์šฉ"์ด๋ผ๊ณ  ์„ค๋ช…ํ•˜์ง€๋งŒ, ์ •ํ™•ํžˆ๋Š” ObjectBase ๋กœ ๊ฐ์‹ผ ์ž„์˜์˜ ๊ฐ์ฒด๋ฅผ ๋‹ค๋ฃน๋‹ˆ๋‹ค. ์›์ž‘์€ ๋กœ๋“œํ•œ ์—์…‹ ์ž์ฒด๋„ ์ด ํ’€๋กœ ๊ด€๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. GameObject ํ’€๋ง์€ ๊ฐ€์žฅ ํ”ํ•œ ์šฉ๋„์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.
โ€ข
"Editor Integration" ์ ˆ(์ธ์ŠคํŽ™ํ„ฐ์—์„œ ํ†ต๊ณ„ ๋ณด๊ธฐ, CSV ๋‚ด๋ณด๋‚ด๊ธฐ, ์ˆ˜๋™ ํ•ด์ œ)์€ ์ด ์—๋””์…˜์— ์—†์Šต๋‹ˆ๋‹ค. ์—๋””ํ„ฐ ํ™•์žฅ์ด ๋น ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ™์€ ์ •๋ณด๋Š” ๋Ÿฐํƒ€์ž„ Debugger ์ฐฝ์˜ Object Pool / Reference Pool ํƒญ์—์„œ ๋ด…๋‹ˆ๋‹ค.

Pooling Systems (ํ’€๋ง ์‹œ์Šคํ…œ)

Relevant source files (๊ด€๋ จ ์†Œ์Šค ํŒŒ์ผ)
โ€ข
Scripts/Editor/Inspector/ObjectPoolComponentInspector.cs
โ€ข
Scripts/Editor/Inspector/ReferencePoolComponentInspector.cs
โ€ข
Scripts/Editor/Inspector/ReferencePoolComponentInspector.cs.meta
โ€ข
Scripts/Runtime/Debugger/DebuggerActiveWindowType.cs
โ€ข
Scripts/Runtime/Debugger/DebuggerComponent.ObjectPoolInformationWindow.cs
โ€ข
Scripts/Runtime/Debugger/DebuggerComponent.ReferencePoolInformationWindow.cs
โ€ข
Scripts/Runtime/Debugger/DebuggerComponent.ReferencePoolInformationWindow.cs.meta
โ€ข
Scripts/Runtime/Debugger/DebuggerComponent.RuntimeMemoryInformationWindow.cs
โ€ข
Scripts/Runtime/Debugger/DebuggerComponent.RuntimeMemorySummaryWindow.cs
โ€ข
Scripts/Runtime/Debugger/DebuggerComponent.cs
โ€ข
Scripts/Runtime/ReferencePool.meta
โ€ข
Scripts/Runtime/ReferencePool/ReferencePoolComponent.cs
โ€ข
Scripts/Runtime/ReferencePool/ReferencePoolComponent.cs.meta
โ€ข
Scripts/Runtime/ReferencePool/ReferenceStrictCheckType.cs
โ€ข
Scripts/Runtime/ReferencePool/ReferenceStrictCheckType.cs.meta

Overview (๊ฐœ์š”)

Unity Game Framework๋Š” ๊ฒŒ์ž„ ๋‚ด ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ์ตœ์ ํ™” ๋ฐ GC(Garbage Collection) ๋ถ€ํ•˜ ๊ฐ์†Œ๋ฅผ ์œ„ํ•ด ๋‘ ๊ฐ€์ง€ ํ’€๋ง ์‹œ์Šคํ…œ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
โ€ข
Object Pool System (์˜ค๋ธŒ์ ํŠธ ํ’€ ์‹œ์Šคํ…œ): Unity GameObject ์ „์šฉ ํ’€๋ง
โ€ข
Reference Pool System (๋ ˆํผ๋Ÿฐ์Šค ํ’€ ์‹œ์Šคํ…œ): C# ๊ฐ์ฒด ์ „์šฉ ํ’€๋ง
์ด ๋‘ ์‹œ์Šคํ…œ์€ ๊ฐ์ฒด๋ฅผ ์žฌ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•˜๋ฉฐ, ๋ฐ˜๋ณต์ ์ธ ์ƒ์„ฑ/ํŒŒ๊ดด๋กœ ์ธํ•œ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ž…๋‹ˆ๋‹ค.
์ผ๋ฐ˜์ ์ธ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ์— ๋Œ€ํ•ด์„œ๋Š” Resource Management System ์ฐธ๊ณ 
Sources:
Scripts/Runtime/ReferencePool/ReferencePoolComponent.cs
Scripts/Runtime/ObjectPool/ObjectPoolComponent.cs (ํŒŒ์ผ ๋ชฉ๋ก์—๋Š” ์—†์ง€๋งŒ ์ถ”๋ก ๋จ)
Scripts/Runtime/Debugger/DebuggerComponent.ObjectPoolInformationWindow.cs
Scripts/Runtime/Debugger/DebuggerComponent.ReferencePoolInformationWindow.cs

Object Pool System (์˜ค๋ธŒ์ ํŠธ ํ’€ ์‹œ์Šคํ…œ)

์˜ค๋ธŒ์ ํŠธ ํ’€ ์‹œ์Šคํ…œ์€ Unity GameObject๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
๊ฐ์ฒด๋ฅผ ๋งค๋ฒˆ Instantiate/Destroy ํ•˜์ง€ ์•Š๊ณ  ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์—ฌ, ํŠนํžˆ ํˆฌ์‚ฌ์ฒด, ์ดํŽ™ํŠธ, UI ์š”์†Œ ๋“ฑ ์ž์ฃผ ์ƒ์„ฑ/ํŒŒ๊ดด๋˜๋Š” ์˜ค๋ธŒ์ ํŠธ์— ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

Architecture and Components (์•„ํ‚คํ…์ฒ˜ ๋ฐ ์ปดํฌ๋„ŒํŠธ)

Sources:
Scripts/Editor/Inspector/ObjectPoolComponentInspector.cs 41-45
Scripts/Editor/Inspector/ObjectPoolComponentInspector.cs 75-82
Scripts/Editor/Inspector/ObjectPoolComponentInspector.cs 83-90
Scripts/Runtime/Debugger/DebuggerComponent.ObjectPoolInformationWindow.cs 46-58

Key Features (ํ•ต์‹ฌ ๊ธฐ๋Šฅ)

โ€ข
Single/Multi-Spawn ์ง€์›:
ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋งŒ ๋™์‹œ์— ํ™œ์„ฑํ™”๋˜๋Š” ๋‹จ์ผ ์Šคํฐ ๋ชจ๋“œ์™€ ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ๋™์‹œ์— ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ€ํ‹ฐ ์Šคํฐ ๋ชจ๋“œ ์ง€์›
โ€ข
์ž๋™ ๋ฐ˜ํ™˜(Auto-Release):
์ง€์ •ํ•œ ์‹œ๊ฐ„ ํ›„ ๊ฐ์ฒด๋ฅผ ํ’€๋กœ ์ž๋™ ๋ฐ˜ํ™˜
โ€ข
์šฐ์„ ์ˆœ์œ„(Prioritization):
ํ’€ ๊ณต๊ฐ„์ด ๋ถ€์กฑํ•  ๋•Œ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ๊ฐ์ฒด๋Š” ๋” ์˜ค๋ž˜ ์œ ์ง€๋จ
โ€ข
๊ฐ์ฒด ์ถ”์ (Object Tracking):
๊ฐ ๊ฐ์ฒด์˜ ์ƒํƒœ์™€ ๋งˆ์ง€๋ง‰ ์‚ฌ์šฉ ์‹œ์  ๋“ฑ ์ƒ์„ธ ์ •๋ณด ์ถ”์ 

Using the Object Pool (์‚ฌ์šฉ ๋ฐฉ๋ฒ•)

โ€ข
์ฃผ๋กœ Prefab ์ธ์Šคํ„ด์Šค, ์ž์ฃผ ์ƒ์„ฑ/์‚ญ์ œ๋˜๋Š” Unity ์˜ค๋ธŒ์ ํŠธ ๊ด€๋ฆฌ์— ์‚ฌ์šฉ
โ€ข
๋ฐ˜ํ™˜๋œ ์˜ค๋ธŒ์ ํŠธ๋Š” ๋น„ํ™œ์„ฑํ™” ์ƒํƒœ๋กœ ์œ ์ง€๋˜๋ฉฐ, ํ•„์š”ํ•  ๋•Œ ์ฆ‰์‹œ ์žฌํ™œ์„ฑํ™” ๊ฐ€๋Šฅ

Reference Pool System (๋ ˆํผ๋Ÿฐ์Šค ํ’€ ์‹œ์Šคํ…œ)

๋ ˆํผ๋Ÿฐ์Šค ํ’€ ์‹œ์Šคํ…œ์€ C# ๊ฐ์ฒด๋ฅผ ๊ด€๋ฆฌํ•˜์—ฌ GC ๋ถ€ํ•˜๋ฅผ ์ค„์ด๋Š” ๊ฒƒ์— ์ดˆ์ ์ด ๋งž์ถฐ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
ํŠนํžˆ ์ด๋ฒคํŠธ ํŒŒ๋ผ๋ฏธํ„ฐ, ์ปค๋งจ๋“œ ์ธ์ž, ์ž„์‹œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ฒด ๋“ฑ ์งง์€ ์ƒ๋ช…์ฃผ๊ธฐ ๊ฐ์ฒด์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

Architecture and Components (์•„ํ‚คํ…์ฒ˜ ๋ฐ ์ปดํฌ๋„ŒํŠธ)

Sources:
Scripts/Runtime/ReferencePool/ReferencePoolComponent.cs 16-72
Scripts/Runtime/ReferencePool/ReferenceStrictCheckType.cs 13-34
Scripts/Editor/Inspector/ReferencePoolComponentInspector.cs 48-58
Scripts/Runtime/Debugger/DebuggerComponent.ReferencePoolInformationWindow.cs 33-41

Strict Checking (์—„๊ฒฉ ๊ฒ€์‚ฌ)

๋ ˆํผ๋Ÿฐ์Šค ํ’€์€ ๊ฐ์ฒด๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํš๋“/๋ฐ˜ํ™˜๋˜๋Š”์ง€ ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
โ€ข
ํ™œ์„ฑํ™” ์‹œ, ๊ฐ์ฒด์˜ ์˜ฌ๋ฐ”๋ฅธ ํš๋“/๋ฐ˜ํ™˜ ์—ฌ๋ถ€๋ฅผ ๊ฒ€์ฆ
โ€ข
๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋‚˜ ์ž˜๋ชป๋œ ์‚ฌ์šฉ ํŒจํ„ด์„ ํƒ์ง€ ๊ฐ€๋Šฅ
โ€ข
๊ฐœ๋ฐœ ์‹œ์ (์—๋””ํ„ฐ/๋””๋ฒ„๊ทธ ๋นŒ๋“œ ๋“ฑ)์—์„œ๋งŒ ํ™œ์„ฑํ™” ๊ฐ€๋Šฅ
ReferenceStrictCheckType ์˜ต์…˜:
โ€ข
AlwaysEnable: ํ•ญ์ƒ ํ™œ์„ฑํ™”
โ€ข
OnlyEnableWhenDevelopment: ๊ฐœ๋ฐœ ๋นŒ๋“œ์—์„œ๋งŒ ํ™œ์„ฑํ™”
โ€ข
OnlyEnableInEditor: ์—๋””ํ„ฐ์—์„œ๋งŒ ํ™œ์„ฑํ™”
โ€ข
AlwaysDisable: ๋น„ํ™œ์„ฑํ™”
Sources:
Scripts/Runtime/ReferencePool/ReferencePoolComponent.cs 51-69
Scripts/Runtime/ReferencePool/ReferenceStrictCheckType.cs 13-34

Using the Reference Pool (์‚ฌ์šฉ ๋ฐฉ๋ฒ•)

โ€ข
ํ’€๋ง ๋Œ€์ƒ ํด๋ž˜์Šค๋Š” IReference ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  public ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ๊ฐ€์ ธ์•ผ ํ•จ
โ€ข
๊ฐ์ฒด ํš๋“: ReferencePool.Acquire<T>()
โ€ข
๊ฐ์ฒด ๋ฐ˜ํ™˜: ReferencePool.Release(reference) (์ œ๋„ค๋ฆญ์ด ์•„๋‹ˆ๋ฉฐ IReference ๋ฅผ ๋ฐ›๋Š”๋‹ค)
โ€ข
์—„๊ฒฉ ๊ฒ€์‚ฌ๋Š” ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ณดํ†ต ๊ฐœ๋ฐœ/ํ…Œ์ŠคํŠธ ์‹œ์—๋งŒ ์‚ฌ์šฉ

Debugging and Monitoring (๋””๋ฒ„๊น… ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง)

๋‘ ํ’€๋ง ์‹œ์Šคํ…œ ๋ชจ๋‘ ๋””๋ฒ„๊ฑฐ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ†ตํ•ด ๋ชจ๋‹ˆํ„ฐ๋ง์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

Object Pool Information Window (์˜ค๋ธŒ์ ํŠธ ํ’€ ์ •๋ณด ์ฐฝ)

ํ‘œ์‹œ ๋‚ด์šฉ:
โ€ข
์ „์ฒด ์˜ค๋ธŒ์ ํŠธ ํ’€ ๊ฐœ์ˆ˜
โ€ข
๊ฐ ํ’€์˜ ์ƒ์„ธ ์ •๋ณด: ์ด๋ฆ„, ํƒ€์ž…, ์šฉ๋Ÿ‰
โ€ข
ํ˜„์žฌ ์‚ฌ์šฉ๋Ÿ‰
โ€ข
์ž๋™ ๋ฐ˜ํ™˜ ๊ฐ„๊ฒฉ
โ€ข
์šฐ์„ ์ˆœ์œ„ ์„ค์ •
โ€ข
๊ฐ์ฒด ์ƒํƒœ ์ •๋ณด
Sources:
Scripts/Runtime/Debugger/DebuggerComponent.ObjectPoolInformationWindow.cs 30-92
Scripts/Editor/Inspector/ObjectPoolComponentInspector.cs 25-136

Reference Pool Information Window (๋ ˆํผ๋Ÿฐ์Šค ํ’€ ์ •๋ณด ์ฐฝ)

ํ‘œ์‹œ ๋‚ด์šฉ:
โ€ข
์—„๊ฒฉ ๊ฒ€์‚ฌ ํ™œ์„ฑ ์—ฌ๋ถ€
โ€ข
์ „์ฒด ๋ ˆํผ๋Ÿฐ์Šค ํ’€ ๊ฐœ์ˆ˜
โ€ข
๊ฐ ํƒ€์ž…๋ณ„ ํ†ต๊ณ„:
โ—ฆ
์‚ฌ์šฉ ์ค‘/๋ฏธ์‚ฌ์šฉ ๊ฐ์ฒด ์ˆ˜
โ—ฆ
ํš๋“/๋ฐ˜ํ™˜ ํšŸ์ˆ˜
โ—ฆ
์ถ”๊ฐ€/์ œ๊ฑฐ ํšŸ์ˆ˜
โ€ข
ํด๋ž˜์Šค ์ด๋ฆ„ ํ‘œ๊ธฐ๋ฅผ ์ „์ฒด ์ด๋ฆ„ / ๋‹จ์ˆœ ์ด๋ฆ„์œผ๋กœ ์ „ํ™˜ ๊ฐ€๋Šฅ
Sources:
Scripts/Runtime/Debugger/DebuggerComponent.ReferencePoolInformationWindow.cs 30-86
Scripts/Editor/Inspector/ReferencePoolComponentInspector.cs 29-128

Editor Integration (์—๋””ํ„ฐ ํ†ตํ•ฉ)

ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์—๋””ํ„ฐ์—์„œ ๋‹ค์Œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:
โ€ข
ํ’€ ํ†ต๊ณ„ ๋ชจ๋‹ˆํ„ฐ๋ง (Play Mode ์ค‘ ํ™•์ธ ๊ฐ€๋Šฅ)
โ€ข
CSV๋กœ ๋ฐ์ดํ„ฐ ๋‚ด๋ณด๋‚ด๊ธฐ
โ€ข
์ธ์ŠคํŽ™ํ„ฐ์—์„œ ์ง์ ‘ ๋ฏธ์‚ฌ์šฉ ๊ฐ์ฒด ํ•ด์ œ
Sources:
Scripts/Editor/Inspector/ObjectPoolComponentInspector.cs 20-138
Scripts/Editor/Inspector/ReferencePoolComponentInspector.cs 19-152

Best Practices (๋ชจ๋ฒ” ์‚ฌ๋ก€)

โ€ข
Object Pool:
ํˆฌ์‚ฌ์ฒด, ์ดํŽ™ํŠธ, UI ๋“ฑ ์ž์ฃผ ์ƒ์„ฑ/์‚ญ์ œ๋˜๋Š” Unity GameObject ๊ด€๋ฆฌ์— ์‚ฌ์šฉ
โ€ข
Reference Pool:
์ด๋ฒคํŠธ ํŒŒ๋ผ๋ฏธํ„ฐ, ๋ช…๋ น ์ธ์ž, ์ž„์‹œ ๋ฐ์ดํ„ฐ ๋“ฑ ์งง์€ ์ˆ˜๋ช…์˜ C# ๊ฐ์ฒด ๊ด€๋ฆฌ์— ์‚ฌ์šฉ
โ€ข
์ž๋™ ๋ฐ˜ํ™˜ ์„ค์ •:
๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๊ณผ ์„ฑ๋Šฅ ๊ท ํ˜•์„ ๋งž์ถœ ์ˆ˜ ์žˆ๋„๋ก ์ ์ ˆํžˆ ์ง€์ •
โ€ข
์ ์ ˆํ•œ ์šฉ๋Ÿ‰ ์„ค์ •:
๋™์‹œ์— ํ•„์š”ํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋˜๋Š” ์ตœ๋Œ€ ์ˆ˜๋Ÿ‰๋ณด๋‹ค ์•ฝ๊ฐ„ ํฐ ๊ฐ’์œผ๋กœ ํ’€ ํฌ๊ธฐ ์„ค์ •
โ€ข
๊ฐœ๋ฐœ ์ค‘ ์—„๊ฒฉ ๊ฒ€์‚ฌ ํ™œ์„ฑํ™”:
๊ฐœ๋ฐœ ๋‹จ๊ณ„์—์„œ๋Š” Reference Pool์˜ Strict Checking์„ ์ผœ์„œ ๋ฌธ์ œ๋ฅผ ์กฐ๊ธฐ์— ๋ฐœ๊ฒฌ,
๋ฆด๋ฆฌ์ฆˆ ๋นŒ๋“œ์—์„œ๋Š” ์„ฑ๋Šฅ์„ ์œ„ํ•ด ๋น„ํ™œ์„ฑํ™”