Upload
ju-ri-seo
View
536
Download
4
Embed Size (px)
Citation preview
AndroidAnnotationsSample Application 둘러보기
작성자 – 김태희 최종 수정일 : 151202
Sample Application
앞서 AndroidAnnotations 의 구조를 살펴보았습니다 .
실제 어플리케이션을 통해 어떻게 활용되는지살펴보도록 하겠습니다 .
Sample Application
이번에 보여드릴 것은
메신저 형식의 UI 를 가지고 ,Rest 방식으로 구성된 에코 서버와
통신하는 어플리케이션 !
Sample Application
REST Server
Android
MainActivityMessageReceiv
er
ChatServiceMessageReceiv
er
RestTemplate
어플리케이션의 구조는 다음과 같습니다 .
메신저의 구조를 본따 중간에 서비스를 두었습니다 .
Sample Application
주요 부분 로직만 간단히 집고 넘어가도록 하겠습니다 .https://github.com/JuranoSaurus/SampleChatting/releases/tag/chatting-0.1.0
UI 를 제공하는 Activity 입니다 .
메시지를 받아 사용자에게 보여주고 ,메시지를 보낼 수 있는 역할을 합니다 .
통신을 담당하는 Service 입니다 .
사용자로부터 전달받은 메시지를 서버로 전달하는 역할을 합니다 .
통신을 수행하는 AsyncTask 입니다 .
서버로 Post 요청을 보내고 ,받은 응답을 사용자에게 전달합니다 .
Sample Application
우리가 익숙하게 볼 수 있는 어플리케이션의 코드였습니다 .
여기에 AndroidAnnotations 를 적용하면 어떻게 될까요 ?https://github.com/JuranoSaurus/SampleChatting/releases/tag/chatting-0.1.1
Activity 에 AA 를 다음과 같이 적용해 보았습니다 .
먼저 눈에 띄는 건 라인 수의 감소입니다 . (135 -> 101 라인 )
그리고 onCreate() 에서의 findViewById() 호출이 없다는 것을 알 수 있습니다 .
좀 더 자세히 보면 , Button 필드의 선언조차 없다는 것을 알 수 있습니다 .
기존 부분에서 가장 if ~ else 가 많이 반복되고 , 지저분한 부분인 BroadcastReceiver 부분이 눈에 띄게 바뀌었습니다 .특정 Action 에 대해 메소드 형태로 관리되는 것을 확인할 수 있습니다 .
Service 와 AsyncTask 에 AA 를 다음과 같이 적용해 보았습니다 .
AsyncTask 에 있던 빨간 박스 부분의 코드들이 Service 로 합쳐졌음에도 불구하고 , 라인 수는 오히려 줄어들었습니다 . (93 + 72 -> 78 라인 )
또 , 앞쪽의 Activity 와 마찬가지로 BroadcastReceiver 부분이 눈에 띄게 깔끔해졌습니다 .
그러면 POST 요청을 하는 부분은 어디에 명시되어 있을까요 ?
Post 요청하는 부분이 Interface 로 바뀐 것을 볼 수 있습니다 .
단지 annotation 이 적용된 메소드를 선언하는 것만으로 요청을 보낼 수 있습니다 .
패키지 모습의 변화입니다 . 재부팅시 사용할 ChatWaker 가 삭제된 것과 , AsyncTask 인 RestProtocol 이 AA 적용 이후 Interface 로 변화된 것 외에 큰 차이점은 없습니다 .
@Receiver
잠깐 ! 저는 BroadcastReceiver 도등록 / 해제한 적이 없어요 ! 어찌 된 일이죠 ?
Generated Code
답은 바로 generate 된 코드입니다 . APT 가 위와 같이 annotation 을 처리하여 코드를 생성해 줍니다 . 아래쪽 빨간 박스 부분에 Action 을 등록하는 부분이 보입니다 . 지금은 가려져 보이지 않지만 onDestroy() 에서는 unregisterReceiver() 가 호출됩니다 .
@Click
Button 을 선언하지 않고 사용한 건 어떻게 된 걸까요 ?
Activity 가 generate 된 코드입니다 .
우리는 Button 을 선언한 적이 없지만 , 생성된 코드에서는 선언을 비롯해 findViewById() 와 setOnClickListener()를 통해 일반적인 안드로이드 코드로 바꾸어 주는 것을 볼 수 있습니다 .
@More
즐거우셨나요 ? ^_^
다음 편부터는 각각의 컴포넌트들에 대한사용법과 특징을 예시를 통해 알아보도록 하겠습니다 .
Thank you