본문 바로가기

전체 글

(86)
유클리드 호제법(Euclidean algorithm) ‣ 유클리드 호제법 유클리드에 의해 기원전 300년경에 발견된 가장 오래된 알고리즘으로, 두 수의 최대공약수를 구하는 알고리즘이다. 두 수가 서로 상대방 수를 나누어서 결국 원하는 수를 얻는 것으로, 서로 호(互)와 덜(나누기) 제(除)를 써서 호제법이다. ‣ 예시: 1071과 1029의 최대공약수 계산하기 [일반적인 방법] 일반적으로 최대공약수를 구한다고 생각한다면, 먼저 소인수분해를 떠올린다. 1071 = 17 x 7 x 3 x 3 1029 = 7 x 7 x 7 x 3 두 수를 소인수분해한 결과, 공통된 소수를 찾으면 된다. 이를 통해 두 수의 최대공약수(GCD)가 " 7 x 3 = 21 "인 것을 알 수 있다. 하지만, 이 방법은 수가 커질 수록, 소인수분해를 수행하기 어려워진다는 단점이 있다. 유..
N진법 ⚠️ 코드 없이, 설명만 작성된 글입니다.[N진법]?10진법에 익숙한 우리에게 N진법은 다소 어색하게 느껴진다.하지만, 우리는 이미 일상에서 다양하게 N진법을 접하고 있다.예를 들어 생각해 보자.연필은 한 다스는 12자루이다.그럼 연필이 30개면? 2다스 6자루가 된다.즉, 10진수로 30은, 12진수로 26이된다.연필 12자루 / 셔터스톡아직 애매한가?그럼 계란의 경우도 생각해보자.계란은 한판에 30개로 구성된다.그럼 계란이 3판에 3개가 추가로 있다면 총 몇 개의 계란이 있는 것일까?답은 93개이다.즉, 30진수로 33은 10진수로 93이 되는 것이다.우리는 이처럼, 이미 자연스럽게 다양한 진법을 실생활에 사용해 왔다. 단순하게 아래와 같이 생각하고, 변환법을 바로 알아보자.N진법 = 모든 자리 수가..
[Android Tip] Immortal Service (죽지 않는 서비스) [Immortal Service: 죽지않는 서비스]에어맨이 안죽음ㅋㅋ앱을 개발하다보면 죽지 않는 서비스(Immortal Service)가 필요한 순간들이 있다.필자는 사용자의 위치정보를 지속적으로 가져오는 GPS 서비스가 필요했다.당장 생각나는 다른 예시로는, 실시간 영상 스트리밍 어플을 구현할 때, Socket 통신 부분을 서비스 컴포넌트로 작성하여 스트리밍을 계속 유지할 수도 있겠다.이번 글에서는 앱의 필수 기능으로, 절대로 죽으면 안되는 서비스를 구현하는 방법에 대해서 알아보자. [주의]이후로 작성된 내용은 필자가 직접 구현하고 작성한 것으로, 검증을 받은 것이 아니다. 때문에 환경에 따라 문제가 발생할 수 있다는 것을 미리 고지한다.[다양한 구현 방법]죽지않는 서비스는 생각보다 다양한 방법으로 구..
[Android: Basic] 포그라운드 서비스 ( Foreground Service ) 개념 들어가며.. 면접 질문으로 4대 컴포넌트에 대한 질문을 종종 받았던 기억이 있다. 업무를 하며 기교만 늘어서인가, 이런 원론적인 질문에 제대로 답하지 못하는 자신의 헛점을 메꾸고자 내가 아는 선에서 개념을 정리하고자 한다. 빈약하고 허술할 순있지만, 최대한 아는 내용을 담으려고 노력하겠다. 최신 수정일: 2024.01.17 Service Component 안드로이드의 4대 컴포넌트 중 하나로, 안드로이드 개발자라면 Activity 다음으로 많이 접하게 되는 컴포넌트라고 생각된다. Service는 사용자 인터페이스(UI) 없이 앱의 백그라운드에서 긴 시간이 걸리는 작업을 수행하는 컴포넌트이다. 서비스는 보통 두가지로 구분된다. Foreground Service Background Service Backgr..
[Android: Basic] NotificationCompat.Builder의 Style 지난 글에서는 Notification의 기본적인 내용을 다루었습니다.오늘은 NotificationCompat.Builder의 setStyle메서드의 여러 스타일 들에 대해 알아보겠습니다.이번 글에서는 잡소리는 빼고, 오로지 내용 위주로만 채우겠습니다. 👀 BigPictureStyle 큰 이미지를 알림에 표시하는 경우 사용예시NotificationCompat.Builder(this, "1") .setStyle(NotificationCompat.BigPictureStyle().bigPicture(myBitmap)) 👀 InboxStyle여러 줄의 텍스트를 알림에 표시하려는 경우 사용각 줄은 개별 메시지나 항목을 나타낼 수 있음예시NotificationCompat.Builder(this, "2") .setSt..
[Android: Basic] Notification 오늘도 빡공.. 안드로이드의 알림(Notification)은 앱이 사용자에게 정보를 전달하고, 상호작용을 유도하는 중요한 부분입니다.그럼 이번 시간에는 Notification에 대해서 알아보도록 합니다. Notification?상태바에 앱의 상태를 출력하여 유저에게 알림을 보내는 기능입니다. 이를 통해 사용자는 앱 외부에서도 알림을 받을 수 있습니다.시스템에 의해 관리되기 때문에, 액티비티에서 직접적인 제어가 불가능합니다. 이렇게 상태바에 뜨는 것을 알림(Notificiation)이라고 합니다. Notification 프로세스 흐름 (flowchart) Notification의 흐름을 나타낸 Flowchart입니다. 이걸 바탕으로 간단하게 설명하겠습니다.NotificationChannel을 생성합니다.안..
Application Restart (앱 재실행) 들어가며... 앱을 만들다보면 강제로 재실행을 해야하는 순간들이 몇 있다. 본인의 경우, 다국어를 지원하는 앱에서 언어 변경사항을 모든 액티비티와 프래그먼트에 적용해, 자동으로 로드 될 수 있도록 하기 위한 조치였다. 앱을 강제로 재실행 시키기 [코드] fun restartApp(context: Context) { val intent = context.packageManager.getLaunchIntentForPackage(context.packageName) if (intent != null) { intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK) context.startActivity(intent) Runt..
[Android: Basic] GPS Location Service (위치정보 서비스) 어플리케이션 개발을 하다보면, 사용자의 위치 정보가 필요해지는 경우가 있습니다. 많은 방식들이 있겠지만, 저는 무엇보다 포그라운드 서비스로 위치 정보를 받는것을 선호합니다. 일전에 Jetpack의 WorkManager로 위치정보를 받아보려고 한 적이 있는데, 막상 코드를 작성하고 돌아가는 것을 보니 왜 구글에서 위치정보 획득을 Foreground service로 권장하는지 알겠더군요. 언급한 Work Manager 부분은 따로 글을 작성해서 코드와 함께 더욱 자세히 설명하도록 하겠습니다. 아무튼, 저는 2개의 게시글에 걸쳐, 제가 작성해온 위치 정보 서비스의 코드들과 그 동작 방식을 설명하려 합니다. 이를 위해서는 Forground Service에 대한 사전지식이 필요하며, 해당 내용은 이 글에 작성해 ..