jurano강의 lec2. sample application 둘러보기

19
AndroidAnnotations Sample Application 둘둘둘둘 둘둘둘 – 둘둘둘 둘둘 둘둘둘 : 151202

Upload: ju-ri-seo

Post on 15-Apr-2017

536 views

Category:

Software


4 download

TRANSCRIPT

Page 1: Jurano강의 lec2. sample application 둘러보기

AndroidAnnotationsSample Application 둘러보기

작성자 – 김태희 최종 수정일 : 151202

Page 2: Jurano강의 lec2. sample application 둘러보기

Sample Application

앞서 AndroidAnnotations 의 구조를 살펴보았습니다 .

실제 어플리케이션을 통해 어떻게 활용되는지살펴보도록 하겠습니다 .

Page 3: Jurano강의 lec2. sample application 둘러보기

Sample Application

이번에 보여드릴 것은

메신저 형식의 UI 를 가지고 ,Rest 방식으로 구성된 에코 서버와

통신하는 어플리케이션 !

Page 4: Jurano강의 lec2. sample application 둘러보기

Sample Application

REST Server

Android

MainActivityMessageReceiv

er

ChatServiceMessageReceiv

er

RestTemplate

어플리케이션의 구조는 다음과 같습니다 .

메신저의 구조를 본따 중간에 서비스를 두었습니다 .

Page 5: Jurano강의 lec2. sample application 둘러보기

Sample Application

주요 부분 로직만 간단히 집고 넘어가도록 하겠습니다 .https://github.com/JuranoSaurus/SampleChatting/releases/tag/chatting-0.1.0

Page 6: Jurano강의 lec2. sample application 둘러보기

UI 를 제공하는 Activity 입니다 .

메시지를 받아 사용자에게 보여주고 ,메시지를 보낼 수 있는 역할을 합니다 .

Page 7: Jurano강의 lec2. sample application 둘러보기

통신을 담당하는 Service 입니다 .

사용자로부터 전달받은 메시지를 서버로 전달하는 역할을 합니다 .

Page 8: Jurano강의 lec2. sample application 둘러보기

통신을 수행하는 AsyncTask 입니다 .

서버로 Post 요청을 보내고 ,받은 응답을 사용자에게 전달합니다 .

Page 9: Jurano강의 lec2. sample application 둘러보기

Sample Application

우리가 익숙하게 볼 수 있는 어플리케이션의 코드였습니다 .

여기에 AndroidAnnotations 를 적용하면 어떻게 될까요 ?https://github.com/JuranoSaurus/SampleChatting/releases/tag/chatting-0.1.1

Page 10: Jurano강의 lec2. sample application 둘러보기

Activity 에 AA 를 다음과 같이 적용해 보았습니다 .

먼저 눈에 띄는 건 라인 수의 감소입니다 . (135 -> 101 라인 )

그리고 onCreate() 에서의 findViewById() 호출이 없다는 것을 알 수 있습니다 .

좀 더 자세히 보면 , Button 필드의 선언조차 없다는 것을 알 수 있습니다 .

기존 부분에서 가장 if ~ else 가 많이 반복되고 , 지저분한 부분인 BroadcastReceiver 부분이 눈에 띄게 바뀌었습니다 .특정 Action 에 대해 메소드 형태로 관리되는 것을 확인할 수 있습니다 .

Page 11: Jurano강의 lec2. sample application 둘러보기

Service 와 AsyncTask 에 AA 를 다음과 같이 적용해 보았습니다 .

AsyncTask 에 있던 빨간 박스 부분의 코드들이 Service 로 합쳐졌음에도 불구하고 , 라인 수는 오히려 줄어들었습니다 . (93 + 72 -> 78 라인 )

또 , 앞쪽의 Activity 와 마찬가지로 BroadcastReceiver 부분이 눈에 띄게 깔끔해졌습니다 .

그러면 POST 요청을 하는 부분은 어디에 명시되어 있을까요 ?

Page 12: Jurano강의 lec2. sample application 둘러보기

Post 요청하는 부분이 Interface 로 바뀐 것을 볼 수 있습니다 .

단지 annotation 이 적용된 메소드를 선언하는 것만으로 요청을 보낼 수 있습니다 .

Page 13: Jurano강의 lec2. sample application 둘러보기

패키지 모습의 변화입니다 . 재부팅시 사용할 ChatWaker 가 삭제된 것과 , AsyncTask 인 RestProtocol 이 AA 적용 이후 Interface 로 변화된 것 외에 큰 차이점은 없습니다 .

Page 14: Jurano강의 lec2. sample application 둘러보기

@Receiver

잠깐 ! 저는 BroadcastReceiver 도등록 / 해제한 적이 없어요 ! 어찌 된 일이죠 ?

Page 15: Jurano강의 lec2. sample application 둘러보기

Generated Code

답은 바로 generate 된 코드입니다 . APT 가 위와 같이 annotation 을 처리하여 코드를 생성해 줍니다 . 아래쪽 빨간 박스 부분에 Action 을 등록하는 부분이 보입니다 . 지금은 가려져 보이지 않지만 onDestroy() 에서는 unregisterReceiver() 가 호출됩니다 .

Page 16: Jurano강의 lec2. sample application 둘러보기

@Click

Button 을 선언하지 않고 사용한 건 어떻게 된 걸까요 ?

Page 17: Jurano강의 lec2. sample application 둘러보기

Activity 가 generate 된 코드입니다 .

우리는 Button 을 선언한 적이 없지만 , 생성된 코드에서는 선언을 비롯해 findViewById() 와 setOnClickListener()를 통해 일반적인 안드로이드 코드로 바꾸어 주는 것을 볼 수 있습니다 .

Page 18: Jurano강의 lec2. sample application 둘러보기

@More

즐거우셨나요 ? ^_^

다음 편부터는 각각의 컴포넌트들에 대한사용법과 특징을 예시를 통해 알아보도록 하겠습니다 .

Page 19: Jurano강의 lec2. sample application 둘러보기

Thank you