[TIL] 230914 회고

서정한·2023년 9월 14일
0

내일배움캠프 7기

목록 보기
46/66

Intro

  • 오늘은 MVVM 구조에대해 공부해보는 시간을 가졌다. 안드로이드 CodeLab을 따라가며 학습해보았다.

MVVM구조

  • MVVM은 여러 블로그에서 뭔지 잘 설명되어있으니 그곳을 참고하는것으로하고..! 간단히 내가 정리한것은 안드로이드가 워낙 처리할게 많고 복잡하다보니 어떻게하면 UI와 DATA를 분리할 수 있을까?가 가장 큰 고민인듯하고 현재는 MVVM이 큰 구조의 앱에 대응하기 좋다는 것 정도로 정리되었다.

Room

  • 오늘은 Room에 대해 중점적으로 살펴보았다.

개요

  • 안드로이드에서 Data를 저장할때 사용하는 Database ORM

특징

Entity

  • 쉽게 말하면 Table을 정의한다고 보면된다.
  • android에서는 data class로 만들어 사용한다.
@Entity(tableName = "word_table")  
data class Word(  
    @PrimaryKey(autoGenerate = true)  
    val id : Int,  
    @ColumnInfo(name = "word")  
    val word: String  
)
  • @Entity [[Annotation]]에 정의된 class를 가져와 사용한다.
  • @PrimaryKey는 DB의 PK이고 당연히 자동생성 가능하다.(굳)
  • @ColumnInfo는 해당 열의 정보를 뜻한다. Database를 만들때 여기에 설정한 이름이 해당 열의 이름이 된다.

DAO(Data Access Object)

  • 여기에서는 SQL 쿼리를 지정하여 메서드로 만들어놓는다. 그러면 이제 실제DB를 사용하는곳에서 DAO의 메서드를 가져와 실제 Query를 날린 결과를 return 받게되는것이다.
  • DAO는 기본적으로 abstract or interface 여야한다.
  • DB처리는 일반적으로 언제 끝날지모르기에 비동기처리를해줘야한다. 그래서 [[코루틴]]이 지원된다.
@Dao  
interface WordDao {  
    @Query("SELECT * FROM word_table ORDER BY word ASC")  
    fun getAlphabetizedWords() : Flow<List<Word>>  
  
    @Insert(onConflict = OnConflictStrategy.REPLACE)  
    suspend fun insert(word: Word)  
  
    @Query("DELETE FROM word_table")  
    suspend fun deleteAll()  
}

Database

  • [[Room]]은 SQLite 데이터베이스 위에 있는 데이터베이스 레이어다.
  • [[Room]]은 DAO를 사용하여 데이터베이스에 쿼리를 실행한다.
  • UI 성능저하를 막기위해 [[Room]]은 기본적으로 비동기 실행처리된다.
@Database(entities = arrayOf(Word::class), version = 1, exportSchema = false)
abstract class WordRoomDatabase : RoomDatabase(){  
    abstract fun wordDao(): WordDao  
    companion object {  
        private var INSTANCE: WordRoomDatabase? = null  
        fun getDatabase(context:Context): WordRoomDatabase {  
            return INSTANCE ?: synchronized(this) {  
                val instance = Room.databaseBuilder(  
                    context.applicationContext,  
                    WordRoomDatabase::class.java,  
                    "word_database"  
                ).build()  
                INSTANCE = instance  
                instance            }  
        }  
    }  
}

Reference

Outro

  • MVVM의 구조가 아직까지 머리속에서 코드와 매핑되지않는다.(당연하겠지..) 현재 내 뇌의 패러다임을 바꾸는 중이라 공부속도가 더디긴한데 조만간 적응이 조금 되면 그래도 이전보다는 좀 빨라지지않을까 기대해본다..!
profile
잘부탁드립니다!

0개의 댓글