[프로그래머스/Kotlin]Lv2 - 디펜스 게임
·
프로그래머스/Kotlin | Level2
프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr문제문제 설명준호는 요즘 디펜스 게임에 푹 빠져 있습니다. 디펜스 게임은 준호가 보유한 병사 n명으로 연속되는 적의 공격을 순서대로 막는 게임입니다. 디펜스 게임은 다음과 같은 규칙으로 진행됩니다.준호는 처음에 병사 n명을 가지고 있습니다.매 라운드마다 enemy[i]마리의 적이 등장합니다.남은 병사 중 enemy[i]명 만큼 소모하여 enemy[i]마리의 적을 막을 수 있습니다.예를 들어 남은 병사가 7명이고, 적의 수가 2마리인 경우, 현재 라운드를 막으면 7 - 2 = 5명의 병사가 남습니다.남은 병사의 수보다 현재 라운드의 적의 수가 더 많으면 게임이..
이제는 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 (..
Jetpack Compose에서 remember vs rememberSaveable 차이 완벽 정리
·
Android/Jetpack
Jetpack Compose에서는 remember와 rememberSaveable을 사용하여 상태(state)를 유지할 수 있다.하지만 두 함수의 동작 방식이 다르며, 유지되는 범위도 차이가 있다. 1️⃣ remember📌 개념remember는 Composable 함수가 재구성(Recomposition)될 때 값이 유지하지만 Activity가 재생성되거나 화면이 회전하면 값이 초기화.Composition Scope(컴포저블 생명주기) 안에서만 유지🔹 언제 사용해야 할까?UI 상태(애니메이션 진행 상태, UI 트리거 등)를 유지할 때화면 회전 후에도 데이터가 유지될 필요가 없을 때2️⃣ rememberSaveable📌 개념rememberSaveable은 remember와 비슷하지만, Activity가..
[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. 의존성 버전 관리여러 모..
Gradle dependencies | implementation vs api 차이, 언제 무엇을 써야 할까?
·
Android/도구 및 라이브러리
Android에서 환경 세팅을 할 때 library를 추가하기 위한 문법이 있다.implementation과 api.이 두가지를 혼용하여 사용하는 경우가 있는데 어떤 점이 다른걸까?📌 implementation vs api 차이implementation현재 모듈 내부에서만 라이브러리를 사용 가능.이 모듈을 의존하는 다른 모듈에서는 이 라이브러리를 사용할 수 없음.빌드 속도가 더 빠름 (다른 모듈에 영향을 주지 않아서!)api현재 모듈뿐만 아니라, 이 모듈을 의존하는 다른 모듈에서도 라이브러리를 사용 가능.즉, 이 모듈이 라이브러리를 공개(공유)하는 것과 같다.하지만 변경될 때 빌드 속도가 느려질 수 있음 (다른 모듈까지 영향을 받음)📌 예제 비교✅ implementation 사용dependencies..
Gradle 빌드 최적화의 끝판왕! gradle.properties 100% 활용법
·
Android/고급 주제
기존의 사용하던 Android Studio의 버전은 Koala였다.지난해 말, Ladybug가 출시되었고 나는 오늘 해당 버전으로 업그레이드 시도를 하였다. 역시나… 쉽지만은 않은 여정.AGP 버전을 Ladybug에 맞게 8.5로 업그레이드 시키면서 다양한 오류가 발생하였다.이 오류를 해결하기 위해 gradle.properties 내용을 많이 수정했다. 그렇다면 여기서 gradle.properties란 무엇일까?gradle.propertiesgradle.properties는 Gradle 빌드 시스템의 전역 설정을 정의하는 파일이다.이 파일은 Gradle 빌드 속도 최적화, JVM 메모리 설정, AndroidX 전환, R8 최적화 등의 설정을 관리한다. 📌 주요 역할✅ Gradle 빌드 성능 최적화✅ A..
안드로이드 성능 최적화, 왜 경량 스레드(코루틴)를 써야 할까?
·
Android/도구 및 라이브러리
안드로이드에서는 흔히 API 통신을 할 때 Coroutine을 사용한다.코루틴은 안드로이드의 대표적인 경량 스레드 방식이다.그렇다면 스레드는 무엇이고, 그 안에서 경량 스레드는 무엇일까? 1. 스레드란?스레드(Thread) 는 프로세스 내부에서 실행되는 하나의 작업 흐름을 의미한다.흔히 프로세스와 많이 비교를 하는데 안드로이드로 따지자면 앱이라는 프로세스 안에 여러개의 스레드가 존재하는 것이다.즉, 스레드는 앱(프로세스)에서 여러개의 작업을 동시에 실행시켜주는 단위라고 생각하면 된다. 안드로이드 앱도 내부적으로 메인 스레드(Main Thread) 를 가지고 있고, UI를 업데이트하는 모든 작업은 여기서 수행이 된다.✅ 안드로이드에서 Thread안드로이드 앱에서는 기본적으로 하나의 메인 스레드(UI 스레드..
Kotlin inline 함수, 진짜 성능 최적화에 도움이 될까?
·
프로그래밍 언어/Kotlin 기초
나는 Kotlin에서 함수를 만들 때 inline 함수를 자주 쓰는가?솔직히 말하면 그냥 일반 함수로도 충분한데 굳이 사용할 필요성을 느끼지 못했다. 그런데 inline 함수가 성능 최적화에 도움이 된다는 말을 들었다.사실일까?1. inline 함수란?inline 키워드는 고차 함수(high-order function)를 사용할 때 함수 호출을 제거하고,함수 본문을 직접 호출 위치에 삽입하는 기능이다. 즉, 컴파일러가 해당 함수를 호출하는 대신 코드를 직접 복사하셔 삽입(inlining)한다.일반 함수와 inline 함수를 비교한 예제를 확인해보자 ! 일반 함수 vs inline 함수 예제fun executeLambda(lambda: () -> Unit) { println("Before lambda..
Kotlin 상태 관리 | Sealed Class vs Enum Class 차이점
·
프로그래밍 언어/Kotlin 기초
개발을 하나보면 상태 관리가 중요하다.그럴 때 자주 등장하는 Sealed Class와 Enum Class.이 두개의 차이점에 대해 확인해보자. 1. Sealed Class vs Enum Class 차이점!✅ 언제 사용하면 좋을까?sealed class → 상태 관리, API 응답 처리, 다양한 타입을 표현할 때// Sealed Class 사용 예시sealed class NetworkResult { data class Success(val data: String) : NetworkResult() data class Error(val message: String) : NetworkResult() object Loading : NetworkResult()} enum class → 변하지 않는 ..
Android에서 파일을 관리할 때, MIME 타입은 무엇일까?
·
카테고리 없음
Android에서 멀티미디어 파일을 관리하다 보면 MIME 타입을 설정하는 게 나온다.평소에는 그저 단순하게 확장자 명을 따지는건가? 싶긴 했는데정확하게 어떤 개념인지 몰라 정리해봤다.  MIME 타입이란?Android에서 MIME 타입이란 Multipurpose Internet Mail Extensions Type의 약자이다.파일이나 데이터의 형식을 나타내는 문자열을 의미한다. 일반적으로 콘텐츠의 유형을 식별하고, 이를 적절하게 애플리케이션과 연결하는 데에 사용된다. MIME 타입의 대표적인 종류파일 유형MIME 타입텍스트 파일text/plainHTML 파일text/htmlJSON 데이터application/json이미지 파일 PNGimage/pngJPEGimage/jpegGIFimage/gif비디오 ..
Caused by: com.android.aaptcompiler.ResourceCompilationException: Failed to compile values resource file
·
Android/에러 및 이슈 사항
🌟 들어가기 전앱에서 하드코딩 된 string을 전부 resources 파일로 고치는 작업을 하였는데,빌드하는 과정에서 오류가 발생했다.**Caused by: com.android.aaptcompiler.ResourceCompilationException: Failed to compile values resource file** 흔히 오류는 몇번째 줄에서 났는지 알려주면 그 부분만 체크하면 되는데이번 오류는 그냥 “빌드 오류나쪄~~~” 만 있으니까 찾아내기가 너무 답답… 이 경우에 체크해봐야 할 사항은 뭘까? 🔍 세부 내용특수문자를 체크하자나는 딱 values-en 을 빌드하는 과정에서 오류가 발생했다.하지만 리소스 형태도 그렇고 틀린 부분이 없었다.그렇다면 ‘영어’라는 특수성에서 시작된 문제일까? ..
Android UI 관리하기 | 하드코딩 된 string을 모두 resource 파일로 옮기기
·
Android/UI-UX 디자인
🌟 들어가기 전요즘 같은 국제적인 시대에 앱에서 다국어 처리는 매우 중요하다.strings.xml 리소스 파일을 통해 다들 다국어를 지원하고 있을 것이다. 하지만 개발을 하다보면 “나중에 해야지~” 하고 우선 큰 따옴표로 하드코딩 텍스트를 박아놓고 까먹은 경우가 있지 않을까?아니면 내가 신규로 맡은 앱에서 이전 개발자가 귀찮다는 이유로 리소스 관리를 하지 않은 경우도 있지 않을까? 그렇다면 나는 어떻게 하드코딩 된 string을 한번에 찾아낼 수 있을까? 🔍 세부 내용첫번째 방법. 전체 검색을 활용하자우리에겐 Ctrl+Shift+F 라는 전체 검색 기능이 존재한다. 하지만 단순 검색이 아니다.검색을 할 때도 정규표현식을 이용하여 검색하면 더 쉽게 검색할 수 있다.“.*” 라는 정규 표현식을 사용하면 ..
Kotlin에서 launch와 async는 무엇이 다를까?
·
프로그래밍 언어/Kotlin 기초
🌟 들어가기 전오늘은 launch와 async의 차이점에 대해 학습했다. 두 개 모두 코루틴을 실행할 때 사용되지만, launch는 결과를 반환하지 않고 단순 실행하는 반면,async는 값을 반환할 수 있다는 차이가 있다. 그동안 개발을 해오면서 두개의 차이를 정확하게 모르고 사용했다.그냥 예제 긁어서 복붙…. ㅠㅠ 그래서 파헤쳐본 launch와 async는 무엇이 다를까? 🔍 세부 내용1. launch vs async 차이점launch → 결과를 반환하지 않고, 단순히 새로운 코루틴을 실행async → 결과를 반환하는 Deferred 객체를 생성해서 await()로 값을 받을 수 있음2. 예제 코드import kotlinx.coroutines.*fun main() = runBlocking { ..
KMP vs CMP
·
개발/개념 및 기법
🌟 들어가기 전지난 번에는 Android와 iOS 모두 개발 가능한 KMP를 알아보았다.그런데 이건 UI를 각각 네이티브에 맞춰 따로 개발해야 하는 이슈 !!! 그럼 내가 SwiftUI를 다시 배워야 하냐구우~?!?!?!?!!! 그래서 그럴 필요가 없는 CMP를 체크 ✅ 🔍 세부 내용KMP (Kotlin Multiplatform)정의: Kotlin을 사용하여 여러 플랫폼(Android, iOS, JVM, JS 등)에서 동작하는 코드를 작성할 수 있도록 하는 기술.주요 특징:공유 코드: 비즈니스 로직, 네트워크, 데이터 레이어 등을 공통 모듈에서 구현 가능.각 플랫폼별 구현 가능: expect/actual 키워드를 사용해 플랫폼별 코드 작성 가능.UI 분리: 각각의 플랫폼에 맞춰 UI 제작CMP (Co..
Kotlin Multiplatform (KMP)
·
개발/개념 및 기법
🌟 들어가기 전하이브리드 앱 하면 흔히들 떠올리는 게 RN과 플러터일까?하지만 안드로이드에는 KMP가 있다 ~!! 심지어 KMP로는 android, ios 뿐만 아니라 서버까지 가능하다구!!!!!!그러면 대체 KMP는 무엇이란 말인가. 🔍 세부 내용Kotlin Multiplatform (KMP)Kotlin Multiplatform (KMP)는 JetBrains가 개발한 Kotlin 언어를 기반으로여러 플랫폼(Android, iOS, 웹, 데스크톱 등)에서 공통 코드를 작성하고 재사용 할 수 있도록 지원하는 기능이다.이를 통해 중복된 코드를 줄이고 생산성을 높이면서도 각 플랫폼의 고유한 기능을 활용할 수 있다.코드 공유: 비즈니스 로직, 데이터 처리, API 호출 등 플랫폼 간 중복된 코드를 통합.플랫..
뿌꾸 빵
'분류 전체보기' 카테고리의 글 목록 (2 Page)