본문 바로가기

분류 전체보기301

2024 Android 앱 모듈화 가이드 (Modularization) 배경이번에 devfest에서 안성용 개발자님께서 발표하셨던 Android Modularization Recipe에 대해 보게 되었습니다. 기존에 제가 아는 Modularization은 아래 그림같은 형태로 app, feature, data, core 정도로 나눠서 구성했었는데 feature 단위가 커짐에 따라 어떻게 모듈을 구성해야할지, 재사용성과 빌드속도가 향상된 것인지 의아했던 부분이 있었는데 이번 기회에 저도 따라가면서 모듈 구조를 완성해보자 라는 생각에 학습하게 되었습니다.  기존 구성했던 방식과의 차이점대부분의 오픈소스 프로젝트를 보면 위의 사진과 같이 큰 묶음으로 모듈을 묶고 있는걸 볼 수 있었습니다. (ex. pokedex, nowinandroid)하지만 이렇게 개발했을 때 1개의 모듈에서 .. 2024. 4. 25.
GSON과 코틀린을 쓰면서 생겼던 일 (nonnull인데 왜 null 값이 들어갔지?) 배경 Retrofit과 GsonConverter를 사용해서 json을 해당 kotlin data class로 변환하는 작업을 진행했습니다. 분명 data class에서는 불변객체로서 선언되어 있는 프로퍼티를 사용했지만 NullPointerException이 발생하는 것을 확인할 수 있었습니다. 그래서 이 원인을 파악해보고자 내부 구조를 확인해봤습니다. 코드 구성 코드는 간단하게 Gson을 사용해서 다음과 같이 구성했습니다. data class TestData( val a: Int, val b: String, val c: Float ) class GsonTest { @Test fun test() { val str = """{"a":1, "b": null}""" val testData = Gson().fro.. 2024. 4. 16.
[CS] 컴퓨터 구조 보호되어 있는 글 입니다. 2023. 10. 13.
[CS] 운영체제 - 메모리 관리 보호되어 있는 글 입니다. 2023. 10. 2.
[Android] Kakao Login 구현하기3 - MVVM+UiState 도입 이제 설정 이후 제대로된 구현 글입니다. 앞에 내용인 프로젝트 설정을 못보셨다면 링크를 참고해주세요! UI에서 카카오톡 구현 사실 앞에서 진행되었던 프로젝트 설정에 비하면 카카오톡 로그인 코드는 굉장히 쉽습니다. (링크) 버튼을 클릭했을 때 이 코드만 넣어주시면 바로 해결됩니다. (만약 설정부분에서 빠진 부분이 있다면 안되겠죠 ㅎㅎ) // 로그인 조합 예제 // 카카오계정으로 로그인 공통 callback 구성 // 카카오톡으로 로그인 할 수 없어 카카오계정으로 로그인할 경우 사용됨 val callback: (OAuthToken?, Throwable?) -> Unit = { token, error -> if (error != null) { Log.e(TAG, "카카오계정으로 로그인 실패", error.. 2023. 9. 30.
[Android] Kakao Login 구현하기2 - 프로젝트 설정 도입 이전 글에서는 카카오 로그인 기본 설정에 대해서 알아봤습니다. (링크) 이번 글에서는 Android 프로젝트를 설정하는 방법에 대해서 정리하겠습니다. 프로젝트 설정 1. 인터넷 사용 권한 App 모듈의 Manifest에 Internet Permission을 추가합니다. 2. Gradle을 설정합니다. Android Studio Artic Fox 버전을 기준으로 관리하는 곳이 달라집니다. build.gradle(프로젝트 레벨): Android Studio Artic Fox 이전 버전 // 최신 Android Studio에서는 allprojects 사용 불가능 allprojects { repositories { google() jcenter() maven { url 'https://devrepo.kak.. 2023. 9. 30.
[Android] Kakao Login 구현하기1 - 기본 설정 배경 이번 사이드 프로젝트에서 카카오 로그인을 구현하게 되었는데 할 때마다 다른 블로그를 찾아보고 코드를 적용해도 이게 맞나.. 싶었습니다. 그래서 제 느낌대로 최대한 간결하게 정리해볼까 합니다! 카카오 API 기본 설정 1. https://developers.kakao.com/ -> 내 애플리케이션 -> 애플리케이션 추가하기 여기서 사업자명이 필요하다고 나오는데 편하게 이름 적으시면 됩니다! 저는 Android 라는 표시가 없는데요? 라고 하실 수 있는데 당연합니다. 저 부분은 플랫폼을 등록해야만 표시됩니다. 2. 플랫폼 등록하기 만들어주신 애플리케이션을 선택해서 좌측 상단 버튼을 통해 플랫폼을 클릭해주세요. 그러면 플랫폼을 등록하는 화면이 나옵니다. 이제부터 많이 어려워하시는 키 해시값이 필요하게 됩.. 2023. 9. 30.
[Android] 도메인 레이어 도메인 레이어 도메인 레이어는 복잡한 비즈니스 로직이나 여러 ViewModel에서 재사용되는 간단한 비즈니스 로직의 캡슐화를 담당합니다. 모든 앱에 이러한 요구사항이 있는 것은 아니므로 이 레이어는 선택사항입니다. 따라서 복잡성을 처리하거나 재사용성을 선호하는 등 필요한 경우에만 도메인 레이어를 사용해야 합니다. 코드 중복을 방지합니다. 도메인 레이어 클래스를 사용하는 클래스의 가독성을 개선합니다. 앱의 테스트 가능성을 높입니다. 책임을 분할하여 대형 클래스를 방지합니다. 이러한 클래스를 간단하고 가볍게 유지하려면 각 사용 사례에서는 기능 하나만 담당해야 하고 변경 가능한 데이터를 포함해서는 안 됩니다. 대신 개발자가 UI 레이어 또는 데이터 레이어의 변경 가능한 데이터를 처리해야 합니다. 종속 항목 일.. 2023. 9. 30.
[Android] 데이터 레이어 데이터 레이어 데이터 레어어는 0개부터 수많은 데이터 소스를 가진 Repository들로 이뤄져있습니다. 앱에서 각각의 다른 유형의 데이터를 다루기 위해 Repository를 생성해야 합니다. Repository는 다음과 같은 역할을 합니다. 앱의 나머지 부분에 데이터 노출 데이터 변경사항을 한 곳에 집중 여러 데이터 소스 간의 충돌 해결 앱의 나머지 부분에서 데이터 소스 추상화 비즈니스 로직 포함 각 데이터 소스 클래스는 파일, 네트워크 소스, 로컬 데이터 베이스와 같은 하나의 데이터 소스만 사용해야 합니다. 계층 구조의 다른 레이어는 데이터 소스에 직접 액세스해서는 안 됩니다. 데이터 영역의 진입점은 항상 Repository입니다. State holder(UI 레이어 가이드 참고) 또는 use cas.. 2023. 9. 29.