Kotlin

    RecyclerView의 notifyItem메서드들의 문제점을 해결해보자! 3탄(ListAdapter)

    드디어 마지막 단계까지 왔습니다. 앞에서 DiffUtil과 AsyncListDiffer에 대해 알아본 것은 ListAdapter을 사용하기 위함이었다고 할 정도로 앞의 내용을 모두 포함하고 있는 주제입니다. 입사 한 직후 안드로이드를 다시 시작해서 처음 들었던 주제를 드디어 다 정리하네요. 만약 AsyncListDiffer를 모르신다면 보고 오시는 거 추천드립니다. 이해하는데 100% 도움을 줍니다. RecyclerView의 notifyItem메서드들의 문제점을 해결해보자! 2탄(AsyncListDiffer) 지난 시간엔 DiffUtil을 이용해서 문제점을 해결했다면 이번 시간엔 AsyncListDiffer을 이용해서 문제를 해결해 보겠습니다. 이번 포스팅을 보고 나면 ListAdapter을 이해하는데..

    RecyclerView의 notifyItem메서드들의 문제점을 해결해보자! 2탄(AsyncListDiffer)

    RecyclerView의 notifyItem메서드들의 문제점을 해결해보자! 2탄(AsyncListDiffer)

    지난 시간엔 DiffUtil을 이용해서 문제점을 해결했다면 이번 시간엔 AsyncListDiffer을 이용해서 문제를 해결해 보겠습니다. 이번 포스팅을 보고 나면 ListAdapter을 이해하는데 훨씬 수월합니다. ListAdapter가 AsyncListDiffer의 래핑 클래스니까요 개념 DiffUtil이 두 리스트의 차이점을 비교할 때 백그라운드 스레드에서 작동하도록 도와주는 도우미라고 볼 수 있습니다. 리사이클러뷰 어댑터에 연결될 수 있고 제출된 리스트 간에 변경사항을 어댑터에게 알립니다. 단순화를 위해 ListAdapter를 사용할 수 있습니다. 래퍼 클래스라 문제없습니다. 전체 과정은 다음과 같습니다. getCurrentList를 사용하여 현재 목록에 액세스 하고 해당 데이터 개체를 표시합니다...

    RecyclerView의 notifyItem메서드들의 문제점을 해결해보자! 1탄(DiffUtil)

    RecyclerView의 notifyItem메서드들의 문제점을 해결해보자! 1탄(DiffUtil)

    RecyclerView RecyclerView란? 1. 정의 안드로이드 공식문서에는 A flexible view for providing a limited window into a large data set.로 소개하고 있습니다. 번역하면 '대규모 데이터셋을 제한된 범위에 제공하기 위한 유연한 뷰' huzit.tistory.com 리사이클러뷰를 사용하다 보면 뷰 홀더에 있는 데이터를 변경해야 할 때가 있습니다. 그럴 때마다 notifyItemChanged()를 이용해서 리사이클러뷰의 리스트를 갱신해 왔습니다. 오늘은 다른 방법으로 리스트를 갱신하는 것과 왜 써야 하는지에 대해 샘플코드로 알아보겠습니다. DiffUtil이 뭔데? DiffUtil is a utility class that calculates..

    SDK location not found

    SDK location not found

    원인 Git에서 프로젝트를 Pull 했는데 SDK 위치를 찾지 못함. 맥 -> 윈도우로 받아서 \, / 차이로 인한 오류라고 판단됩니다. 해결 방법 PC에서 sdk의 위치를 찾아 local.properties 파일에 넣어주면 됩니다. 만약 local.properties가 없다면 만들어주면 됩니다.

    확장(Extensions)

    확장(Extensions)

    정의 코틀린은 클래스 상속이나 데코레이터 같은 설계 패턴 없이, 새로운 기능으로 클래스와 인터페이스를 확장할 수 있는 기능을 제공한다. 이는 확장(extensions)이라는 특수 선언을 통해 이루어진다. 확장의 장점은 수정할 수 없는 타사의 라이브러리 클래스 또는 인터페이스에 대한 새 함수를 작성할 때 빛을 본다. 이렇게 만들어진 함수는 원래 클래스의 메서드 인것 처럼 일반적인 방식으로 호출할 수 있다. 확장 기능을 2가지이다. 확장 함수 : 위에서 설명한 것 처럼 새 함수를 작성하는 메커니즘 확장 속성 : 기존 클래스에 대한 정의한 새 속성 확장 함수 확장 함수를 선언하려면 확장되는 유형을 참조하는 리시버 타입(수신자 유형)을 해당 이름 앞에 붙인다. (리시버 타입 == 확장할 타입(ex 클래스)의 이..

    가시성 수식어(Visibility modifiers)

    가시성 수식어(Visibility modifiers)

    가시성 수식어는 보이는 범위를 명시해주는 수식어이다. 이름만 다를 뿐 자바의 접근제어자와 같다. 클래스, 오브젝트, 인터페이스, 생성자, 함수, 프로퍼티 및 프로퍼티와 setter는 가시성 수식어를 가질 수 있다. 종류 코틀린은 자바와 마찬가지로 4개의 가시성 수식어가 있다. private protected internal public 클래스와 인터페이스를 기준으로 자바와 비교할 수 있다. 패키지 함수(Function), 속성(Property), 클래스(Classes), 객체(Object) 및 인터페이스(Interface)는 패키지 내부의 "최상위 수준"에서 직접 선언할 수 있다. private : private선언이 포함된 파일 안에서만 접근 가능 internal : 같은 모듈에서 접근 가능 publi..

    Functional (Single Abstract Method) Interface

    Functional (Single Abstract Method) Interface

    추상 메서드가 하나만 있는 인터페이스를 함수형 인터페이스(Functional Interface) 또는 단일 추상 메서드(Single Abstract Method) 인터페이스 라고 한다. 함수형(Functional) 인터페이스는 여러 비추상 멤버를 가질 수 있지만 추상 멤버는 하나만 가질 수 있다. 함수형 인터페이스를 선언하려면 fun 한정자를 사용하면 된다. fun interface KRunnable { fun invoke() } SAM 변환 SAM 변환을 쓰면 함수형 인터페이스를 람다 식을 이용하여 코드를 더 간결하고 읽기 쉽게 바꿀 수 있다. 매번 함수형 인터페이스를 상속하는 클래스를 생성하는 것 대신, 람다 식으로 간결하게 줄일 수 있다. SAM변환을 이용하면 코틀린은 시그니처가 인터페이스 단일 메..

    인터페이스

    인터페이스

    코틀린의 인터페이스는 자바 8 인터페이스와 매우 유사하다. 추상 메서드를 선언할 수 있고 또한 메서드 구현을 포함할 수 있다 추상 클래스와 비슷하다고 생각할 수 있지만 선언 시 사용되는 키워드부터 해서 몇 가지 다른 점이 있다. 인터페이스는 상태를 가질 수 없다. 다중 상속이 가능하다 open 키워드를 일일이 붙일 필요 없다. 인터페이스는 interface 키워드를 사용하여 정의할 수 있다. interface MyInterface{ fun bar() fun foo(){ //optional body } } 인터페이스 구현 클래스나 객체는 한 개 이상의 인터페이스를 구현할 수 있다. class Child : MyInterface{ override fun foo(){ // body } } 인터페이스의 속성(P..