https://developer.android.com/guide/components/fundamentals#Components
안드로이드 운영체제는
스마트폰의 입출력장치(네트워크, 디스플레이, 저장소 등)를
제어한다.
안드로이드 앱은
운영체제가 제공하는 프레임워크를 사용해 이런 입출력 장치를
사용 할 수 있다.
안드로이드 앱은 안드로이드 운영체제가 정하는 방식에 따르지 않고는
동작할 수 없다.
안드로이드 운영체제는 기본적으로
애플리케이션 간에 정보나 데이터 접근을
차단하고 있다.
하지만 시스템이 알지 못하는 접근에 대해서 앱을 보호하기 위해
차단하는 것이지 다른 어떤 운영체제들보다도
앱 간에 서로 협동하고 정해진 규칙에 따라 데이터를 공유하여
사용자에게 서비스를 제공할 수 있는 환경을 제공한다.
운영체제를 국가로 본다면 개인의 보호 차원에서
서로에게 허락 없이 접근하거나 정보를 가져가서는 안 되지만
서로 협의하고 국가에서 정해진 규칙에 따른다면
서로 간의 상호작용을 적극 권장하는 것이다.
컨텐트 프로바이더에 대한 생각을 정리하기 전에 서론이 너무 긴 것 같다.
애플리케이션에서 데이터를 공유하는 방법
앱은 안드로이드 운영체제에서 하나의 사용자이다.
사용자들에겐 별도의 독립적인 저장소가 제공된다.
여기에는 누구도 접근할 수 없다.
각 앱엔 별도의 VM이 제공된다.
각 사용자에게 별도의 컴퓨터가 제공되는 것과 같다.
이는 더욱 다른 앱에 접근하는 방법을 차단한다.
default가 보안 100%가 적용된 상태라고 본다.
앱을 개발하다보면 다른 앱의 데이터가 반드시 필요한 경우가 있다.
대표적으로 연락처 앱에 있는 연락처들이 필요하거나,
사진 앱에저장되어 있는 사진 데이터를 필요로 할 경우가 있다.
이렇게 하나의 앱에서 관리하는 데이터를 다른 앱에서도 사용할 수 있는
기능을 구현하고자 할 경우 ContentProvider를 사용한다.
앱 내부에 있는 데이터를 공유할 수도 있고,
내 앱에서만 사용하는 API를 사용해 서버에 있는 데이터를 전달 할 수도 있다.
컴포넌트, 진입점
안드로이드에는 4개의 컴포넌트가 있고
이 중의 하나가 ContentProvider 이다.
다른 앱에서는 내 앱의 정보에 접근할 수 없기 때문에
반드시 컴포넌트를 통해 원하는 정보를 전달 받아야 한다.
그리고 그 원하는 기능은 내 앱의 특정 컴포넌트를 통해서만
원하는 정보를 얻어 낼 수 있다.
정보를 얻어 내기 위해서는 현재 시스템에서 나에게 쥐어준 제어권을
그 다른 앱의 컴포넌트에 넘겨줘야 한다.
앱들은 각자의 로봇에 앉아 로봇을 제어하지만
전기(제어권)는 오로지 하나의 로봇에만 주어진다고 볼 수 있다.
이 제어권이 넘어올 때 컴포넌트 입장에선 나의 진입점에 들어왔다고 볼 수 있다.
진입점에 들어오는 순간 컴포넌트는 시스템과 상호작용(내 저장소에 있는 데이터를 요청하거나, 네트워크를 요청하는 등) 할 수 있다.
컨텐트 프로바이더는 제어권을 얻게 되면 Intent를 통해
어떤 데이터를 필요로 하는지 확인하고
데이터를 얻으면 그 데이터를 Intent에 담아 제어권과 함께
다시 되돌려보낸다.
Content Provider을 통해서 편리하고 안전하게 데이터를 공유할 수 있다.
(물론 안전하게 제공하는 것은 앱의 몫이다. 운영체제는 함부로 접근하는 것만 막아줄 뿐..)
'안드로이드 가이드 > 기본 개념' 카테고리의 다른 글
[안드로이드] 기본 개념 - 브로드케스트 리시버(Broadcast receivers) (0) | 2024.09.27 |
---|---|
[안드로이드] 기본 개념 - 서비스(Service) (0) | 2024.09.24 |
[안드로이드] 기본 개념 - 액티비티(Activities) (0) | 2024.09.12 |
[안드로이드] 기본 개념(Application fundamentals) (0) | 2024.08.08 |