안드로이드에는 어플리케이션간의 경계가 없다라고 말을 합니다. 안드로이드에서만 찾아볼 수 있는 가장 재미있는 특성중의 하나인 경계가 없다는 것에 대해서 살펴보겠습니다. 

먼저 APK 는 Application Package를 의미하는 하나의 파일입니다. 보통 하나의 어플리케이션은 하나의 APK파일에 묶여서 배포되게 됩니다. 그리고 하나의 APK내에는 여러개의 Activity가 존재합니다. Activity라는 것은 보통 하나의 화면을 구성하는 UI단위를 말합니다. 예를 들어 기본 카메라 어플리케이션에서, 비디오를 프리뷰하고 사진을 찍는 UI와 사진을 찍은 후에 여러 사진을 탐색하고 고를 수 있는 UI 그리고 골라진 하나의 사진을 보는 UI 등으로 구분할 수 있고 각각은 서로 다른 Activity로 구현되어있습니다. 보통의 경우 하나의 어플리케이션안에 여러 Activity들을 구성해서 프로그램을 구성하게 됩니다.

그런데 안드로이드만의 특이한 점이라고 한다면 어플리케이션 내의 Activity뿐만이 아니라 다른 어플리케이션의 Activity를 호출해서 사용할 수가 있다는 것입니다. 예를 들어 그림 편집 어플리케이션을 새로 작성한다고 하였을 때 기존의 사진을 탐색하고 고를 수 있는 UI는 기본 카메라 어플리케이션에 있는 Activity를 그대로 가져다쓸 수가 있습니다. 쉽게 생각해서 남이 잘 만들어놓은 Activity를 소스 코드 없이도 쉽게 재사용할 수 있다는 개념으로 생각할 수 있습니다. 여기서 어플리케이션이 Activity를 호출하고 실행하는 과정에서 다른 어플리케이션의 Activity까지 호출할 수 있기 때문에 어플리케이션의 경계가 허물어졌다고 이야기를 합니다. 그래서 이렇게 서로 다른 어플리케이션에 존재하는 연관된 Activity의 집합을 Task라고 합니다.

그리고 또 하나 재미있는 것은 기존에 어플리케이션에서 사용하고 있던 Activity를 새로운 어플리케이션이 자신이 가져있는 Activity로 대체할수도 있다는 것입니다. 예를 들어 기본 카메라 어플리케이션의 사진을 탐색하고 고를 수 있는 UI를 새로운 어플리케이션을 설치합으로써 바꿔버릴 수 있습니다. 보통의 OS에서는 어플리케이션에 맘에 안드는 부분이 있으면 별도의 독립된 어플리케이션을 전부 만들어야 하지만 안드로이드는 데이터만 잘 정의되어 있으면 그 데이터를 다루는 UI부분은 얼마든지 새로운 Activity로 갈아끼울 수 있게 되어있습니다. 

안드로이드의 데이터와 인텐트 시스템은 웹에서 사용되는 REST 구조를 따르고 있고, 경계가 허물어지는 어플리케이션은 웹에서의 매쉬업을 생각나게 합니다. 웹에서의 혁신을 가능하게 했던 중요한 요소들을 어플리케이션의 아키텍쳐에 반영한 것이 인상적입니다. 구글이 만들었기에 그 사상이 그대로 반영된 것이겠지요. 

아이폰에서 하나의 어플이 하나의 비디오, 오디오와 같은 미디어처럼 생각되고 관리된다면, 안드로이드에서는 웹과 같이 데이터를 중심으로 어플들이 뒤섞일 수 있습니다. 지금은 안드로이드도 아이폰과 별반 다르지 않게 어플리케이션이 만들어지고 있는 것처럼 보이지만 결국 나중에 둘간에 차이가 많이날 수 있는 부분은 바로 이 부분일 거라고 생각합니다. 그래서 제가 안드로이드에서의 데이터관리에 관심을 가지고, Android Content Browser 프로젝트를 시작하고 그것을 의미있다고 생각하는지에 대한 이유입니다. 


..쓰다보니 블로그 글쓰는 것처럼 되어버렸네요. 블로그에도 옮겨야겠습니다.