안드로이드 AIDL 문법(Android AIDL Syntax)
자주 받는 질문중의 하나는 “AIDL의 정확한 문법이 어떻게 되는가?” 입니다. 안드로이드의 문서에는 예제 형태로만 설명되어 있을 뿐 형식화된 문법이 제시되지 않고 있습니다. 대충 알고 대충 써라? 천만의 말씀.
안드로이드(Android) 1.6 AIDL의 BNF Grammar 입니다. Yacc 문법을 따릅니다.
document: document_items | headers document_items ; headers: package | imports | package imports ; package: PACKAGE ; imports: IMPORT | IMPORT imports ; document_items: | document_items declaration ; declaration: parcelable_decl | interface_decl ; parcelable_decl: PARCELABLE IDENTIFIER ';' ; interface_header: INTERFACE | ONEWAY INTERFACE ; interface_decl: interface_header IDENTIFIER '{' interface_items '}' ; interface_items: | interface_items method_decl ; method_decl: type IDENTIFIER '(' arg_list ')' ';' | ONEWAY type IDENTIFIER '(' arg_list ')' ';' ; arg_list: | arg | arg_list ',' arg ; arg: direction type IDENTIFIER ; type: IDENTIFIER | IDENTIFIER ARRAY | GENERIC ; direction: | IN | OUT | INOUT ;
PARCELABLE, INTERFACE, IN, OUT, INOUT, ONEWAY 는 각각 키워드(Keyword) parcelable, interface, in, out, inout, oneway를 뜻하고, IMPORT, PACKAGE 는 각각 import, package 문장 전체를 뜻합니다. ARRAY 는 하나 이상의 []를 뜻하고, GENERIC 은 Collection<Object,String>과 같은 Java Generic 표현을 뜻합니다. IDENTIFIER 는 대략 Java 의 클래스 명으로 쓸 수 있는 문자열이라고 보시면 됩니다. 주석 관련 구문 요소들은 생략했습니다.
SDK 의 AIDL 설명에는 나오지 않지만, oneway 키워드를 인터페이스 또는 메쏘드 앞에 붙일 수 있음을 알 수 있습니다. One-way call 에 대한 설명은 android.os.IBinder.FLAG_ONEWAY 에 대한 SDK 문서에 등장합니다. 비록 AIDL 에서의 사용법을 설명하고 있지는 않지만, 메쏘드 실행이 끝나기를 기다리지 않고 호출 즉시 복귀하는 방법을 제공하고 있음을 알 수 있습니다. AIDL 에서 oneway 로 지정한 메쏘드들의 Proxy 는 모두 transact() 를 호출할 때 FLAG_ONEWAY 를 포함하게 됩니다. 인터페이스에 oneway 를 지정하면 모든 메쏘드에 oneway 를 지정한 효과가 발생합니다. 다중 배열은 지원되는 반면 인터페이스 계승은 지원되지 않음을 확인할 수 있습니다.
'old > Basic' 카테고리의 다른 글
Android Flow Diagram (0) | 2010.07.06 |
---|---|
JNI (0) | 2010.07.06 |
Android Bitmap Object Resizing Tip (0) | 2010.07.06 |
Handler (0) | 2010.07.06 |
aidl (0) | 2010.07.06 |