All

· Coding Test
https://www.acmicpc.net/problem/12865문제이 문제는 아주 평범한 배낭에 관한 문제이다.한 달 후면 국가의 부름을 받게 되는 준서는 여행을 가려고 한다. 세상과의 단절을 슬퍼하며 최대한 즐기기 위한 여행이기 때문에, 가지고 다닐 배낭 또한 최대한 가치 있게 싸려고 한다.준서가 여행에 필요하다고 생각하는 N개의 물건이 있다. 각 물건은 무게 W와 가치 V를 가지는데, 해당 물건을 배낭에 넣어서 가면 준서가 V만큼 즐길 수 있다. 아직 행군을 해본 적이 없는 준서는 최대 K만큼의 무게만을 넣을 수 있는 배낭만 들고 다닐 수 있다. 준서가 최대한 즐거운 여행을 하기 위해 배낭에 넣을 수 있는 물건들의 가치의 최댓값을 알려주자.입력첫 줄에 물품의 수 N(1 ≤ N ≤ 100)과 준서가..
· Coding Test
문제절댓값 힙은 다음과 같은 연산을 지원하는 자료구조이다.배열에 정수 x (x ≠ 0)를 넣는다.배열에서 절댓값이 가장 작은 값을 출력하고, 그 값을 배열에서 제거한다. 절댓값이 가장 작은 값이 여러개일 때는, 가장 작은 수를 출력하고, 그 값을 배열에서 제거한다.프로그램은 처음에 비어있는 배열에서 시작하게 된다.입력첫째 줄에 연산의 개수 N(1≤N≤100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 0이 아니라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0이라면 배열에서 절댓값이 가장 작은 값을 출력하고 그 값을 배열에서 제거하는 경우이다. 입력되는 정수는 -231보다 크고, 231보다 작다.출력입력에서 0이 주어진 횟수만큼 답을 출력..
Intent로 화면을 전환할 때, 간혹 기획에 따라 전환 애니메이션이 필요한 경우가 존재합니다.이럴 때에는 anim 리소스를 정의하고, overridePendingTransition() 메서드를 활용해 주면 됩니다.오른쪽에서 나타나 왼쪽으로 사라지는 애니메이션 리소스 파일입니다.  실제 Intent 호출 시에는 아래처럼 정의해줍니다.startActivity(Intent(activity, StoreItemListActivity::class.java))activity?.overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left) 하지만 API 34부터는 해당 메서드가 deprecated 되어서 overrideActivityTra..
APK를 빌드하고 나서 Analyze APK를 클릭하면 위처럼 dex 파일과 디렉터리로 구성된 빌드 결과물을 확인할 수 있습니다.그런데, 프로가드 적용 유무에 따라 이 분석 결과가 달라집니다. 무슨 연관이 있을까요?DEX (Dalvik Executable) 파일이란?DEX 파일은 안드로이드 애플리케이션의 바이트코드를 담고 있는 파일입니다.안드로이드는 Dalvik/ART(안드로이드 런타임)를 사용해 DEX 파일을 실행합니다.모든 자바 클래스 파일(.class)들은 하나 이상의 DEX 파일로 변환되어 안드로이드 패키지(APK)에 포함됩니다.DEX 파일은 메모리와 성능 최적화를 위해 설계되었으며, 앱의 크기와 성능에 중요한 영향을 미칩니다.DEX와 ProGuard의 연관성- ProGuard가 DEX 파일 생성..
MVI 패턴이란?Model - View - Intent의 약자로, 단방향 데이터 흐름을 가지는 패턴입니다.State를 중심으로 UI에 전달하는 방식으로서 여기서 Intent는 기존에 알고 있는 Intent와는 다른 개념입니다. Model: 상태(State)로, UI에서 보일 데이터 또는 상태입니다.View: 화면(UI)을 구성하는 요소로, Model의 상태 변화를 관찰하여 이를 반영합니다.Intent: 사용자의 액션이나 이벤트를 정의한 것으로, 이를 통해 Model이 업데이트됩니다. 상태가 중심인 MVI에서는 데이터는 불변의 구조로 구성되며, 그로 인해 상태가 변할 때 필요한 부분만 갱신되면서 효율성이 증가합니다. MVI 패턴 장점1. 단방향 데이터 흐름 (Unidirectional Data Flow)상..
토글이라고도 불리우는 스위치는 기능을 켜고 끄는 로직에서 많이 사용되는 컴포넌트입니다.기존 Material 방식의 스위치 디자인신규 Compose Material3 방식의 스위치 디자인토글 색상 속성을 수정한다면 SwitchDefaults.colors를 통해 설정해줄 수 있습니다.Switch( checked = isChecked, onCheckedChange = onCheckedChange, colors = SwitchDefaults.colors( checkedThumbColor = colorResource(R.color.colorPrimary), uncheckedThumbColor = colorResource(R.color.unActiveBackground) ..
Bottom Sheet 내부에 EditText를 넣으면 상황에 따라 상하 컴포넌트나 BottomSheet 윗부분이 화면 영역을 넘어가버려 사용에 불편한 경우가 있습니다.이럴 경우 Bottom Sheet Style에 아래 item을 설정해 주면 됩니다.falseadjustResize 그리고 BottomSheet의 onCreate()에서 아래와 같이 선언해줍니다.setStyle(BottomSheetDialogFragment.STYLE_NORMAL, R.style.CustomBottomSheetDialogTheme)android:windowIsFloating의미: 이 속성은 창이 플로팅(floating) 창인지 여부를 설정합니다. 플로팅 창은 일반적인 Activity 창과는 다르게, 독립된 팝업처럼 동작하며,..
앱 자체의 잠금 기능을 구현할 때, 비밀번호 말고도 사용자가 더욱더 빠르게 보안 접근을 해제할 수 있도록 지문 인증 처리를 제공할 수도 있습니다.private var biometricPrompt: BiometricPrompt? = nullprivate var promptInfo: BiometricPrompt.PromptInfo? = null먼저 위 두 개 변수를 선언해 줍니다. BiometricPrompt사용자가 지문, 얼굴 인식 등을 통해 인증을 수행할 때 해당 프롬프트를 표시하고, 인증이 성공하거나 실패했을 때의 콜백을 처리합니다. BiometricPrompt.PromptInfoBiometricPrompt.PromptInfo는 BiometricPrompt에 표시할 다이얼로그의 정보를 구성하는 데 사용..
RxJava 라이브러리를 통해 검색 기능을 구현하는 부분에 대해 다뤄보겠습니다.RxJava를 통해 검색 중에 Reactive Steam으로 사용자가 입력 중인 검색어에 따라 debounce로 실시간 검색 처리가 가능합니다. 먼저 RxJava에 대한 개념 몇 가지를 살펴보자면.. Reactive Programming: 데이터를 비동기 스트림으로 처리하는 프로그래밍 패러다임입니다. 데이터의 흐름을 관찰하면서 이벤트가 발생하면 이를 구독자에게 전달하여 처리하는 방식입니다.Observable: 스트림에서 발생하는 이벤트나 데이터를 발행하는 주체입니다. TextView의 텍스트 변화처럼 연속적인 이벤트를 관찰하고, 이에 대해 구독자에게 이벤트를 전달합니다.Observer: Observable이 발행하는 이벤트나..
기존 프로젝트는 Retrofit을 매번 모든 Api 통신 클래스 하위에 가지고 있었습니다. 또한 통신 과정에서 예외 처리하는 부분까지 반환되는 타입이 매번 다를 뿐 거의 유사했기 때문에코드 관리 및 낭비를 줄이기 위한 정리가 필요했습니다. API 통신 클래스들이 추상 클래스를 상속받는 형태로 처리를 진행했습니다.먼저 각각의 API 통신 결과 타입은 항상 상이할 수 있기에 제네릭을 활용하여 값을 받을 Result Class를 만들어줍니다.sealed class Result { data class Success(val data: T) : Result() data class Error(val message: String? = "ERROR", val code: Int) : Result()}매번 다른 ..
SeungYong.Lee
'분류 전체보기' 카테고리의 글 목록 (10 Page)