일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- ReactiveProgramming
- 알고리즘
- mockito
- 커스텀상태
- 안드로이드강좌
- 병렬프로그래밍
- 스레드
- 글또
- 테스트
- 안드로이드스튜디오
- theming
- Kotlin
- 코틀린
- Rxjava
- k8s
- kotlin강좌
- 알게되는
- 자바
- Coroutine
- Compose
- 책
- 코루틴
- Gradle
- 디자인패턴
- viewmodel
- 안드로이드
- 병럴프로그래밍
- android
- 회고
- g 단위테스트
- Today
- Total
목록개발/android 개발 (47)
선생님, 개발을 잘하고 싶어요.
필자가 최근에 artic이라는 앱을 개발하기 위해 프로젝트 구조를 설계한 내용을 공유해보고자 한다. 어떤 프로젝트 구조이고 왜 이 프로젝트 구조를 생각했으며 어떻게 목적을 달성하는지 보여주고자 한다. 목적 데이터 코드와 UI 코드의 분리 네트워크 연결성과 UI 코드의 분리 artic이라는 앱은 서버에서 데이터를 받아와서 화면에 뿌려주는 간단하다면 간단한 앱이다. 그런데 통상적으로 네트워크 통신이 들어가는 화면을 검증하는 것은 위험한 일이다. 과연 프론트와 서버 둘 중 무엇이 잘못된 건지 어떻게 장담하는가? 그리고 서버 코드가 나오기 전 까지는 프론트 개발에 손을 때 놓고 있을 수 도 없는 노릇 아닌가? 추가적으로 이번 프로젝트에서는 네트워크 연결이 끊겼을 때 에러를 내보네는 앱이 아니라 로컬 데이터베이스..
서문 MVP 디자인 패턴을 공부하니 기존에 작업했던 프로젝트를 들쑤시며 배운 내용을 적용해보려고 하게 된다. 10개 정도 되는 액티비티와 프레그먼트에 MVP를 하나하나 적용해가며 겪었던 나름의 고충을 공유하고자 한다. 변경할 코드 및 문제점 class LoginActivity : AppCompatActivity() { private val REQUEST_CODE = 1000 private val networkService: NetworkService by lazy { SoptApplication.instance.networkService } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setC..
tistory 글 쓰는 거 번거로워서 안 쓰고 있었는데 어느 날 들어와 보니 에디터가 변경돼있었다. 그래서 오랜만에 써보는 안드로이드 개발 관련 이야기 의존성 주입이 뭔지 책으로 읽고 koin 사용해봐도 감이 잘 안왔는데 이번에 개인 프로젝트 진행하면서 편함을 체감한 경험을 해서 공유하려고 한다. 프로젝트 상황 설명 안드로이드 MVP 패턴을 적용해서 모닝루틴 기록하는 앱을 만드는 프로젝트를 진행 중이었다. Model : 모닝 루틴 객체를 정의하고, 모닝루틴 데이터의 읽기, 쓰기를 위해 repository 객체를 만들었다. 작은 범위부터 구현하기 위해 간단히 메모리 상에서 데이터를 관리하는 memory repository를 구성했다. Presenter : Model을 참조하며 View의 변경 이벤트에 의해..
타이머 구현해야하는데 java.util 의 Timer + TimerTask 조합은 구현 방법도 까다롭고(한번 예약한 Task 를 취소하는 과정이 까다롭다.) 그러다보니 생각한 대로 동작하지 않아도 디버그가 힘들었다. 그래서 찾은게 handler를 이용한 타이머구현 handler 가 뭔지 대략적인 설명을 보려면 공식문서를 참조하자. 1. 특정 시간 이후에 한번 발동하는 타이머 postDelayed를 사용하면 첫번째 인자로 들어가는 runnable 객체를 두번째 인자로 들어가는 시간 (millisecond 단위) 이후에 실행하도록 한다. 2. 특정 시간 마다 발동 하는 타이머 (tick) post를 사용하면 첫번째 인자로 들어가는 runnable 객체를 실행해준다. task 코드에서 자기 자신 (task)를..