Unity씬과 데이터

Addressables 로드, 해제, 수명주기

`LoadAssetAsync`, `InstantiateAsync`, `AsyncOperationHandle`, release 시점을 Addressables 수명주기 관점에서 정리합니다.

마지막 수정 2026년 3월 22일

기본 패턴

csharp
AsyncOperationHandle<GameObject> handle = enemyRef.LoadAssetAsync<GameObject>();

설명

  • Addressables를 실제로 쓸 때 가장 중요한 것은 "로드"보다 "언제 해제할 것인가"입니다. 이 시스템은 참조 카운트와 핸들을 통해 수명주기를 관리하므로, 로드만 하고 release를 잊으면 메모리 흐름이 바로 흐려집니다.
  • LoadAssetAsync<T>는 에셋 자체를 로드하고, InstantiateAsync는 인스턴스 생성까지 포함합니다. 여러 번 생성할 프리팹이면 asset을 한 번 로드해 두고 직접 instantiate하는 방식이 맞을 때도 있고, 수명주기를 단순화하려면 InstantiateAsync가 더 낫기도 합니다.
  • AsyncOperationHandle은 단순히 "결과를 담는 변수"가 아니라 로드 작업과 수명주기를 대표하는 핸들입니다. 완료 여부, 진행률, 결과, release 시점이 여기에 묶입니다.
  • 씬과 프리팹, UI 리소스, 캐릭터 스킨처럼 자산 종류에 따라 해제 정책이 달라집니다. 한 번만 잠깐 쓰는 자산은 사용 직후 해제하고, 세션 내내 쓰는 공용 자산은 더 오래 유지할 수 있습니다.
  • 그래서 Addressables 도입 시에는 API 자체보다 "누가 로드하고, 누가 release하고, 같은 자산을 여러 시스템이 공유할 때 정책을 어떻게 맞출 것인가"를 먼저 정하는 편이 좋습니다.

빠른 정리

항목설명
LoadAssetAsync<T>에셋을 비동기로 로드
InstantiateAsync로드와 인스턴스 생성을 함께 처리
AsyncOperationHandle결과와 수명주기를 대표하는 핸들
Addressables.Release더 이상 쓰지 않는 에셋 해제
핵심 질문누가 소유하고 언제 해제하는가

주의할 점

Addressables에서 가장 흔한 실수는 "불러왔으니 끝"이라고 생각하는 것입니다. 핸들 관리와 release 정책이 없으면 디버깅이 어려운 메모리 누수처럼 보이는 문제가 생기기 쉽습니다.

참고 링크

3 sources