티스토리 뷰

#1/Android

[Android/java] Room 사용하기

_쿠나 2021. 5. 31. 11:14

 

오역의 가능성이 잇음. 코드랩 참고, 정확하지 않음

 

Gradle 설정

Entity 설정 (테이블을 정의하는 클래스, 작성될 테이블과 동일한 구성을 가져야한다)

DAO 설정 

Data Access Object: 내가 쓴 Sql을 컴파일 시 validate한다. 메소드와 연관짓는다.

Room DAO에서는 annotation을 사용하게 된다( like @Insert)

DAO는 interface이거나 abstract class이어야만 한다 

 

@Annotation으로 Room에게 클래스들을 정의?알려준다.

 

LiveData: 메서드에서 리턴 값을 LiveData로 하면, Room이 DB 업뎃 시 LiveData 업데이트에 필요한 모든 코드를 생성해준다.

 

Room은요...

SQLite 데이터베이스의 최상위 레이어

SQLiteOpenHelper가 다루는 일들을 관리한다

DAO를 사용

UI 성능 저하를 막기 위해 메인 스레드에서 쿼리 실행 불가. Room 쿼리가 LiveData를 반환, 쿼리들이 백그라운드 스레드에서 자동으로 비동기적으로 실행된다.

SQLite 문을 컴파일 할 때 체크함.

 

Room database 구현

RoomDatabase를 상속해야함. RoomDatabase 클래스 파일을 만들어서 상속.. 

이하는 코드에 표기중... 병기중.. 

 

싱글톤 패턴으로 작성: 한 번에 여러 개의 인스턴스가 열리는 현상을 예방하기 위함.

싱글톤 패턴: 클래스의 인스턴스화를 하나의 single 인스턴스로 제한하는 소프트웨어 디자인 패턴

 

 

WordRoomDatabase.class(현재 클래스, Word.class를 entity로 사용)의 applicationContext에 RoomDatabase 객체를 생성..그 이름을 word_database로 지음..  >> 데이터베이스를 만들고 싱글톤 INSTANCE를 반환함.

 static WordRoomDatabase getDataBase(final Context context){
        if(INSTANCE == null){
            synchronized (WordRoomDatabase.class){
                if(INSTANCE == null){
                    INSTANCE = Room.databaseBuilder(context.getApplicationContext(),
                            WordRoomDatabase.class, "word_database")
                            .build();
                }
            }
        }
        return INSTANCE;
    }

 

 

Repository란? github repo밖에 모르는데요......

 

다양한 데이터 소스에 대한 접근을 추상화하는 클래스..   추상화하다 >> 막 딱 정해둔게 아니라 대충 설정해둠.. 구체화는 나중에

Repository는 쿼리를 관리하고 multiple backends를 사용할 수 있게 해줌. 

DAO랑 네트워크의 다리

 

아마 이것도 나중에 다시 한 번 봐야겠다...

 

 

 

뷰 모델 데이터를 UI에 제공하는 역할. configuration이 바껴도 멀쩡

Repository와 UI 사이에서 커뮤니케이션을 담당한다. 

또는 fragment 사이에서 데이터를 공유하기 위해 viewModel을 사용할 수 있다.

 

뷰 모델에서 LiveData를 changeable 데이터로 사용함. 

 

15. Connect with the data

UI랑 데이터 베이스를 연결해 사용자가 입력하는 새로운 단어를 집어넣고 현재 디비에 있는 단어들을 UI에 띄워보자

 

ViewModelProvider를 사용한다. < Activity와 ViewModel을 associate 하기 위함 

 

Activity 시작(onCreate) -> viewModelProviders에서 ViewModel 생성 

Activity 끝(configuration이 바꼈다던지의 이유로) -> ViewModel 유지됨. 

Activity 가 다시 생성 -> ViewModelProviders가 existing ViewModel을 반환. 

 

캐시: 컴퓨터 과학에서 데이터나 값을 미리 복사해 놓는 임시 장소. 캐시에 저장된 데이터를 캐시된 데이터라고 부르는 듯..

 

 

갑자기 startActivityForResult() 가 deprecated 됐다길래 .. >> startActivityForResult() deprecated 참고하기

 

요약

MainActivity: 단어를 RecyclerView와 WordListAdapter를 통해 띄움. Observer가 있어서 DB의 LiveData를 감시하고 변화를 알아챌 수 있다

NewWordActivity: 새 단어를 리스트에 더하는 작업을 한다.

WordViewModel: data 레이어에 접근하는 메서드를 제공함. 이는 LiveData를 반환해서 MainActivity가 observer relationship을 설정할 수 있게 함 >그림의 점선 표시

LiveData: UI 컴포넌트에서 자동 업데이트가 가능하게 만듬. Mainactivity에서 Observer가 LIveData의 단어들을 캐치하고 바뀌면 알아차림!

Repository: 하나 이상의 데이터 소스를 관리. ViewModel이 기본 데이터 공급자와 상호작용 할 수 있는 메서드를 제공함. 이 코드랩에서는 Room database가 백엔드에 해당한다. 

Room: SQLite databse를 구현하고 주변을 wrapper한다.

DAO: 메서드 호출을 데이터베이스 쿼리에 매핑한다. Repository가 getAlphabetizedWords() 하고 부르면 해당하는 쿼리문을 실행

Word: entity class.

 

 

MainActivity에서 ViewModelProvider 객체인 mWordViewModel이 getAllWords를 호출, observe

-> WordViewModel에서 getAllWords는 mAllWords를 반환, 이는 WordRepository의 getAllWords 호출결과

-> WordRepository는 getAllWords에서 mAllWords를 반환, 이는 WordDao의 getAlphabetizedWords의 호출결과

 

 

이 그림이 전체적인 환경 파악에 도움이 될 것같다!!!!! 매우!!

 

 

728x90

'#1 > Android' 카테고리의 다른 글

[Android/Kotlin] Adapter - Activity  (0) 2021.06.02
[Android] application Id - 어플을 복사하자!  (0) 2021.05.31
[Android/Kotlin] 코루틴  (0) 2021.05.24
뷰바인딩  (0) 2021.05.21
[Android] requireActivity  (0) 2021.05.14
댓글
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함