본문 바로가기

분류 전체보기75

Coroutine 예외처리 일반적인 예외처리 일반적으로 예외처리는 try ~ catch 구문을 이용해서 처리할 수 있습니다. 또한, 코틀린에서는 runCatching ~ onSuccess ~ onFailure 구문으로 처리 가능합니다. 위처럼 코드를 작성하면 예외처리를 할 수 있지만, try ~ catch 혹은 runCatching ~ onSuccess ~ onFailure 구문이 반복되어 보일러 플레이트 코드를 작성하게 된다. 위와 같은 문제를 해결하는 방법은 코루틴의 SupervisorJob 이다. SupervisorJob SupervisorJob은 Coroutiine Child(코루틴 하위)에서 발생하는 Exception을 부모로 전파하지 않고 무시하도록 해준다. 왜 A만 출력되고 B와 C는 출력되지 않았을까? -> erro.. 2023. 3. 8.
난독화 필수(?) 제외 목록(지속 업데이트 예정) 1. tools:keep Splash 화면에서 ExoPlayer로 .mp4 영상을 재생하는데, release로 빌드 시 영상이 재생되지 않았고, 이를 해결하기 위해서 res/raw 경로에 아래와 같은 파일을 생성하면 된다. 리소스 파일이 제외되는 이유는 첫번째, build.gradle의 isShrinkResources 속성이 true이고, 두번째, splash.mp4 파일을 R.raw.splash 경로를 통해 가져온 것이 아니라, 아래와 같이 string으로 uri 경로를 가져왔기 때문이다. 결국, 프로젝트를 필드 했을 때 해당 .mp4 파일이 사용되지 않는다고 판단되었고, 난독화 대상이 되었기 때문에 리소스를 찾지 못하여 영상 재생이 되지 않았다 2023. 3. 3.
코틀린 예외처리(runCatching) 자바에서 예외처리를 하기 위해서 try/catch를 사용했다면, 코틀린에서는 runCatching이 있다. runCatching { } 블럭 내부에서 예외가 발생하면 onFailure { } 블럭으로 코드가 동작하고, 예외가 발생하지 않으면 runCatching { } 블럭 가장 마지막 값을 파라미터로 받는 onSuceess { } 블럭이 동작합니다. 또한, runCatching의 결과를 Result 객체로 리턴받을 수 있습니다. 그리고 getOrNull() 메소드로 runCatching 결과가 Success이면 리턴 값을 얻을 수 있고, 결과가 Fail이면 null 값이 됩니다. 2023. 2. 14.
Coroutine Flow Flow Coroutine의 suspend 함수는 비동기적으로 하나 값을 반환합니다. 그리고 지속적으로 혹은 한 번에 여러개의 값들을 반환하는 경우를 대응하기 위해서 Coroutine의 비동기 스트림 API flow를 사용합니다. Coroutine Flow를 이용해서 연속적인 데이터 스트림을 구현하기 위해서는 Producer(생산자), Intermediary(중간 연산자), Consumer(소비자) 3가지가 필요합니다. Producer 1. flow { } 블록 안에서 비동기로 동작 2. 날씨 정보를 서버로부터 받아온다. 3. Producer가 데이터를 방출한다.(emit) 4. 2~3번의 과정을 60초마다 반복한다. Intermediary 1. Produce에서 생성한 값에서 필요한 형태로 변환한다. .. 2023. 2. 13.
동시성에 대하여...feat 코루틴 앱을 막힘없이 효율적으로 동작시키기 위해서는 어떻게 해야할까요? 사람이 물체를 인지하는 과정은 눈이 보내는 신호를 뇌가 받아들이는 구조입니다. 그리고 빠르게 보여지는 연속적인 이미지를 인식하는데에는 한계가 있습니다. 보통 사람은 초당 60프레임의 연속된 움직임과 그 이상의 프레임의 움직임의 차이를 느끼지 못한다고 합니다. 1000ms / 60frames = 16.666..ms/frame 따라서, 사용자가 스마트폰의 화면에서 움직임이 부드럽다고 느끼도록 하기 위해서는 16ms마다 한 프레임을 그리는 작업(통신, 렌더링, 입력 ,처리)을 완료해야합니다. 하지만, 앱에 필요한 적업 중에서 16ms보다 긴 처리 시간을 요구하는 작업(네트워크 통신, 데이터베이스 작업, JSON 파싱) 등이 있습니다. 다. 이 긴.. 2023. 2. 10.
Cold Observable vs Hot Observable Cold Observable vs Hot Observable Cold Observable Observer가 구독한 순간부터 아이템을 발행하는 스트림 - 구독하는 Observer가 없다면 데이터를 발행하지 않음 - 일반적인 Rest API 통신, 데이터베이스 쿼리 등에 사용함 - 처음부터 데이터 발행하는 데이터를 받는 기본으로 함 - 일반적으로 Observable을 생성하여 사용하는 경우에 해당(ex: create, single, fromArray 등의 연산자로 생성한 Observable) Hot Observable Observable을 생성하자마자 아이템들을 발행하는 스트림 - 구독자의 존재와 상관 없이 데이터를 방출하는 Observable - 마우스 이벤트, 키보드 이벤트, 시스템 이벤트 등에 주로 사.. 2023. 1. 25.