본문 바로가기

전체 글

(163)
Rxjava Single 안의 값 사용하기 1. flatMap() / flatMapCompletable() -> 각각 Single, Completable 형태로 반환하며, it 으로 Single, Completable 안의 값 사용가능 2. subscribe() -> Disposable 형태로 반환 3. blockingGet() 이름 그대로 현재 쓰레드를 blocking 시킨다. 따라서 완전한 동기 코드와 사용해야하며,observeOn(MainThread) 같이 UI 쓰레드를 사용하는 코드와는 절대 같이 사용하면 안됨! fun getInfo(): Info { 1. DB 에서 info 값을 가져온다. -> return Info or nullPointerException 2. 이때 DB에 값이 존재하지 않아 nullPointerException 에러..
Rxjava 에러 캐치 Rxjava 에서는 에러 발생시 onError 이벤트가 발생하기 때문에 기존 사용하던 try-catch 문을 사용할 수 없다. 하지만 onError 이벤트는 흐름이 중단된다는 문제점이 있다. 이때 소비자가 모든 예외를 미리 알고 처리하기는 힘드므로 생산자 쪽에서 에러를 캐치해서 사전에 예외처리를 해둘 수 있는 3가지 Operator 를 정리해보려고 한다. *Rxjava 에서는 에러도 어떠한 데이터로 본다. onErrorReturn() 에러 발생 시점에 특정 값으로 대체 + 선언적으로 예외 발생 처리 가능 .onErrorReturn { it:Throwable when (it) { is java.lang.NullPointerException -> { it.printStackTrace() } } } onErr..
RecyclerView 안에 EditText 보호되어 있는 글입니다.
Android Studio: CreateProcess error=206, The filename or extension is too long 해결 방법 : Win + R 에서 "resmon" 사용중인 cpu 목록에서 java.exe 프로세스를 종료해주고 다시 빌드하니 동작한다. 파일 이름이 길어서 발생하는 오류인 건 알겠는데 왜 컴퓨터를 재부팅하거나 프로세스를 종료시키면 정상적으로 돌아가는 지 모르겠다. 구글링했을 때 가장 많이 나오던 해결 방법은 말그대로 파일 이름이 길기 때문에 C드라이브/User/AndroidStudioProject ... 이런 식의 경로를 D나 E드라이브로 옮겨주어 파일명을 줄이는 방법이었지만 괜히 git 연동 잘못될까봐 폴더 경로 바꾸기는 시도해보지 않았다. 그래도 컴퓨터 재부팅보다는 나은 방법이라서 다행 ㅠㅠ * clean build나 cache 삭제도 아무 소용없었다. ** 참고로 이 오류 말고도 가끔 해당 디렉토..
Kotlin 클래스 위임 코틀린에서 클래스는 기본적으로 final이다. (상속할 수 없다는 뜻) 따라서 상속하고 싶은 클래스는 명시적으로 open 키워드를 써줘야 한다. 하지만 상속할 수 없는 클래스에 기능을 추가하거나 수정, 활용하고 싶은 경우 위임을 사용하면 좋다. "decorate pattern" 기반 클래스를 property로 가지고 변경이나 추가를 원하는 기능을 재정의한다. "by" 신규, 변경되는 값 외의 나머지를 기반 객체로 연결하는 작업을 컴파일러가 해준다.
Kotlin 스코프 함수 object itself call chain에 속할 수 있다. / return문에도 속할 수 있다. .also{ } .apply{ } .also{ } lambda value의 값을 지정하는 데에 쓸 수 있다. 그 안에서 chain operation으로 쓸 수 있다. val numbers = mutableListOf("one", "two", "three") val countEndsWithE = numbers.run { add("four") add("five") count { it.endsWith("e") } } apply context object : this return : object itself 리턴이 필요없고 수신 객체 자신을 반환하는 경우 사용한다. ex) 객체 초기화 val adam = Pers..
Kotlin Delegated Property 프로퍼티 필드에 접근하는 로직을 다른 객체에게 맡기는 것. 즉, setter와 getter를 가진 객체를 만드는 것
Kotlin field 뜬금없이 field라는 키워드가 등장해서 뭐지? 했다. 원래 자바에서는,, 필드 = 클래스 내 멤버 변수 프로퍼티(속성) = field + getter + setter 하지만 코틀린에서는,, 필드(멤버 변수) = 프로퍼티 왜냐하면 클래스를 생성하면 getter와 setter가 자동으로 생성되기 때문이다. 즉, field는 프로퍼티의 실제 값을 저장하는 변수를 칭하는 키워드 setter 와 getter 코드이다. 아마 이 부분이 코틀린에서는 자동으로 생성되는 듯 set(value){ field = value } get() = field