본문 바로가기

전체 글

[안드로이드] 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;.. 더보기
[코틀린] DSL (도메인 특화 언어) 안드로이드 개발하는 kancho입니다. 이번 포스팅에서는 코틀린의 DSL(도메인 특화 언어)에 대해 알아보고자 합니다. '코틀린 완벽 가이드' 책을 참고하였습니다. DSL (도메인 특화 언어) 특정 기능이나 영역을 위해 만들어진 언어를 말하며 코틀린으로 도메인 특화 언어와 비슷한 특별한 API를 설계하는 것이다. 단순성이 주된 장점이다. 연산자 오버로딩 코틀린 내장 연산자(+, -, *, / 등등)에 대해 새로운 의미를 부여할 수 있는 언어 차원의 기능이다. 연산자를 구현할 때 관습에 따라 operator 키워드와 함께 확장 함수나 멤버 함수를 정의하면 된다. // times라는 이름의 관습을 통해 정의 operator fun String.times(n: Int) = repeat(n) // 2개의 식은 .. 더보기
[코틀린] Annotation 안드로이드 개발하는 kancho입니다. 이번 포스팅에서는 코틀린의 어노테이션(Annotation)에 대해 알아보고자 합니다. '코틀린 완벽 가이드' 책을 참고하였습니다. Annotation(어노테이션) 어노테이션은 코틀린 선언에 메타데이터를 엮어서 활용할 수 있게 해 준다. 커스텀 메타 데이터를 정의하고 코드에서 선언, 식, 파일 등의 요소에 엮는 방법을 제공한다. 3가지 어노테이션 코틀린과 안드로이드에 내장된 annotation (ex. Deprecated) Annotation에 대한 정보를 나타내기 위한 어노테이션인 meta annotation (ex. Target, Retention) 커스텀한 annotation 정의 선언의 앞쪽 변경자 위치에 @이 붙은 어노테이션 이름으로 정의한다. annotat.. 더보기
[코틀린] 제네릭 안드로이드 개발하는 kancho입니다. 이번 포스팅에서는 코틀린의 제네릭(Generics)에 대해 알아보고자 합니다. '코틀린 완벽 가이드' 책을 참고하였습니다. 제네릭(Generics) 코틀린 타입 시스템이 제공하는 기능이다. 알지 못하는 타입의 데이터를 조작하는 코드를 작성할 수 있게 해 준다. 타입 안정성을 높이면서 다양한 타입에서 코드를 작성할 수 있다. 선언 하나 이상의 타입 파라미터가 요구된다. 타입 파라미터는 선언 내부에서 일반적인 타입 대신 사용할 수 있다. 사용할 때는 실제 타입을 지정해 타입 파라미터를 대신해야 한다. // HashMap. K 타입의 key, V 타입의 value public actual typealias HashMap = java.util.HashMap // Array.. 더보기
[코틀린] 상속(Inheritance) 안드로이드 개발하는 kancho입니다. 이번 포스팅에서는 코틀린의 상속(Inheritance)에 대해 알아보고자 합니다. '코틀린 완벽 가이드' 책을 참고하였습니다. 상속 is-a 관계를 표현하기 위한 개념이다. 상위 클래스로부터 하위 클래스가 무엇인가를 물려받는 것이라고 생각할 수 있다. subclass는 superclass에 정의된 멤버와 확장을 얻게 된다. 코틀린 클래스는 단일 상속만 가능하다. 즉 클래스의 상위 클래스가 최대 하나라는 것이다. 상위 클래스를 명시하지 않으면 자동으로 Any를 상속하는 것으로 가정한다. 모든 클래스는 class hierarchy (클래스 계층)을 구성한다. 상속은 콜론(:)으로 표시한다. /* * open 변경자 : 상속 가능한 것을 의미. 해당 클래스를 상위 클래스.. 더보기
[코틀린] Inline 클래스 안드로이드 개발하는 kancho입니다. 이번 포스팅에서는 코틀린의 Inline(인라인) 클래스에 대해 알아보고자 합니다. '코틀린 완벽 가이드' 책을 참고하였습니다. 코드를 작성하다 보면 Wrapper(래퍼) 클래스를 만드는 일이 생길 수 있다. Wrapper 클래스는 런타임 부가 비용이 발생한다. 코틀린에서는 이러한 부가 비용을 줄이기 위해 Inline 클래스를 사용할 수 있다. Inline 클래스(값 클래스) 원시 타입의 값과 마찬가지로 부가 비용 없이 쓸 수 있기 때문에 value class(값 클래스)라고도 한다. 클래스 이름 앞에 value class를 붙여서 정의한다. 코틀린 1.3에서는 inline 키워드를 사용했지만 자바에 값 클래스가 생겨 코틀린 1.5에서 value로 키워드가 변경되었다.. 더보기