[코드 리팩토링] '미주정복' 3일차 - MainActivity, MainScreen, Database 설계

이윤진·2024년 1월 16일
0

코드 리팩토링

목록 보기
4/12

기존 MainActivity, MainScreen 구조

  1. MainActivity
    • MainScreen 시작
  2. MainScreen
    • @Compose 함수들, Navigation 관련 함수

바뀐 구조

MainScreen을 MainView로 파일 및 함수 이름을 변경하였다.
MainViewModel 파일을 만들었다.

  1. MainActivity는 MainView에 MainViewModel을 넘겨주는 코드를 추가하였다.
  2. MainView에 NavigationGraph와 MainView에 대한 @compose 함수가 같이 있었기 때문에, NavigationGraph는 따로 파일을 만들어 빼주었다.

StockScreen

StockScreen의 파일 및 함수 이름을 StockView로 변경하였다.
원래 이 화면은 서버에서 값을 받아와, 보유 주식과 달러를 보여주는 역할을 하였다.
그러나 지금 서버를 사용할 수 없기 때문에 이 부분을 Room으로 대체하여 개발하려고 한다.
현재 데이터베이스는 UserData로만 구성되어있다.
보유 주식에 관한 정보들이 같이 들어가야 하기 때문에 다른 data class도 만들어서 정보를 저장할 수 있게 하였다.

[객체 간 관계 정의 - android 공식 문서]
https://developer.android.com/training/data-storage/room/relationships?hl=ko

StockData

@Entity
data class StockData (
    @PrimaryKey val userId : Int,
    @ColumnInfo(name = "stock_name") val stockName : String,
    @ColumnInfo(name = "stock_quantity") val stockQuantity : String,
    @ColumnInfo(name = "exchange") val exchange : String,
    @ColumnInfo(name = "stock_price") val stockPrice : String,
    @ColumnInfo(name = "stock_dividend") val stockDividend : String
)

DividendData

@Entity
data class DividendData (
    @PrimaryKey val userId : Int,
    @ColumnInfo("stock_name") val stockName : String,
    @ColumnInfo("stock_dividend") val stockDividend : String,
    @ColumnInfo("month") val month : String
)

AppDatabase 변경

@Database(entities = [UserData::class, StockData::class, DividendData::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
    abstract fun userDao(): UserDao
    abstract fun stockDao() : StockDao
    abstract fun dividendDao() : DividendDao
}

DatabaseModule 변경

@Module
@InstallIn(SingletonComponent::class)
class DatabaseModule {
    @Provides
    @Singleton
    fun provideDatabase(
        @ApplicationContext context: Context
    )=
        Room.databaseBuilder(
            context,
            AppDatabase::class.java,
            context.getString(R.string.app_name)
        ).build()

    @Provides
    @Singleton
    fun provideUserDAO(database: AppDatabase) : UserDao = database.userDao()

    @Provides
    @Singleton
    fun provideStockDAO(database: AppDatabase) : StockDao = database.stockDao()

    @Provides
    @Singleton
    fun provideDividendDAO(database: AppDatabase) : DividendDao = database.dividendDao()
}
profile
Android/Flutter 개발

0개의 댓글