본문 바로가기

전체 글

(86)
코루틴 작업 분리 이전의 DB 작업의 연장선이다. 나는 api 통신 후, 해당 결과값을 바탕으로 UI를 갱신하는 것과 DB 갱신을 병렬적으로 진행시키고 싶었다. 그게 더 작업 속도를 빠르게 할 수 있을거라고 생각하기 때문이다. 뭐.. 대충 이런 흐름을 원했다. 그림이 좀 이상하긴 한데ㅋㅋ DB갱신은 별도로 분리하지 않고, ApiCall() 코드의 호출 성공 부분에 함께 작성해 뒀다. (가독성이 좋아서) 아무튼, 성공시 DB를 갱신하는 것과, 서버로 부터 수신한 데이터를 반환하는 코드가 병렬로 수행되도록 하는 것이 목표라는 것이다. val data = withContext(Dispatcher.IO){ApiCall()} ApiCall()이 withContext(Dispatcher.IO), I/O 스레드에서 진행이 되기 때문에..
Data Class의 equals와 hashCode를 사용해 DB 갱신하기 Resume때마다 서버로 부터 새로 데이터를 받아와서 DB에 저장하는데, 이때 DB의 데이터를 전부 삭제(;;)하고 새로운 데이터로 DB를 다시 작성하는 방식이었다. 비둘기가 거꾸로 날아도 날긴 나는거라고, 이런 코드가 2년간 유지되어 왔다는 사실도 놀랍지만 resume때 마다 10초 이상 정지된 화면을 바라보며 대기를 하는데 아무런 불만없이 사용해 주던 사용자분들에게도 미안했다. 그러던 중, 얼마전 훑어보았던 드로이드 나이츠 2020 발표 내용에 있던 "Data Class의 equals/hashCode" 내용을 응용해서 문제를 해결할 수 있지 않을까라는 생각들었다. https://speakerdeck.com/taehwandev/amado-effective-han-kotlin?slide=52 아마도 Ef..
ForegroundService 문제 해결하기: ForegroundServiceDidNotStartInTimeException 월요일 좋아근데 출근하고 늘 체크하는 Firebase Crashlystics에서 늘 고질적으로 발생하는 오류의 빈도가 향상된 것을 발견했다.월요일 안좋아 개인적으로 수정해서 빨리 눈앞에서 치워버리고 싶었는데, 지금까진 다른 일이 바빠서 해결을 어영부영 미루던 이슈였다.마침 진행 중이던 바쁜 일도 끝났고, 오늘도 어김없이 문제 목록의 상단에서 날 반겨주었기에 그냥 처리해버리기로 마음 먹었다. 내용 추가: 24.01.24android.app.RemoteServiceException$ForegroundServiceDidNotStartInTimeException 이 오류는 서비스가 시작될 때 startForegroundService() 메소드를 호출한 후 일정 시간 내에 startForeground() 메소드를..
[백준/Python] 1110: 더하기 사이클 ‣​ 문제 링크 https://www.acmicpc.net/problem/1110 1110번: 더하기 사이클 0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음, www.acmicpc.net ‣​ 접근 방법 문제를 잘 따라가면 접근 방법을 파악할 볼 수 있다. 문제의 예시처럼 26을 통해 접근방법을 생각해보자. 26은 10보다 크기 때문에 26이 유지된다. 각 자리수를 더해서 얻을 수 있는 수는 2+6 = 8이다. 그럼 새로 만들어지는 수는 26의 1의 자리수인 6과 각 자리수를 더해 얻은 8의 1의 자리수인 8이 붙여 68이 된다. 아직 68과 26은 ..
N2T 사용을 좀 줄여야겠다.. 개인 공부할 때 노션을 주로 사용하다보니 N2T를 곧잘 사용해 왔는데.. 복습 겸 해서 과거의 글들을 하나씩 읽다보니 코드블럭이랑 글 간격이 상당히 어색하게 깨져있다(ㅜㅜ) 그냥 티스토리 에디터로 작성해야겠다..
에라토스테네스의 체 ‣ 에라토스테네스의 체(Eratosthenes' sieve)고대 그리스의 수학자 에라토스테네스가 고안한 소수를 찾는 알고리즘아래의 사진처럼 마치 체를 치듯이 수를 걸러내어 소수만 남기기 때문에, 에라토스테네스의 체 라고 부른다. ‣ 동작 방식에라토스테네스의 체는 임의의 정수 n이 있으면 그 이하의 소수들을 O(nloglogn)O(nloglogn)O(nloglogn)의 시간 복잡도로 전부 찾아낼 수 있는 상당히 효율적인 알고리즘이다. 에라토스테네스의 체는 다음과 같은 원리로 진행된다.각 수에 대해 그 수의 배수를 모두 제거하는 작업을 수행한다.2의 배수를 제거할 때 n2 \frac{n}{2}2n​ 번, 3의 배수를 제거할 때 n3 \frac{n}{3}3n​ 번, 4의 배수를 제거할 때 n4 \frac..
[백준/Python] 13909 창문 닫기 ‣​ 문제 링크 https://www.acmicpc.net/problem/13909 13909번: 창문 닫기 서강대학교 컴퓨터공학과 실습실 R912호에는 현재 N개의 창문이 있고 또 N명의 사람이 있다. 1번째 사람은 1의 배수 번째 창문을 열려 있으면 닫고 닫혀 있으면 연다. 2번째 사람은 2의 배수 번째 www.acmicpc.net ‣​ 접근 방법 창문의 상태가 바뀌는 것은 해당 창문 번호의 약수의 개수와 관련이 있다. 예를 들어, 12번 창문의 경우 1, 2, 3, 4, 6, 12의 6개 약수가 있으므로 6번 상태가 바뀌게 된다. 그럼 0에서 6번 상태가 바뀐 12는 최종적으로 어떤 상태일까? 아래는 12번째의 창문의 상태가 자신의 약수번째 사람일 경우 어떻게 바뀔지 표로 나타낸 것이다. 1 2 3..
[Android Basic] Activities & Activity Lifecycle [들어가며..]Jetpack Compose의 등장으로 Android의 개발 방식이 근본적으로 바뀌어 가는 중이다.전통적인 XML 기반 레이아웃과 View 시스템에서 벗어나, 선언형 UI 프레임워크를 제공하여 UI코드를 더 간결하고 직관적으로 만들었다. 이 덕분에 UI 로직과 비즈니스 로직을 분리하기 쉬워졌고, 무엇보다 현재 PlayConsole이 APK에서 AAB 업로드 환경으로 변함에 따라 권장되는 멀티 모듈을 도입하는 것도 수월해 졌다. 그래서 필자는 Compose환경을 기반으로한 Android Basic 내용을 틈틈히 정리해 나가볼까 한다. 오늘 다룰 주제는 역시 Basic하면 빼놓을 수 없는 4대 컴포넌트, 그 중 가장 많이 접하게 되는 Activity와 그의 Lifecycle이다.Activity..