728x90
오늘 학습한 내용
1) 제네릭 캐싱을 통한 GetComponent 최소화
캐릭터가 적을 공격할 때, OnColliderEnter 같은 이벤트를 이용해 적의 콜라이더를 감지하고, 해당 콜라이더에 부착된 적 스크립트를 가져와 데미지를 주는 과정에서 매번 GetComponent를 호출하면 성능에 부담이 생길 수 있습니다.
제네릭을 활용한 캐싱 방식을 사용하면, 한 번 호출한 GetComponent의 결과를 저장해두고 재사용할 수 있어, 코드의 효율성과 성능이 크게 향상된다는 것을 배웠습니다.
public static class ComponentCache
{
private static Dictionary<GameObject, Dictionary<Type, Component>> cache = new Dictionary<GameObject, Dictionary<Type, Component>>();
public static T GetCachedComponent<T>(this GameObject gameObject) where T : Component
{
if (!cache.TryGetValue(gameObject, out var compDict))
{
compDict = new Dictionary<Type, Component>();
cache[gameObject] = compDict;
}
Type type = typeof(T);
if (!compDict.TryGetValue(type, out Component component))
{
component = gameObject.GetComponent<T>();
compDict[type] = component;
}
return component as T;
}
}
문제 및 해결 과정
1) 문제
캐릭터가 적을 공격할 때 적의 콜라이더를 감지하여 적 스크립트를 찾기 위해 GetComponent를 반복 호출하는 과정에서 성능 저하가 발생할 우려가 있었습니다.
시도한 해결 방법
제네릭 캐싱 메서드를 구현하여 한 번 호출한 GetComponent 결과를 저장해두고 재사용하는 방식으로 문제를 해결하였습니다.
결과
제네릭 캐싱을 적용함으로써 GetComponent 호출을 최소화하고 성능 최적화에 성공하였으며 코드의 재사용성이 크게 향상되었습니다.
새롭게 알게 된 점
제네릭 캐싱의 이점
제네릭 캐싱을 활용하면 기존 클래스를 수정하지 않고도 반복적으로 호출되는 GetComponent를 효율적으로 관리할 수 있어 성능과 코드 재사용성이 크게 증가함을 배웠습니다.
728x90
'내일배움캠프' 카테고리의 다른 글
내일배움캠프 Unity - TIL : 25.03.07 (0) | 2025.03.07 |
---|---|
내일배움캠프 Unity - TIL : 25.03.06 (0) | 2025.03.06 |
내일배움캠프 Unity - TIL : 25.03.04 (0) | 2025.03.04 |
내일배움캠프 Unity - TIL : 25.02.28 (0) | 2025.02.28 |
내일배움캠프 Unity - TIL : 25.02.27 (0) | 2025.02.27 |