[SCC] TIL (1)

suhan0304·2024년 8월 14일

SCC - TIL

목록 보기
1/17
post-thumbnail

TIL? Today I Learned, SCC를 진행하면서 하루 배운 내용을 복습하기 위해 작성한다.


Date : 2024.08.13


Singleton Design Pattern

싱글톤 디자인 패턴은 전에 글로 다뤘던 기억이 있어서 해당 글을 참고하면 좋을 것 같다. 장점과 단점에 대해서도 알고 있는게 좋다.

[Unity] C# - 싱글톤(SingleTon) 코드

public class Singleton<T> : MonoBehaviour where T : Singleton<T>
{
    public static T Instance { get; private set; }
 
    private static System.Action<T> s_onAwake;
 
    public static void WhenInstantiated(System.Action<T> action)
    {
        if (Instance != null)
            action(Instance);
        else
            s_onAwake += action;
    }
 
    protected virtual void Awake()
    {
        if (!enabled)
            return;
 
        if (Instance != null)
        {
            Debug.LogWarning($"Another instance of Singleton {typeof(T).Name} is being instantiated, destroying...", this);
            Destroy(gameObject);
            return;
        }
    
        Instance = (T)this;
 
        InternalAwake();
 
        s_onAwake?.Invoke(Instance);
        s_onAwake = null;
    }
 
    protected void OnEnable()
    {
        if (Instance != this)
            Awake();
    }
 
    protected virtual void InternalAwake() { }
}

InvokeRepeating

InvokeRepeating("MakeRain", 0, 0.5f);

InvokeRepeating(메소드 이름, 시작 대기 시간, 반복 주기);
따라서 위의 예제는 MakeRain이라는 함수를 0초 이후에 0.5초 주기로 실행하겠다는 뜻이다.

함수를 일정 주기에 맞춰서 메소드를 호출하는 코드인데 실제 개발하면서 그렇게까지 많이 호출하지는 않았던 것 같다. 실제로는 Coroutine 이나 Unitask로 비동기처리를 했었다. 이에 대해 InvokeRepeating이나 Coroutine의 비교에 대한 글이 유니티 커뮤니티에 있길래 읽어봤다.

InvokeRepeating VS Coroutine

그렇게까지 큰 성능 차이는 미비하지만 대부분이 Coroutine을 선호하는데 제일 큰 이유는 문자열을 통해 메소드를 Invoke에 전달해야하기 때문에 버그 발생이 쉽다는 이유로 대부분이 Invoke와 InvokeRepeating을 기피한다고 한다.

진짜 성능까지 따지면서 쓰려면 UniTask가 Coroutine보다 성능이 더 좋기 떄문에 UniTask를 사용하는 것도 좋은 방안이다.


Update

Update를 사용한 프레임 별 실행에 대해서도 다뤘는데 실제로 실행 주기를 알고 있으면 크게 도움이 된다.

유니티 공식에 업로드 되어있는 이미지인데 우리가 잘 알고 있어야 하는 순서는 아래와 같다.

Awake - OnEnable - Start - ( FixedUpdate - Update - LateUpdate ) - OnDisable - OnDestroy

Update 종류에 따른 순서를 기억하고 있어야한다.


profile
Be Honest, Be Harder, Be Stronger

0개의 댓글