전체 글

전체 글

    [JETPACK개론] ROOM(2)

    이 글은 전에 포스팅했던 ROOM(1)에 이어서 공부한 내용을 정리해보겠다! 저번 코드에 이어서 Multi Table, 테이블을 하나 추가하고, 이를 ViewModel로 분리하여 왜 viewModelScope에서 Disaptchers.IO를 사용하는지까지 알아보자. text_table만 있던 데이터베이스에 word_table이라는 테이블을 추가해보자. @Entity(tableName = "word_table") data class WordEntity ( @PrimaryKey(autoGenerate = true) @ColumnInfo(name = "id") var id : Int, @ColumnInfo(name = "text") var text : String ) 테이블을 만들어 주었으니 Dao에 똑같이 ..

    [JETPACK개론] ROOM(1)

    [JETPACK개론] ROOM(1)

    전에 포스팅했던 글에서 SQLite에 대해서 다뤄보았다. SQLite 게시물 바로가기 -> [JETPACK개론] SQLite(1) 앱을 이용하다보면 네트워크가 끊겼을 때 네트워크 오류입니다. 다시 시도해 주세요 라는 메세지를 본 적이 있다. 하지만 카카오톡 채팅방처럼 네트워크가 연결되어 있지 않은 상황에서도 잘 ssongcode.tistory.com Room은 SQLite를 완벽히 활용하면서 원활한 데이터베이스 엑세스가 가능하도록 하는 업그레이드 버전이라 할 수 있다. 여러 장점이 있지만 반복적이고 오류가 발생하기 쉬운 상용구 코드를 최소화하는 것이 Room의 장점이다. 이러한 이유로 JetPack 라이브러리에 포함된 Room의 사용을 권장하고 있다! Room 구성요소 데이터베이스 - 데이터베이스는 앱..

    [Kotlin/Basic] 코틀린에서의 중첩클래스

    [Kotlin/Basic] 코틀린에서의 중첩클래스

    1. 중첩 클래스의 종류 자바에서 static을 사용하는 중첩클래스와 사용하지 않은 클래스 두 가지로 나눌 수 있었다. static을 사용하는 중첩클래스라면 바깥 클래스를 바로 불러올 수 없었지만, static을 사용하지 않는 중첩클래스라면 바깥 클래스를 바로 불러올 수 있었다. 하지만 이를 권장하지 않고 있다. 왜냐하면, 내부 클래스는 숨겨진 외부 클래스 정보를 가지고 있어, 참조를 해지하지 못하는 경우 메모리 누수가 생길 수 있고, 이를 디버깅하기 어렵기 때문이다. 이렇기 때문에 따라서 자바에서 클래스 안에 클래스를 사용할 때에는 static을 사용하곤 했었다. 이제 그럼 코틀린에서의 중첩클래스와 내부 클래스를 어떻게 구현할 수 있는지 알아보자. 2. 코틀린의 중첩 클래스와 내부 클래스 class ..

    [Kotlin/Basic] 코틀린에서의 object 키워드

    [Kotlin/Basic] 코틀린에서의 object 키워드

    1. static 함수와 변수 class Person private constructor( var name : String, var age : Int, ){ //static이 존재하지 않는다. //이는 Factory처럼 이름을 지어줄 수도 있고, 인터페이스를 구현해 줄 수도 있음 companion object Factory { //클래스와 동행하는 유일한 오브젝트라는 의미 //자바에서와의 static 변수와 함수처럼 활용된다. /* 정적으로 인스턴스끼리의 값을 공유 클래스가 인스턴스화 될 때 새로운 값이 복제되는 것이 아니라, */ private const val MIN_AGE = 1 //const 를 붙이면 컴파일 시에 변수가 할당된다. //런타임때 할당되는 것이 아니라, //진짜 상수에 붙이기 위한 ..

    [JETPACK개론] SQLite(2)

    [JETPACK개론] SQLite(2)

    전에 포스팅했던 내용에 이어서 SQLite를 다뤄볼 예정이다! 전 글에서는 SQLite에서 테이블을 만들고, insert하고, delete하고, select하는 구문을 작성했으면 이번 글에서는 view를 간단히 만들어보고 이 뷰에서 어떻게 활용할 수 있는지 다뤄볼 것이다! 먼저 위에 EditText에서 작성한 것을 insert버튼을 눌렀을 때 테이블에 들어가고, GetAll 버튼을 눌렀을 때에는 resultArea에 테이블에 있던 값이 나오고, DeleteAll을 했을 때에는 테이블의 전체 값을 삭제하는 것을 확인할 것이다. insert구문 fun insert(str : String) { val db = this.writableDatabase val values = ContentValues().apply..