본문 바로가기

Mobile App64

[안드로이드] - Flow (coroutine) - 0 안드로이드에서 비동기 처리를 위해서 코루틴을 사용한다. 우리는 개발 시, LiveData 대신하여 Flow 를 사용할 수 있다. 하지만, Flow 는 스스로 라이프사이클을 알지 못하기 때문에 CoroutineScope 를 잘 이해하고 사용하여 불필요한 메모리 사용을 방지해야 한다. LiveData VS Flow LiveData 는 UI 에 밀접하게 연관되어 있기 때문에 Data Layer 에서 비동기 방식으로 데이터를 처리하기에 자연스러운 방법이 없다. 또한 LiveData 는 안드로이드 플랫폼에 속해 있기 때문에 순수 Java / Kotlin 을 사용해야 하는 Domain Layer 에서 사용하기에 적합하지 않다. 반면 Flow 는 스스로 안드로이드 생명주기에 대해 알지 못하여, 라이프사이클에 따른 중.. 2023. 1. 18.
[안드로이드] - coroutine (코루틴) - 0 코루틴을 알기 위하여, 프로그램 실행을 훑기 보통, 프로그램이 실행되는 과정을 한 번 정리를 해보자. 프로그램이 실행이 되면, 실행된 코드가 메모리에 load 가 된다. load 된 인스턴스를 프로세스라고 일컫는다. 프로세스는 여러 개의 독립된 실행의 흐름을 갖게 된다. 이 실행 흐름 하나하나를 Thread 라고 한다. 프로세스는 자기가 사용하기 위해 메모리를 할당 받는다. 그걸 Heap 이라 한다. 프로세스 안에서 돌아가는 각 각의 Thread 가 존재하는데, 그 스레드 메모리를 Stack 이라 부른다. 또한, 스레드는 프로세스 안에 있는 Heap 안 자원을 각 Thread 끼리 공유할 수 있다. 여기서 코루틴은 Thread Stack 을 할당을 받지 않고, 프로세스에 할당된 Heap memory 를 .. 2023. 1. 18.
[안드로이드] - coroutine (코루틴) - 1 코루틴 코루틴은 루틴의 일종이다. co + routine 으로 협동하는 루틴이라고 한다. 코루틴은 이전에 자신의 실행이 마지막으로 중단되었던 지점에 그 다음 장소에서 실행을 재개한다. 진입점과 출구점이 여러 개 특징을 가지고 있고, 입구점과 출구점이 하나는 서브루틴이라고 한다. 코루틴은 비동기 실행을 간단한 코드로 처리할 수 있고, 메인 스레드가 블로킹되는 그러한 상태를 관리할 수 있게 도움을 준다. 또한, 코루틴은 비동기 프로그래밍을 하기 위해 콜백로 처리하는 걸, 순차적으로 짤 수 있게 해주는 장점이 있다. 비동기 처리를 순차적으로 처리할 수 있게라는 말이 간단하는 말이다. 구글 I/O 발표 내용 서버를 한 번 호출하고, 서버에서 온 데이터(user)를 텍스트에 넣어주는 코드를 드림코드라고 불린다. .. 2023. 1. 18.
[안드로이드] - 비동기 프로그래밍 기술 (etc. coroutine) 코루틴에 대해서 블로그 작성을 하려고 다양하게 검색하면서 다른 블로거가 작성한 글들을 읽는 와중에 코루틴은 코틀린만에 전유물이 아니라는 걸 알게 됐다. 그래서 비동기 프로그래밍 기술 중 하나인 코루틴이라 생각을 달리하고, 비동기 프로그래밍 기술에 대해서 찾아보았다. 오랫동안 개발자로서 해결해야 할 문제가 있다. 사용자가 기다리거나 애플리케이션 확장을 방해하는 병목 현상을 일으키는 상황을 피하고 싶어 한다는 것이다. 이 문제를 해결하기 위해서 다음과 같은 접근 방식이 존재한다. - Threading - Callback - Futures, promies, 그리고 그 밖에 다른 것들 - Rx (Reactive Extensions) - Coroutines 아래에는 내가 써보았던 기술을 세 가지만 정리할 예정이다.. 2023. 1. 18.
[안드로이드] - 이미지 로더 Coil 라이브러리 (etc. Glide, Picasso) 우리는 안드로이드 개발을 하다보면 이미지 로딩을 하기 위한 라이브러리를 종종 사용한 적이 있을 것이다. 만약 라이브러리 없이 이미지를 로드하려고 했다면, 고려해야하는 요소가 많아진다. 따라서 이 부분을 thrid party 라이브러리를 사용했던 것이다. 쓴이는 Glide 를 가장 많이 사용한 라이브러리라 사용했었고, 이번 프로젝트에서 코루틴을 적용하면서 Coil 라이브러리를 사용하게 됐다. Coil 이 쉽게 적용할 수 있어서 차이가 궁금해졌다. 그래서 이번에 여러 Image loader 라이브러리 종류가 무엇이 있고? 각 라이브러리 차이를 조금이라도 알고자 여러 블로그에서 찾아본 내용을 정리를 해보겠다. Image loader 라이브러리 종류 Glide Picasso Coil AUIL (Android-U.. 2023. 1. 13.
[안드로이드] Json parser Converter 라이브러리 [Gson VS Moshi] 안드로이드 Retrofit 을 사용하여 remote API 통신할 때 Retrofit Builder 패턴에서 사용하는 addConverterFactory 메서드를 본 적이 있었을 것이다. 아래 메서드 매개변수로 우리는 JSON parser Converter 라이브러리를 적용한다. 적용하는 이유는 JSON 직렬화 / 역직렬화 하는 과정이 필요해서다. 직렬화와 역직렬화에 대해서는 다시 블로그를 작성해서 링크를 걸 예정이다. 여기서 간단하게 설명을 하자면, 문자열 객체 변화하는 과정이라 생각하면 된다. public Builder addConverterFactory(Converter.Factory factory) { converterFactories.add(Objects.requireNonNull(factory.. 2023. 1. 12.
[안드로이드 에러] The Android Virtual Device is currently running in an emulator and cannot be deleted (/*.lock) 문제 발생 안드로이드 에뮬레이터 실행하다가, 강제로 종료 또는 부적절하게 종료하려고 시도할 경우, 안드로이드 실행도 안되고, 해당 에뮬레이터 delete 또는 stop 이 되지 않는다. 안드로이드 스튜디오 Error 난 부분을 읽어보면, 우리 에뮬레이터가 보관되어 있는 디렉터리 쪽에 있는 파일 중에서 .lock 으로 끝나는 모든 파일을 싹 지우면 된다고 나와서 지웠지만, 역시나 되지 않았다. 해결 방법 Mac OS 인 경우, command + space (Spotlight) 또는 우측 상단의 돋보기 클릭 Activity Monitor 또는 활성 상태 보기 입력 메모리 카테고리 클릭 adb Process 삭제 Window 인 경우, 작업 관리자를 열기 (Ctrl + Alt + Del) 메모리 카테고리 클릭.. 2022. 12. 8.
[안드로이드] Dialog 와 Toast 와 SnackBar 차이 개념 Dialog 앞으로 이용할 정보를 보여주고, 이를 바탕으로 결정을 내리거나 추가 정보 입력을 요구하는 작은 창으로 이뤄진 ui 입니다. Dialog 는 적은 양의 정보와 두 가지 action(버튼) 을 제공할 수 있습니다. 하지만, Dialog 는 방해하는 속성이 있어서 이용자들은 하던 일을 멈추고 Dialog 를 처리해야 합니다. 즉, 이용자가 Dialog 처리하기 전까지는 아무것도 할 수 없으므로 Dialog 사용에 대해 매우 신중해야 합니다. Toast 간단한 피드백을 텍스트 형태로 제공하는 작은 popup 형태의 ui 입니다. Toast 는 Dialog 와 달리 이용자를 방해하지 않고, 메시지를 표시하고 시간이 지나면 자동으로 사라집니다. 그리고 Toast 는 사용하기 쉽지만, 할 수 있는 .. 2022. 12. 3.