Programming/Language Tip 7

안드로이드 - MVP 패턴 2. 분석

이번엔 본격적으로 구글에서 제공하는 "안드로이드 MVP 디자인 패턴 적용 샘플 어플리케이션"인 https://github.com/googlesamples/android-architecture/tree/todo-mvp/ 해당 샘플 코드를 분석하려고 합니다. 앞서 말씀드린 대로, 이번 포스트 시리즈는 앱이 가진 고유의 기능을 분석하다기 보단 해당 샘플로부터 어떻게 MVP 코드를 적용했는가 추출하는데 집중하려 합니다. 이번 포스트는 추출 전 전체적인 앱의 구조 파악입니다. 1. 흐름도 위 이미지는 해당 샘플에 대한 Github에서 제공되는 흐름도입니다. Activity 안에 Fragment가 있고, View로 사용하네요. 그리고 Activity 범위 안에 Presenter가 있습니다. 그 Presenter에서..

안드로이드 - MVP 패턴 1. 개념

안드로이드에서 MVC 패턴의 미묘함에 대해 포스팅한 적이 있습니다.2017/03/11 - [프로그래밍/기타] - 안드로이드 - MVC 패턴 개념, 안드로이드에서 MVC 패턴의 미묘함 그래서 안드로이드의 MVP 패턴을 공부하고 있는데, 구글에서 샘플 코드도 올려주고 아주 친절해요. https://github.com/googlesamples/android-architecture 여기서 일정관리 프로그램를 다양한 디자인 패턴을 통해 개발하는데, 이 중엔 MVP에 기반한 것도 있습니다. 이걸 분석하면서 한창 앱 하나를 개발하고 있습니다. 이번 포스트 시리즈는 그 나름의 분석 내용입니다. 그리고 앱의 기능을 분석한다기 보다 MVP 패턴으로 개발하려면 이렇게 하면 되는구나는 걸 추출하려고 노력했습니다. 참고하실 분..

안드로이드 - 서비스와 액티비티간 통신

간단하게 말로만 정리하겠습니다. 서비스와 액티비티간 통신이 많이 필요할 때가 있습니다. 그냥 많이 필요합니다. 경험상 상황별로 다음의 방법이 가장 좋네요. 1. Local 서비스와 액티비티간, 일방적으로 간단한 정보를 보낼 땐 브로드캐스트 리시버가 최고라고 생각합니다. 코딩도 그나마 간단하구요. 하지만 복잡하며 좋은 성능이 필요하고, 마치 자신의 메서드인냥 실행하고 반환값을 얻고 하려면 Local Binder입니다. 2. Remote 간단하면 역시 브로드캐스트 리시버입니다. 하지만, 리시버를 받는 입장에서 액션에 대한 공개 범위? 가 모든 프로세스라면 보안에 취약해질 수 있습니다. 그럼 바인더를 사용해야 할텐데, 서비스가 다른 프로세스에서 작동한다면 Local Bind가 불가능하죠. Remote로 해야합..

안드로이드 - MVC 패턴 개념, 안드로이드에서 MVC 패턴의 미묘함

PHP CodeIgniter를 공부하면서.. MVC 패턴이란 걸 알게 됐습니다. 원래 기존에도 프로그램을 만들 때 모듈화에 대한 고민을 했긴 했었는데, 예를 들어 DB에 접근하는 프로그램을 개발할 땐 DB 접근 부분을 완전히 독립시키려 노력한다던가.. 물론 완전히 모듈화시키진 못하고 코드가 중구난방이었습니다. 그러다보니 최근에 MVC 패턴이 있다는 걸 알고 아 역시 이런 디자인 패턴도 있었군! 하면서 한창 공부 중입니다. 안드로이드 개발에선 MVC의 파생격인 MVP 패턴을 이용한다는데, 그 개념을 간단하게 정리하고자 포스팅합니다. [MVC 패턴] MVC 패턴은 Model-View-Controller 패턴을 가리킵니다. 사용자 인터페이스 영역과 비즈니스 로직 영역을 서로 영향 없이 쉽게 고칠 수 있도록, ..

안드로이드 - 외부 스레드에서 UI 스레드로

최근 취업준비를 하면서 개인 안드로이드 프로젝트를 연습삼아 진행하고 있습니다. 하면서 계속 깨닫는 건 멀티스레딩의 중요성입니다. 아무리 튼튼한 자료구조가 있고 복잡한 알고리즘의 빅오가 기가막혀도 기본 스레드(UI 스레드)에서만 작동한다면 ANR이 발생하기 마련입니다. 기본 스레드에선 UI만 다루고, 사용자 눈에 보이지 않는 모든 작업은 뒤에서 적절히 스레드를 줘서 돌려야 스무스하게 아무 일 없는 듯 돌아갈 겁니다. 비록 폰은 뜨거워져도 보기엔 부드러워야 좋다고 생각합니다. 그래서 개발을 진행하기 보다, 머릿속으로 먼저 정리할 겸 포스팅하고 있습니다...... [들어가기 앞서...] 안드로이드는 리눅스 기반 운영체제입니다. 따라서 안드로이드는 리눅스의 정책을 따라갈 것이고, 리눅스의 프로세스와 스레드에 대..

Node.js 와 Android 사이 RSA, AES 암호화 예제

프로젝트를 하나 진행하는데.. 소켓 데이터 암호화가 필요한 시점이 왔었다. Node.js 에 npm 모듈로 socket.io 를 올린 서버와, socket.io 라이브러리를 사용하는 안드로이드 어플리케이션. 둘 사이에 JSON 데이터를 socket.io를 통해 주고 받는다. 이 데이터가 암호화되지 않은 평문이라면, 아마 와이어샤크 등으로 쉽게 모든 개인 정보가 보여졌을 것이다.처음엔 공개 키 암호화 방식으로 RSA 암호화만을 사용하려고 했었다. 아주 강력한 암호화 방식. RSA Key Pair(공개 키, 비밀 키 한 쌍)을 생성하고, 공개 키로 암호화한 건 비밀 키로만 복호화할 수 있는 방식이다. 하지만, RSA 암호화 방식은 적은 양의 데이터(평문 데이터 245byte 이하)만 암호화가 가능하다고 해,..