본문 바로가기

안드로이드/프로젝트

[안드로이드] 임장노트 #1 프로젝트 구상하기

열심히 공부하기로 결정했으니 개인 프로젝트는 필수아니겠는가? 그래서 개인 프로젝트를 하나 시작했다. 그것에 대한 기록을 해두는 포스팅이다.

 

 

어떤 앱을 만들 것인가?

제테크에 관심이 많아져서 부동산 경매 강의를 듣고 있다. 이 부동산 경매를 듣다보니 많은 사람들이 부동산 경매 물건지에 가서 주변을 살펴보며 부동산을 살지 말지 결정하는 임장을 기록하는 앱을 만들면 재밌겠다 싶어서 시작하게 되었다. 

 

 

목표를 설정하자

당연히 1차적인 목표는 Play Store에 올리는 것이다. 그리고 좀 더 나아가서 서비스를 확장시켜서 내 개인앱을 키워 나가보는게 목표다.

 

 

프로젝트를 구성하자

 

- MVVM

당연스럽게도 디자인패턴은 MVVM이다.

서비스가 확장된다면, 기존의 메소드들을 재사용할 것이다. 그런 기분 좋은 미래를 생각하며, 나중에 있을 확장성을 고려하여 MVVM 패턴을 사용해서 개발을 진행해 나갈 것이다.

 

- Hilt

Dependency Injection도 써볼거다.

Dagger2는 어렵다. 러닝커브 곡선이 내가 많이 낮아진 것 같다. Koin은 오버헤드가 발생한다해서 대규모 서비스엔 적합하지 않다고 한다. 내 서비스는 대규모가 될거니까 오버헤드 걸리면 안된다.

그래서 난이도로 따져서 Koin < x < Dagger2 가 성립되는 Hilt를 사용할거다.

 

 

 

위 두 사진을 보면 ViewModel과 Fragment 연결은 Hilt를 이용했다. 아무리 봐도 의존성 주입을 해주는거 개꿀이다. 개꿀! 따로 Factory 안만들어줘서 개꿀!

 

아 근데 처음에는 좀 많이 어려웠다. Hilt 버전이랑 kotlin 버전이랑 충돌이 나기도하고 이래저래 많은 우여 곡절이 있어서 버전을 수정하다가 둘 다 최신버전으로 맞춰서 작성하니까 무리없이 잘 돌아갔다. 혹시라도 버전 이슈가 있으면, 아래 버전들을 가져다가 쓰기를 추천한다. 아마 Hilt 2.38-beta 랑 Kotlin 1.6(?) 이랑 오류가 생긴걸로 기억한다. 

 

//app 수준의 build gradle
plugins {
    id 'com.android.application'
    id 'kotlin-android'
    id 'kotlin-kapt'
    id "dagger.hilt.android.plugin"
}

android {
    ...
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
    ...
}

dependencies {
	//kotlin
    implementation 'androidx.core:core-ktx:1.7.0'
  
    //hilt
    implementation("com.google.dagger:hilt-android:2.38.1")
    kapt("com.google.dagger:hilt-android-compiler:2.38.1")
    implementation 'androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03'
    kapt 'androidx.hilt:hilt-compiler:1.0.0'
    annotationProcessor 'androidx.hilt:hilt-compiler:1.0.0'
    implementation("androidx.hilt:hilt-navigation-fragment:1.0.0")
}

// Allow references to generated code
kapt {
    correctErrorTypes = true
}

 

// Top-level build file where you can add configuration options common to all sub-projects/modules.
// Project 수준의 build.gradle
buildscript {
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        classpath "com.android.tools.build:gradle:7.0.0"
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.30"
        classpath("com.google.dagger:hilt-android-gradle-plugin:2.38.1")

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

 

-Room

임장노트를 작성하면 어디다가 저장해둘지 고민을 했다. Firebase Database를 쓸까? 하는 생각도 들었지만, 만약 사용자가 많아지면 Firebase에서 감당하기 어려운 데이터 양이 될거로 생각되서 Room을 사용해서 사용자가 작성하는 임장노트를 로컬에 저장하기로 결정했다.

 

-Glide, Retrofit2, tedPermission

이 외 나머지 이미지 처리를 위한 Glide, Retrofit2, TedPermission은 당연하게도 기본 옵션이다. 

* Picasso와 Glide 중에서 Glide를 선택한 이유는 화질이 스마트폰 화면으로 보면, 다소 떨어진 화질을 인지하기 어렵고, 무엇보다 메모리를 적게 먹어서 Glide를 선택했다.

 

 

 

-끝마치며

이제 진득하게 프로젝트를 좀 해야할 필요가 있다. 다만 지금은 이직을 위해서 코딩테스트와 면접준비를 해야 하니까, 잠깐

멈춰둔 상태다. 이 프로세스가 끝나고 다시 진행을 해야한다. 열심히 해야징