전체 글 411

RecyclerView 데이터바인딩 + ItemTouchHelper시 데이터 중복문제

문제 : 작업은 ViewHolder에 데이터 바인딩이 적용 되어있다. 결론은 맨 밑에 있습니다! (삽질 공유) RecyclerView에 ItemTouchHelper를 달아서 리스트 순서를 변경 하는 작업이 있다. 리스트 순서 변경시 스크롤이 빠르게 이동될 때 TextView의 Title이 중복 되어 보여졌다. 우선, ItemTouchHelper쪽에 로그를 다 찍어보았다. (봐도 잘 모르겠음..) ViewHolder쪽에 bind호출 부분 title을 로그 찍어보았지만 제대로 나오는것 같다. 고민하다가 데이터 바인딩 되어있는 부분을 ViewHolder소스에 textView.setText(title) 해보니 데이터 중복이 되지 않았다. 고민 : 그렇다면 소스에 setTextView하는 것과 데이터 바인딩 으로..

안드로이드 2022.02.23

android-string-reference plug-in

멀티 PRODUCT 를 제공 하기 위해 리소스 (앱 이름, etc..) 분리를 위해 방법을 검토한 것중, android-string-reference plug-in 을 적용한 내용입니다. strings-template_ref.xml 추가 IED 에서는 template_ 가 없는 (빌드시 생성될 ID) 를 참조 하기 때문에, 대상 ID 가 없다는 오류가 노출 됩니다. 단점으로, template_ 의 리소스를 생성할때, strings_template_ref.xml 에 참초 하는 ID 를 추가 해야 하는 번거로움이 있다고 합니다. 현재는 라이브러리 버전이 업데이트가 되어 리소스에 파라미터만 쓰면 된다고 함! 이 자료는 제가 정리한게 아니고 같이 일하는 팀원이 정리해주어 나중에 유용하게 쓰일것 같아 옮겨 적었습..

Observable, Single 비교

리뷰 내용 : 지금 onNext 이후에 onComplete를 호출해주고 있지 않은데요 끝날 때 onComplete를 호출해주시거나 어차피 onNext와 onComplete를 한번씩만 호출해 줄 것이라면 Observable 대신 Single을 사용해보면 어떨까요? 참고로 Observable의 하위 구현체들은 아래와 같습니다. Single : 데이터를 한개만 방출 Maybe : 데이터를 0개 또는 1개만 방출 Completable : 데이터 없이 성공 실패만 방출 Subject : Observer 이면서 Observable Flowable : 배압(Backpressure) 조절 가능한 Observable

코딩/코드리뷰 2022.01.27

Observable subscribeOn, observeOn 스레드

리뷰 내용 : subscribeOn과 observeOn을 모두 메인스레드에 하고 있는데 둘 다 메인스레드로 설정할 필요는 없어 보입니다. 제 생각에는 sendPhotoObservable와 sendSignObservable를 병렬로 처리할 수 있도록 subscribeOn은 IO스레드나 새로운 스레드(Schedulers.newThread())에서 하고 observeOn을 지금처럼 메인스레드에서 처리하여 zip한 결과를 UI 스레드에서 처리하는게 좋지 않을까 싶네요

코딩/코드리뷰 2022.01.27

lateinit 초기화 확인하기

실제 값을 사용할 때 lateinit을 한번 체크해줌으로써 안전하게 접근할 수 있다. ::을 통해서만 접근이 가능한 .isInitialized을 사용하여 체크할 수 있다. // 부르는 시점 초기화 sampleAdapter = SampleAdapter(ImageLoaderAdapterViewModel(this@SampleMainActivity, 3)) if (::sampleAdapter.isInitialized) { sampleAdapter.addItem() sampleAdapter.notifyDataSetChanged() } } 참조 : https://thdev.tech/kotlin/2018/03/25/Kotlin-lateinit-lazy/

코틀린 & Java 2022.01.11

LiveData와 StateFlow의 차이

LiveData에는 Post 및 Set의 2가지 방출 기능이 있습니다. 기사 중 하나에 따르면 LiveData의 단점은 두 가지 값 방출 기능, 즉 setValue 및 postValue가 있다는 것입니다. setValue — 메인 스레드에서만 사용할 수 있습니다. 그렇지 않으면 충돌합니다. postValue — 모든 스레드에서 사용할 수 있습니다. 그러나 메인 스레드가 사용 중이면 값이 떨어지고(잃어버린) 가장 최근에 게시된 값만 사용됩니다. StateFlow에는 1개의 방출 기능만 있습니다. 세트도 포스트도 없습니다. 설정할 stateFlow.value일 뿐입니다. 따라서 배경인지 전경인지(메인 스레드) 걱정할 필요가 없습니다. 주 스레드가 사용 중일 때 stateFlow가 어떻게 동작하는지 궁금합니다..

코틀린 & Java 2021.12.27

코틀린 코딩컨벤션 정리

클래스 레이아웃 일반적으로 클래스의 내용은 다음의 순서로 정렬된다. 1. Property declartions and initializer block 2. Secondary constructors 3. Method declarations 4. Companion object 관련된 것들을 한데 모아 클래스를 읽는 사람이 위에서 아래로 무슨 일이 일어나고 있는지 로직을 따라갈 수 있도록 해라. 중첩 클래스들이 외부에서 사용되도록 의도되었고 클래스 내부에서 참조되지 않는다면 companion object 다음의 마지막에 위치시켜라. 콜론 아래와 같은 경우에 콜론 앞에 공백을 넣어라 - 타입과 슈퍼 타입을 분리할 때 - 동일한 클래스의 다른 생성자 또는 슈퍼 클래스의 생성자에게 위임할 때 - object 키워드..

코틀린 & Java 2021.12.13