분류 전체보기 (271) 썸네일형 리스트형 [Kotlin] 코틀린 공식 문서 - Cancellation and Timeout 개요 해당 게시글은 Cancellation and timeouts | Kotlin (kotlinlang.org)을 번역한 게시글입니다. Cancelling coroutines execution 오랫동안 실행되는 앱에서는 백그라운드 코루틴에 대한 미세한 제어가 필요할 수도 있다. 예를 들어, 사용자가 코루틴이 실행된 페이지를 닫아서 더 이상 필요하지 않아 해당 작업을 취소할 수도 있다. launch 함수는 Job 객체를 반환하며 이를 통해 실행중인 코루틴을 취소시킬 수 있다. fun main() = runBlocking { val job = launch { repeat(1000) { i -> println("job: I'm sleeping $i ...") delay(500L) } } delay(1300L).. [Android] SingleLiveEvent + 기타: setValue() vs postValue() SingleLiveEvent SingleLiveEvent는 한 번에 하나의 관찰자만 관찰하는 MutableLiveData의 하위 클래스로 뷰의 생명주기를 인식한다. 이를 사용하는 이유는 액티비티의 화면 회전과 같은 변화(Configuration Change)가 발생하여 onStart/onResume이 다시 호출되는 일이 발생하면 LiveData를 여러번 구독하게 되는 문제점을 보완하기 위해 SingleLiveEvent를 활용한다. SingleLiveEvent는 코드 내부에서 하나의 observer만 구독 가능하게 구현된다. 만약, 여러개의 observer가 구독할 경우 어느 곳에서 실행될 지 알 수 없다. (MainActivity에서 특정 SingleLiveEvent를 관찰하고 SubActivity에서도.. [Kotlin] 코틀린 공식 문서 - Coroutines basics 개요 해당 게시글은 Coroutines basics | Kotlin (kotlinlang.org)을 번역한 게시글입니다. Your first Coroutine 코루틴은 일시 중단 가능한 연산(suspendable computation)의 객체이다. 이는 다른 코드와 동시에 작동되는 코드 블록이 실행된다는 점에서 개념적으로 스레드와 유사하다. 그러나 코루틴은 특정 스레드에 바인딩되지 않는다. 한 스레드에서 실행을 일시 중지하고 다른 스레드에서 다시 시작할 수도 있다. 코루티는 경량 스레드로 생각될 수 있지만 스레드와 매우 다른 몇 가지 차이점이 있다. 아래는 첫번째 코루틴 코드이다. fun main() = runBlocking { // this: CoroutineScope launch { // launch.. [Kotlin] 코틀린 공식 문서 - Coroutines Guide, Asynchronous programming Techniques 개요 해당 포스트는 Coroutines guide | Kotlin (kotlinlang.org)를 번역한 게시글 입니다. Coroutines Guide 언어로서 코틀린은 표준 라이브러리에서 최소한의 저수준 API를 제공하여 여러 다른 라이브러리가 코루틴을 활용할 수 있도록 한다. 유사한 기능을 가진 다른 언어들과 달리 async/await은 Kotlin 만을 위한 키워드가 아니며 표준 라이브러리의 일부도 아니다. 또한, 코틀린의 suspending function이라는 개념은 futures/promises보다 비동기 작업에 대해 더 안전하고 오류 가능성이 적은 쉬운 추상화를 제공한다. Asynchronous programming Techniques 여러 해 동안 개발자들은 blocking으로 부터 앱을 .. [도메인] OAuth의 개념과 OAuth 2.0? OAuth 네이버, 카카오, 페이스북 로그인을 통해 사용자에게 회원가입을 대체할 수 있는 편리한 서비스를 제공한다. 이 과정에서 어떻게 기존 사이트의 회원 정보를 안전하게 사용할 수 있는 지에 대한 표준 프로토콜이 OAuth이다. OAuth를 활용하면 사용자가 네이버, 카카오 등의 아이디/비밀번호 같은 세부 사항을 작성하지 않아도 서비스의 사용자 정보를 새로운 서비스에서 안전하게 사용할 수 있다. 이 과정을 실 생활에 빗대은 예시이다. 외부 손님 B가 회사에 근무하는 A를 만나러 왔다. 회사는 A에게 B의 방문 사실을 알린다. A는 B가 문제 없고 정상적인 목적으로 왔다고 회사에 알린다.=> 인증 A는 B의 방문 목적, 인적 사항 등을 기록한다. 회사는 B에게 방문증을 발급한다. => 허가 A와 B는 정.. [Android] AAC의 Paging을 사용하지 않고 Paging 처리 하기 개요 안드로이드에서 페이징 처리를 하기 위해선 AAC의 Paging 라이브러리를 활용하여 처리한다. 과거에는 이런 라이브러리가 존재하지 않았는데 이런게 없었다면 어떻게 처리해야 할까? 요약 리사이클러뷰에 ScrollListener를 부착하여 스크롤을 감지하고 스크롤이 끝에 도착하여 더 이상 움직일 수 없는지 확인하고 싶다면 canScrollVertically 메서드를 사용하면 된다. 추가로 더 정확성을 높히기 위해서 RecyclerView에 부착된 레이아웃 매니저에서 findLastCompletlyVisibleItemPosition() 메서드를 활용하여 마지막에 보이고 있는 아이템의 포지션을 갖고 온 뒤, 지금까지 노출 된 총 아이템 수와 같은지 비교하면 더 정확하다. 구현 예시 recyclerView... [Android] Dagger 관련 스택 오버 플로우 질의 번역 - subcomponent with contibutor 개요 해당 게시글은 스택 오버 플로우의 게시글을 번역한 게시글입니다. 질문 내용 현재 @ContributesAndroidInjector를 통해 fragment를 주입하는데 문제가 있다. 모듈 내에서 계층 구조를 만드려고 하는 상황이며, 현재 존재하는 것은 Core App Feature 현재 AppComponent는 CoreComponent에 의존성을 가집니다. @Singleton @Component(modules = [CoreModule::class]) interface CoreComponent { fun getApp(): Application @Component.Factory interface Factory { fun create(@BindsInstance app: Application): CoreCo.. [Android] Dagger2 주요 개념 총 정리 개요 Dagger2에서 사용하는 주요 annotation을 총 정리하는 포스트이다. @Inject 대거가 해당 타입을 어떻게 생성하는지 알 수 있게 한다. 특정 클래스 내부에서 해당 객체를 주입한다. class Repository @Inject constructor(val userManager: UserManager) { ... } class MainActivity : AppCompatActivity(){ @Inject lateinit var repository: Repository } @Component Component는 인터페이스로 대거가 컴파일 타임에 그래프를 생성하는데 필요한 정보를 제공한다. Component의 메소드의 종류는 두 가지이다. Provision Method: 매개변수가 없고, 모.. 이전 1 ··· 5 6 7 8 9 10 11 ··· 34 다음