SlideShare a Scribd company logo
1 of 19
AndroidAnnotations
Sample Application 둘러보기
작성자 – 김태희 최종 수정일: 151202
Sample
Application
앞서 AndroidAnnotations의 구조를 살펴보았습니다.
실제 어플리케이션을 통해 어떻게 활용되는지
살펴보도록 하겠습니다.
Sample
Application
이번에 보여드릴 것은
메신저 형식의 UI를 가지고,
Rest 방식으로 구성된 에코 서버와
통신하는 어플리케이션!
Sample
Application
REST Server
Android
MainActivity
MessageReceiver
ChatService
MessageReceiver
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

More Related Content

Similar to Jurano강의 lec2. sample application 둘러보기

3일차-닷넷 분산 기술의 이해 (인피니트 강의자료)
3일차-닷넷 분산 기술의 이해 (인피니트 강의자료)3일차-닷넷 분산 기술의 이해 (인피니트 강의자료)
3일차-닷넷 분산 기술의 이해 (인피니트 강의자료)
KH Park (박경훈)
 
마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017
마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017
마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017
Amazon Web Services Korea
 
220302 사내세미나_오정민 REST API와 크롤링
220302 사내세미나_오정민 REST API와 크롤링220302 사내세미나_오정민 REST API와 크롤링
220302 사내세미나_오정민 REST API와 크롤링
DataUs
 
C Language II
C Language IIC Language II
C Language II
Suho Kwon
 
008. 싸이월드 앱스토어 api 소개 및 활용법 안내 sk컴즈 장원익 과장
008. 싸이월드 앱스토어 api 소개 및 활용법 안내 sk컴즈 장원익 과장008. 싸이월드 앱스토어 api 소개 및 활용법 안내 sk컴즈 장원익 과장
008. 싸이월드 앱스토어 api 소개 및 활용법 안내 sk컴즈 장원익 과장
Cyworld AppStore (SK Communications)
 

Similar to Jurano강의 lec2. sample application 둘러보기 (20)

3일차-닷넷 분산 기술의 이해 (인피니트 강의자료)
3일차-닷넷 분산 기술의 이해 (인피니트 강의자료)3일차-닷넷 분산 기술의 이해 (인피니트 강의자료)
3일차-닷넷 분산 기술의 이해 (인피니트 강의자료)
 
Androidpn guide-0.5.0-ko
Androidpn guide-0.5.0-koAndroidpn guide-0.5.0-ko
Androidpn guide-0.5.0-ko
 
RPC에서 REST까지 간단한 개념소개
RPC에서 REST까지 간단한 개념소개RPC에서 REST까지 간단한 개념소개
RPC에서 REST까지 간단한 개념소개
 
Aws lambda 와 함께 서버리스 서비스 만들기
Aws lambda 와 함께 서버리스 서비스 만들기Aws lambda 와 함께 서버리스 서비스 만들기
Aws lambda 와 함께 서버리스 서비스 만들기
 
마이크로서비스 아키텍처와 DevOps 기술 - Amazon 사례를 중심으로 (윤석찬)
마이크로서비스 아키텍처와 DevOps 기술 - Amazon 사례를 중심으로 (윤석찬)마이크로서비스 아키텍처와 DevOps 기술 - Amazon 사례를 중심으로 (윤석찬)
마이크로서비스 아키텍처와 DevOps 기술 - Amazon 사례를 중심으로 (윤석찬)
 
마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017
마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017
마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017
 
SpringMVC 전체 흐름 알아보기
SpringMVC 전체 흐름 알아보기SpringMVC 전체 흐름 알아보기
SpringMVC 전체 흐름 알아보기
 
Open API 발표자료 - 김연수
Open API 발표자료 - 김연수Open API 발표자료 - 김연수
Open API 발표자료 - 김연수
 
병렬처리
병렬처리병렬처리
병렬처리
 
220302 사내세미나_오정민 REST API와 크롤링
220302 사내세미나_오정민 REST API와 크롤링220302 사내세미나_오정민 REST API와 크롤링
220302 사내세미나_오정민 REST API와 크롤링
 
React native study
React native studyReact native study
React native study
 
JCO 발표자로 - 누구도 들려주지 않는 Service 이야기
JCO 발표자로 - 누구도 들려주지 않는  Service 이야기JCO 발표자로 - 누구도 들려주지 않는  Service 이야기
JCO 발표자로 - 누구도 들려주지 않는 Service 이야기
 
C Language II
C Language IIC Language II
C Language II
 
모두싸인의 AWS 성장기
모두싸인의 AWS 성장기모두싸인의 AWS 성장기
모두싸인의 AWS 성장기
 
RAD Studio 라이브바인딩 이해하기
RAD Studio 라이브바인딩 이해하기RAD Studio 라이브바인딩 이해하기
RAD Studio 라이브바인딩 이해하기
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)
 
이야기를 서비스로 바꾸는 체계적인 방법: 디자인 모델 시스템 (SLADER Design Model System) (정상혁)
이야기를 서비스로 바꾸는 체계적인 방법: 디자인 모델 시스템 (SLADER Design Model System) (정상혁)이야기를 서비스로 바꾸는 체계적인 방법: 디자인 모델 시스템 (SLADER Design Model System) (정상혁)
이야기를 서비스로 바꾸는 체계적인 방법: 디자인 모델 시스템 (SLADER Design Model System) (정상혁)
 
Sencha Ext JS 구축사례 : 코드스미스 툴즈
Sencha Ext JS 구축사례 : 코드스미스 툴즈Sencha Ext JS 구축사례 : 코드스미스 툴즈
Sencha Ext JS 구축사례 : 코드스미스 툴즈
 
WAS의 동작과 WEB, Servlet, JSP_Wh apm
WAS의 동작과 WEB, Servlet, JSP_Wh apmWAS의 동작과 WEB, Servlet, JSP_Wh apm
WAS의 동작과 WEB, Servlet, JSP_Wh apm
 
008. 싸이월드 앱스토어 api 소개 및 활용법 안내 sk컴즈 장원익 과장
008. 싸이월드 앱스토어 api 소개 및 활용법 안내 sk컴즈 장원익 과장008. 싸이월드 앱스토어 api 소개 및 활용법 안내 sk컴즈 장원익 과장
008. 싸이월드 앱스토어 api 소개 및 활용법 안내 sk컴즈 장원익 과장
 

Jurano강의 lec2. sample application 둘러보기