전체 글(355)
-
Retrofit Singleton 패턴을 유지하면서 ApiService를 기능별로 분리하기
Retrofit을 이용하여 API 통신을 하려면 Retrofit 객체를 만들어야 한다.이 때, 객체에 BaseURL을 주입해줘야 하는데 대부분의 프로젝트에서는 url이 하나로 통일되지는 않을 것이다.게다가 앱 규모가 커질수록 API 호출 개수는 무수히 많아지는데이걸 하나의 파일에서 관리하기는 불가능.Retrofit 객체를 싱글톤으로 유지하면서 APIService를 기능별로 분리하려면 어떻게 해야할까?1️⃣ API 인터페이스를 기능별로 분리각 도메인(feature)별로 @Headers를 추가해서 Base URL을 구분하면 된다.✅ AServiceinterface AService { @GET("endpoint-a") @Headers("Base-Url: API_A") suspend fun ge..
2025.02.17 -
Kotlin 코딩테스트의 Kick! 우선순위큐 (Priority Queue)
알고리즘 공부를 하면서 은근 자주 쓰게 되는 기능. 우선순위 큐 ~!어떤 것일까?우선순위 큐 (Priority Queue)우선순위가 높은 요소부터 꺼내는 자료 구조기본적으로 힙(Heap) 구조를 사용하여 내부적으로 요소들을 정렬✅ 특징자동 정렬요소를 add()하면 우선순위가 높은 순서로 정렬됨.하지만 poll()을 호출할 때까지 정렬된 상태는 아니며, 꺼낼 때 우선순위에 따라 자동으로 정렬됨.우선순위 기반우선순위가 높은 요소를 먼저 처리하며, 기본적으로 최소 힙(Min-Heap)을 사용.즉, 가장 작은 값을 우선적으로 꺼냄.최대 힙(Max-Heap)을 사용하려면 Comparator를 설정해야함삽입 시간add() 또는 offer()는 O(log n) 시간 복잡도꺼내는 시간poll()은 O(log n) 시간..
2025.02.15 -
[프로그래머스/Kotlin]Lv2 - 디펜스 게임
프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr문제문제 설명준호는 요즘 디펜스 게임에 푹 빠져 있습니다. 디펜스 게임은 준호가 보유한 병사 n명으로 연속되는 적의 공격을 순서대로 막는 게임입니다. 디펜스 게임은 다음과 같은 규칙으로 진행됩니다.준호는 처음에 병사 n명을 가지고 있습니다.매 라운드마다 enemy[i]마리의 적이 등장합니다.남은 병사 중 enemy[i]명 만큼 소모하여 enemy[i]마리의 적을 막을 수 있습니다.예를 들어 남은 병사가 7명이고, 적의 수가 2마리인 경우, 현재 라운드를 막으면 7 - 2 = 5명의 병사가 남습니다.남은 병사의 수보다 현재 라운드의 적의 수가 더 많으면 게임이..
2025.02.15 -
이제는 SAA의 시대 ! SAA vs MAA 전격 비교
안드로이드에서는 가장 메인이 되는 화면인 Activity가 있다.예전에는 Activity로만 화면 구현을 했으면, Fragment 등장 이후로는 더 가벼운 fragment 이용을 권장했다.하지만 Fragment도 어쩔 수 없이 Activity 안에 종속이 되어 있었고,모듈 별로 기능을 정의할 때는 Activity를 사용할 수 밖에 없었다. Compose가 등장했고, 같이 등장한 개념인 SAA (Single Activity Architecture).과연 Multi Activity Architecture보다 나은 이점은 무엇일까? 1️⃣ SAA(Single Activity Architecture) vs MAA(Multiple Activity Architecture) 항목 SAA (단일 액티비티) MAA (..
2025.02.14 -
Jetpack Compose에서 remember vs rememberSaveable 차이 완벽 정리
Jetpack Compose에서는 remember와 rememberSaveable을 사용하여 상태(state)를 유지할 수 있다.하지만 두 함수의 동작 방식이 다르며, 유지되는 범위도 차이가 있다. 1️⃣ remember📌 개념remember는 Composable 함수가 재구성(Recomposition)될 때 값이 유지하지만 Activity가 재생성되거나 화면이 회전하면 값이 초기화.Composition Scope(컴포저블 생명주기) 안에서만 유지🔹 언제 사용해야 할까?UI 상태(애니메이션 진행 상태, UI 트리거 등)를 유지할 때화면 회전 후에도 데이터가 유지될 필요가 없을 때2️⃣ rememberSaveable📌 개념rememberSaveable은 remember와 비슷하지만, Activity가..
2025.02.13 -
[libs.version.toml] Gradle Version Catalogs를 사용하여 gradle 개선하기
안드로이드 프로젝트 세팅에서 가장 중요한 부분은 아무래도 gradle 관리가 아닐까?gradle 파일은 두가지 언어로 작성할 수 있다. Groovy와 Kotlin 예전엔 전부 Groovy만 써왔으면 이젠 확실히 Kotlin으로 많이 넘어간 추세이다.그러면서 유의미한 변화가 있다. 바로 libs.version.toml의 도입이다. libs.version.toml은 Version Catalogs 기능을 활용하여 의존성을 효율적으로 관리하는 파일이다.Gradle의 Version Catalogs는 Gradle 7.0 이상부터 지원되며, libs.version.toml을 사용하면 의존성 버전과 라이브러리를 한 곳에서 선언하고 관리할 수 있다.📌 libs.version.toml의 역할1. 의존성 버전 관리여러 모..
2025.02.12