💡 Android 공식 문서를 참고하여 작성한 내용입니다
https://developer.android.com/guide/components/fundamentals#ActivatingComponents
Content Provider 는 앱이 자체적으로 저장된 데이터나, 다른 앱들이 저장한 데이터에 대한 액세스 권한을 관리하도록 도와주고, 다른 앱들과 어떤 데이터를 공유할 수 있도록 해주는 구성요소이다. 다른 앱과 데이터를 공유할 수 있는 거의 유일한 방법이다.
Content Provider 는 한 앱의 데이터에, 다른 앱 (프로세스)에서 실행중인 코드를 연결하는 인터페이스 역할을 한다. 또한 데이터 캡슐화, 데이터 보안처리 등 다양한 필수 메커니즘을 제공하기 때문에 다른 앱이 앱 데이터에 안전하게 액세스하고, 이를 직접 수정할 수 있다는 장점이 있다.
따라서, 다른 앱과 데이터를 공유하는 동작을 하기 위해서는 Content Provider 가 제격이다. 추상화가 잘 되기 때문에, 어떤 데이터의 엑세스 권한에 의존하는 다른 기존 앱에 아무런 영향을 끼치지 않고, 본인의 앱 데이터베이스 (구현) 를 수정할 수 있다. 아래 예시에서처럼, SQLite 에서 다른 저장소로 변경해도 다른 앱들에게 영향이 없다.
안드로이드 프레임워크가 자체적으로 제공하는 Content Provider 들도 있다.
어느 앱에서나 액세스를 할 수 있는 녀석들이다.
이 외에도 다양한 것들을 제공하며, 필요에 따라 앱에 적절히 구현하여 사용할 수 있다.
Content Provider 는 데이터 액세스 권한에 대한 세분화된 제어 기능을 제공한다. 같은 앱 내에서만 Content Provider 에 액세스할 수 있도록 제한하거나, 다른 앱에서도 액세스할 수 있도록 풀어주는 등의 다양한 구성이 가능하다.
Content Provider 를 사용하여 앱에서 여러 데이터 저장소에 액세스하기 위한 세부 정보를 추상화할 수 있다. 예를 들어, 앱에서 SQLite DB 에 영상, 오디오 파일과 함께 구조화된 데이터를 저장하는 동작을 구현한다면, Content Provider 를 사용하여 이 데이터에 모두 액세스할 수 있다.
아래 그림에 보이는 CursorLoader
라는 객체를 사용할 수 있다. 얘는 Content Provider 를 사용하여 비동기식 쿼리를 실행하고, 앱의 UI 계층에서 결과를 반환하는 녀석이다.
오늘은 주요 4대 컴포넌트의 마지막, Content Provider 에 대하여 알아보았다. 기회가 된다면, 지금까지 다룬 주요 컴포넌트들에 대하여 자세히 알아보는 시리즈를 연재해도 괜찮을 것 같다.