using System.Collections.Generic;

using UnityEngine;


public class ObjectPool<T> where T : MonoBehaviour, IPoolable

{

    private readonly List<T> pool = new();

    private readonly Transform parent;

    private readonly T prefab;


    public ObjectPool(T prefab)

    {

        this.prefab = prefab;

        parent = new GameObject($"{typeof(T).Name}_Pool").transform;

    }


    public T Get()

    {

        T obj;

        if (pool.Count > 0)

        {

            int lastIndex = pool.Count - 1;

            obj = pool[lastIndex];

            pool.RemoveAt(lastIndex);

        }

        else

        {

            var go = Object.Instantiate(prefab, parent);

            obj = go.GetComponent<T>();

        }

        obj.OnAcquireFromPool();

        return obj;

    }


    public void Return(T obj)

    {

        obj.OnReturnToPool();

        pool.Add(obj);

    }

}

public interface IPoolable

{

    void OnAcquireFromPool();

    void OnReturnToPool();

}

코드블럭 어떻게 삽입하는지 몰라서...