본문 바로가기

about Android......

AIDL

AIDL은 Android Interface description language의 약자입니다. 말그대로 인터페이스를 정의하는 언어입니다. AIDL파일을 열어보면 Java에서와 비슷하게 Method를 정의하는 코드를 볼 수 있습니다. Corba의 IDL과 같은 것을 Android에서 사용한다고 생각하면 됩니다. AIDL Tool은 AIDL파일에 적합한 Java Code를 자동으로 생성시켜주는 툴입니다. (Corba는 Java의 RMI와 비슷한 역할을 하는 표준이라고 생각하시면 됩니다.)AIDL은 보통 RPC(Remote Procedure Call)에서 많이 사용됩니다. 서로 다른 프로세스 혹은 네트워크간에 함수를 호출하기 위해서는 인터페이스가 바뀔때마다 언어와 구조에 맞는 코드를 생성해주어야 하는데. 실제 코드를 생성하는 부분은 툴에 맞기고 프로그래머는 IDL만 정의하도록 구성됩니다. AIDL은 Android에서 사용되는 IPC (Inter process communication), 안드로이드 구조를 이야기할때 Binder라고 일컬어지는 부분을 사용하기 위해서 정의합니다. Remote Service 라는 것은 같은 프로세스가 아니라 다른 프로세스에서 오는 함수 호출을 처리하는 Service이고 그것을 연결해주는데 Binder가 사용되고 있습니다. 그 Binder를 사용하는 코드를 자동으로 생성시켜주는 것이 AIDL이지요.Binder가 Android 프레임워크의 근간이되는 중요한 역할을 하고 있습니다만 머 실제 어플리케이션에서 그 존재를 알아야할일은 많이 없습니다. APIDemos 예제에서 메시지가 뜨는 과정이 중요한 것이지 그 메시지가 보여지는 것이 중요한 것은 아닙니다. RemoteService는 다른 어플리케이션 혹은 다른 프로세스에서 호출될 수 있는 서비스를 생성할때 사용한다고 이해하시면 됩니다.

 

"IDL 정의"는 AIDL파일로 Java 파일이 자동 생성되는 것이구요. 개발환경에 따라 차이는 있지만 당연히 Java 가 컴파일 되기 전에 생성됩니다. ApiDemos 프로젝트에 보시면 aidl파일과 그에 해당하는 Java 파일이 생성되어 있는 것을 보실수 있습니다.폰북 정보와 같은 것은 Content Provider를 통해서 제공됩니다. 그리고 기본으로 제공하는 기능들은 SDK의 함수 콜을 통해서 간단히 사용할 수 있구요.물론 그 내부에서는 Binder와 IPC를 사용하고 있는 것이지요.IPC는 프로세스 간에 커뮤니케이션을 총칭하는 것이지요. 당연히 Binder에서도 내부적으로 Shared Memomry를 이용하구요. AIDL은 IPC를 더 추상화해서 로컬에 있는 클래스와 오브젝트를 사용하는 것과 똑같은 방식으로 원격 객체를 접근시켜주는 매게체 역할을 한다고 생각하시면 됩니다.