NativeOnListItemObjectSet(12.10)

이정국(PBD)·2025년 12월 10일

TIL

목록 보기
69/70

NativeOnListItemObjectSet 은 언리얼 엔진
(UMG) 자체 내장 함수(Native Function)

리스트뷰에 데이터가 들어갈 때마다 호출되는 함수이지만,
정확히 어떤 시점에 불리는지 알면 나중에 버그 잡을 때 훨씬 편함.

1. 정체: IUserObjectListEntry 인터페이스

  • 이 함수는 IUserObjectListEntry라는 인터페이스에 정의되어 있음.
  • 리스트뷰가 "야, 너 내 부하(Entry)로 일하려면 이 규칙을 따라야 해!"라고 정해둔 규칙.
    • 역할: "데이터(Object)를 주면 → 위젯 화면(UI) 갱신
    • 파라미터: UObject* ListItemObject

2. 호출 타이밍: "데이터가 1개씩 넣어질 때" + α

  • AddItem을 할 때도 불리지만, 더 중요한 건 스크롤 할 때.
  • 이걸 "UI 가상화(Virtualization)"라고 하는데, 이 개념이 정말 중요함.

상황 예시

방이 1,000개가 있고, 화면에는 한 번에 5개만 보인다고 가정해보자.

    1. 처음 켤 때:
      ◦ 언리얼은 위젯을 1,000개 만들지 않음. 딱 6~7개만 만듦.
      ◦ 1번~5번 데이터에 대해 NativeOnListItemObjectSet이 호출됨.
    1. 스크롤을 내릴 때 (재활용):
      ◦ 스크롤을 내려서 1번 방이 화면 위로 사라지고, 6번 방이 아래에서 올라온다면?
      ◦ 이때 언리얼은 6번 위젯을 새로 만드는 게 아니라,
      안 보이게 된 1번 위젯을 뜯어다가 6번 데이터만 덮어씌워서 재활용함.
      ◦ 이 순간! "야, 너 이제 1번 방 아니고 6번 방이야. 간판 바꿔 달아!"
      하면서 NativeOnListItemObjectSet이 또 호출됨.

3. 결론: 개발자가 할 일

  • 그래서 이 함수 안에는
    "데이터를 받아서 텍스트나 이미지를 세팅하는 코드"만 넣어야 함.
  • O (좋음): Text->SetText(...), Image->SetBrush(...)
  • X (나쁨): CreateWidget, BindEvent
    (여기서 바인딩을 계속 추가하면 스크롤 할 때마다
    이벤트가 중복으로 연결될 수 있어 주의가 필요함!)

요약

  • 언리얼 자체 코드인가? -> YES. (엔진이 자동으로 호출해 줌)
    -언제 호출되나? -> 데이터가 처음 들어올 때
    스크롤 해서 화면에 새로 나타날 때마다(재활용될 때마다).
profile
창백한 푸른점 속 작은점

0개의 댓글