본문 바로가기

안드로이드

[안드로이드] ListAdapter ListAdapter에 대해 알아보자. ListAdapter를 간단하게 이해한 바로는 Recyclerview를 사용하면서 데이터를 더 쉽고 효율적으로 관리할 수 있도록 구현된 Adapter이다. ListAdapter를 사용하게 된 배경은 크게 아래와 같다. 기본 RecyclerView.Adapter를 사용하면서 데이터를 변경하고 이를 알리기 위해 notify 함수들을 호출한다 효율적인 사용을 위해 현재 데이터와 새 데이터를 비교해서 필요한 데이터만 바꿔주는 RecyclerView.DiffUtil 클래스를 사용한다 DiffUtil 비교 연산을 background thread에서 실행하기 위해 AsyncListDiffer 클래스를 Adapter 내에 구현한다 AsyncListDiffer의 기능을 wrappi.. 더보기
[코틀린] 코틀린 테스팅 안드로이드 개발하는 kancho입니다. 이번 포스팅에서는 코틀린의 테스팅(Testing)에 대해 알아보고자 합니다. '코틀린 완벽 가이드' 책을 참고하였습니다. 코테스트 1. 명세 코테스트는 여러 명세 스타일을 지원한다. 지금은 코테스트를 프로젝트에 추가하면 바로 사용할 수 있는 명세 스타일을 살펴보자. 테스트 케이스를 정의하려면 명세 클래스 중 하나를 상속해야 한다. 이후 클래스 생성자에 테스트를 추가하거나 상위 클래스 생성자에 전달하는 람다 안에 테스트를 추가해야 한다. StringSpec 클래스 public abstract class StringSpec public constructor( body: io.kotest.core.spec.style.StringSpec.() -> kotlin.Unit ).. 더보기
[코틀린] 자바와 코틀린의 상호 운용성 안드로이드 개발하는 kancho입니다. 이번 포스팅에서는 자바와 코틀린 코드의 상호 운용성에 대해 알아보고자 합니다. '코틀린 완벽 가이드' 책을 참고하였습니다. 코틀린은 JVM을 대상으로 만들어졌기 때문에 자바 코드를 코틀린에서 쉽게 사용할 수 있다. 주로 자바에 없는 코틀린 기능으로 문제가 발생하는데 이를 해결하는 방법들을 알아보자. 자바 코드를 코틀린에서 사용하기 1. 자바 메서드와 필드 자바 메서드를 아무 문제없이 코틀린 함수처럼 노출시킬 수 있다. 각 언어의 내용에 따라 뉘앙스 차이는 있을 수 있다. 자바 언어로 된 Java 클래스 public class Java { private String hello = "Hello"; public String getHello() { return hello;.. 더보기
[코틀린] Annotation 안드로이드 개발하는 kancho입니다. 이번 포스팅에서는 코틀린의 어노테이션(Annotation)에 대해 알아보고자 합니다. '코틀린 완벽 가이드' 책을 참고하였습니다. Annotation(어노테이션) 어노테이션은 코틀린 선언에 메타데이터를 엮어서 활용할 수 있게 해 준다. 커스텀 메타 데이터를 정의하고 코드에서 선언, 식, 파일 등의 요소에 엮는 방법을 제공한다. 3가지 어노테이션 코틀린과 안드로이드에 내장된 annotation (ex. Deprecated) Annotation에 대한 정보를 나타내기 위한 어노테이션인 meta annotation (ex. Target, Retention) 커스텀한 annotation 정의 선언의 앞쪽 변경자 위치에 @이 붙은 어노테이션 이름으로 정의한다. annotat.. 더보기
[코틀린] Data 클래스 안드로이드 개발하는 kancho입니다. 이번 포스팅에서는 코틀린의 Data 클래스에 대해 알아보고자 합니다. '코틀린 완벽 가이드' 책을 참고하였습니다. Data 클래스 주로 데이터를 저장하기 위한 목적으로 사용되며 equals 메서드(동등성 비교), toString 메서드 등의 구현을 자동으로 생성해준다. 구조 분해 선언 (destructuring declaration)을 활용할 수도 있다. 이는 클래스의 프로퍼티를 간단한 한 가지 언어 구성 요소를 사용해 여러 변수에 나눠 넣을 수 있다. 아래 User 클래스를 보면 user1, user2, user3 인스턴스들의 동등성 비교를 하고 있다. user1과 user2는 메모리에서 다른 위치(다른 객체)를 가리키고 있기에 동등하지 않다. user1과 use.. 더보기
[코틀린] 람다와 고차함수 안드로이드 개발하는 kancho입니다. 이번 포스팅에서는 코틀린의 람다(lambda)와 고차 함수(high order function)에 대해 알아보고자 합니다. '코틀린 완벽 가이드' 책을 참고하였습니다. 람다와 고차 함수에 대해 알아보기 전에 먼저 함수형 프로그래밍에 대해 짧게 알아보자. 함수형 프로그래밍은 프로그래밍의 패러다임 중 하나이다. 불변 값을 변환하는 함수의 합성으로 구성할 수 있다는 아이디어를 바탕으로 한다. 즉, 자료처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 패러다임이다. 함수형 프로그래밍에서는 우리가 흔히 말하는 함수를 일급 시민(first class)으로 취급한다. 변수에 값을 set, get 할 수 있고 함수에 값을 전달하거나 함수가 값을 반환할 수 있다.. 더보기
[코틀린] Scope function (영역 함수) 안드로이드 개발하는 kancho입니다. 이번 포스팅에서는 코틀린의 영역 함수(Scope function)에 대해 알아보고자 합니다. '코틀린 완벽 가이드' 책을 참고하였습니다. 코틀린의 표준 라이브러리에는 식을 계산한 값을 임시로 문맥 내부에서 사용할 수 있도록 해주는 함수들이 있다. Scope function(영역 함수) 어떠한 식의 결과값이 들어있는 암시적인 영역을 정의해 코드 작성을 보다 단순하게 만드는 함수이다. 기본적으로 영역 함수는 람다를 간단하게 실행해주는 역할을 한다. 5가지 표준 영역 함수 run, let, with, apply, also run run 함수는 확장 람다를 받는 확장 함수이며 람다의 결과를 돌려준다. 지역 변수의 가시성을 세밀하게 제어할 수 있다. 구조 run 함수의 정의.. 더보기
[코틀린] 확장 (Extension) 안드로이드 개발하는 kancho입니다. 이번 포스팅에서는 코틀린의 확장 기능에 대해 알아보고자 합니다. '코틀린 완벽 가이드' 책을 참고하였습니다. 확장 (Extension) 확장은 말 그대로 기존의 것을 더 넓고 크게 사용한다는 것이다. 코드를 작성하다 보면 기존의 클래스를 확장시켜야 하는 경우가 생긴다. 내가 직접 만든 클래스에서는 쉽게 함수를 추가하거나 커스텀하게 원하는 동작을 추가할 수 있다. 하지만 자바나 코틀린에서 기본적으로 제공되는 라이브러리나 외부 라이브러리 같은 경우에는 이미 정의된 것 외에는 동작을 추가하기가 어렵다. 그래서 코틀린에서는 클래스 밖에서 함수나 프로퍼티를 선언할 수 있도록 확장이라는 기능을 제공한다. 확장을 사용하면 기존 클래스를 변경하지 않고 확장할 수 있어 OCP(개방.. 더보기