상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
수정하기 - LiveData와 Fragment에서의 사용법 차이점은?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
LiveData는 안드로이드 아키텍처 컴포넌트 중 하나로, Lifecycle-aware한 데이터 홀더입니다. Activity나 Fragment 등 UI 컴포넌트의 라이프사이클을 고려해서 자동으로 구독 상태를 관리해주기 때문에 메모리 누수나 UI 업데이트 문제를 줄일 수 있습니다. 하지만 LiveData를 Activity와 Fragment에서 사용할 때는 활용하는 방법과 주의점에 약간의 차이가 있습니다. 첫째, 구독(Observer) 등록 시점과 생명 주기 관점에서 차이가 있습니다. Activity에서는 보통 onCreate()나 onStart()에서 LiveData의 observe()를 호출해서 데이터 변화를 감지합니다. 이때 LifecycleOwner인 Activity가 활성화된 상태에서만 업데이트를 받기 때문에 UI가 안전하게 갱신됩니다. 반면 Fragment에서는 Fragment 자체를 LifecycleOwner로 사용하거나, Fragment의 viewLifecycleOwner를 사용할 수 있습니다. 중요한 점은 Fragment의 뷰와 Fragment의 라이프사이클이 꼭 일치하지 않는다는 것입니다. Fragment의 라이프사이클은 Fragment 인스턴스가 활성화된 상태를 의미하지만, 뷰는 onCreateView()부터 onDestroyView() 사이에만 존재합니다. 즉, Fragment의 뷰가 파괴되면 UI에 접근하면 안 되기 때문에, LiveData의 옵저버를 Fragment 자체가 아닌 viewLifecycleOwner에 등록하는 것이 안전합니다. 예를 들면, - Fragment에서 `liveData.observe(this) {...}` 처럼 Fragment를 LifecycleOwner로 사용하면, Fragment가 활성화되어 있는 동안(즉, onDestroyView 이후에도) 계속 옵저버가 남아 있을 수 있어 UI 업데이트 시점에 뷰가 없을 수도 있습니다. 이로 인해 NullPointerException 발생 가능성이 커집니다. - 반면에, `liveData.observe(viewLifecycleOwner) {...}` 로 할 경우, Fragment 뷰의 라이프사이클에 맞춰 옵저버가 등록되고 해제되어 뷰가 없어진 시점에는 자동으로 옵저버가 해제되어 안전합니다. 둘째, 데이터 공유 및 소유권 차이가 있습니다. Activity는 보통 한 화면의 루트로서 뷰모델이나 LiveData 소유권을 갖는데, Fragment는 같은 Activity 내에서도 여러 개가 존재할 수 있어 LiveData 사용 시 사용할 뷰모델 범위를 결정해야 합니다. - Fragment 내에서만 쓰는 LiveData라면 Fragment 뷰모델에 저장해서 Fragment별로 개별적으로 관리합니다. - Activity와 여러 Fragment가 데이터를 공유해야 할 때는 Activity 뷰모델을 사용해 LiveData를 공유하고, Fragment에서는 Activity를 LifecycleOwner로 하거나 직접 뷰모델을 받아 옵저버를 등록합니다. 셋째, 실제 UI 업데이트 방식과 안전성 측면에서 차이가 있습니다. Activity는 보통 생명주기가 길고 단일 뷰를 관리해서 LiveData observe() 호출 후 UI에 바로 접근해도 크게 문제되지 않는 반면, Fragment는 뷰가 파괴되고 재생성되는 과정이 반복적으로 발생하기 때문에 LiveData 변화에 따른 UI 접근 시점(즉, 옵저버가 등록된 LifecycleOwner의 상태)에 주의를 기울여야 합니다. 요약하면, - Activity에서는 LiveData.observe(this, ...)를 사용하여 LifecycleOwner인 Activity 라이프사이클을 기준으로 구독한다. Activity 뷰의 존재 주기와 LifecycleOwner가 거의 일치해 UI 안정적 업데이트 가능. - Fragment에서는 LiveData.observe(viewLifecycleOwner, ...)를 사용하여 Fragment 뷰의 라이프사이클에 맞게 옵저버를 등록하는 것이 권장된다. Fragment 라이프사이클과 뷰의 라이프사이클이 다르기 때문에 viewLifecycleOwner 기준이 안전하다. - Fragment에서 Activity 뷰모델을 사용해 데이터 공유 시에는 필요에 따라 Activity 라이프사이클 오너로 등록하기도 한다. - Fragment는 뷰 재생성과 <a href='https://sangseek.com/sangseeks/소멸/ko'>소멸</a> 과정에서 UI 접근이 안전하도록 옵저버 등록 및 해제를 주의해야한다. 이처럼 LiveData를 Activity와 Fragment에서 사용할 때 가장 큰 차이는 옵저버를 등록하는 LifecycleOwner의 선택과 UI 안전성을 보장하는 라이프사이클 관리 방식에 있습니다. Fragment는 뷰의 라이프사이클도 고려해야 하므로 `viewLifecycleOwner`를 활용하는 것이 핵심입니다. 이 차이를 이해하고 올바르게 LiveData를 사용하는 것이 안정적인 화면 구성과 버그 예방에 매우 중요합니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기