내일배움캠프/TIL

[내배캠][Unity6기][TIL] 동적 생성 메서드 경로 설정 리팩토링

binary는 호남선 2024. 12. 27. 21:14

Resources.Load로 동적 생성을 할 때 Resource 폴더 내 경로를 통해 오브젝트를 가져온다.

이때 메서드 내에 경로 설정을 해놓은 경우 오타 발생 시 문제점을 한 번에 파악하기 어렵고, 폴더 이동 시 해당 메서드 내 문자열을 찾아 변경해주어야 하므로 유지보수가 힘들다.

const string으로 경로명을 변수처럼 사용하면 이러한 문제점을 해결할 수 있다.

 

[ 수정 전 ]

public class UIManager : SingletonBase<UIManager>
{
    public T Show<T>(string path) where T : UIBase
    {
        string uiName = typeof(T).ToString();
        UIBase go = Resources.Load<UIBase>(path + uiName);
        var ui = Load<T>(go, uiName);
        uiList.Add(ui);
        ui.Opened();
        
        return (T)ui;
    }
 }
public class GameManager : SingletonBase<GameManager>
{
    private IEnumerator EndGameProcess<T>() where T : UIBase
    {
        Time.timeScale = 0;
        yield return new WaitForSecondsRealtime(0.5f);
        UIManager.Instance.Show<T>("UI/UIPopup/");
    }
}

 

[ 수정 후 ]

public class UIManager : SingletonBase<UIManager>
{
    private const string _popupPath = "UI/UIPopup/";
    
    private T Show<T>(string path) where T : UIBase
    {
        string uiName = typeof(T).ToString();
        UIBase go = Resources.Load<UIBase>(path + uiName);
        var ui = Load<T>(go, uiName);
        uiList.Add(ui);
        ui.Opened();
        
        return (T)ui;
    }
    
    public T ShowPopup<T>() where T : UIBase
    {
        return Show<T>(_popupPath);
    }
 }
public class GameManager : SingletonBase<GameManager>
{
    private IEnumerator EndGameProcess<T>() where T : UIBase
    {
        Time.timeScale = 0;
        yield return new WaitForSecondsRealtime(0.5f);
        UIManager.Instance.ShowPopup<T>();
    }
}