사진: Unsplash의Elisa Photography 현재 프로젝트를 진행하면서 함수 참조를 사용해야 할까??라는 궁금증이 생겼습니다. 리플렉션은 최대한 사용을 지양해야 한다는 생각을 가지고 있었는데, 참고하고 있는 다른 Github에서 함수를 함수 참조로 사용하는 것을 보고, 내가 가지고 있던 생각이 잘못되었고 생각했습니다. 그래서 이번 게시글에서 코틀린의 리플렉션에 대해 자세히 알아보고, 함수 참조와 무엇이 다른가에 대해 알아보려고 합니다. 참고: 이 게시글에서는 각각에 대한 사용법을 다루고 있지는 않습니다. 리플렉션(Reflection)이란? 리플렉션은 프로그램이 런타임에서 자체 소스 코드를 내부 검사해, 클래스의 정보를 조작할 수 있도록 하는 기능입니다. 리플렉션에 대해 이해하기 위해서는 JVM..
State란? State는 객체 지향 관점에서 자주 사용되는 단어로 객체가 특정 시점에서 어떤 데이터 값을 가지고 있는지 나타내는 것으로, 객체의 특성이나 속성을 나타냅니다. 안드로이드의 UI 레이어 가이드에서는 UI 레이어의 UI State를 생성하고 관리하는 수단으로 단방향 데이터 흐름(UDF)을 설명합니다. 이러한 State는 UI와 관련된 데이터를 저장하고 관리하는데 사용되는 상태 홀더인 ViewModel을 통해 관리됩니다. 상태 홀더인 ViewModel은 앱이 상태를 읽을 수 있도록 상태를 저장합니다. 로직이 필요한 경우 필요한 로직을 호스팅하는 데이터 소스에 대한 액세스 권한을 제공합니다. LiveData 이러한 State 데이터를 다루기 위해 안드로이드에서는 LiveData를 사용했습니다. ..
사진: Unsplash의Solen Feyissa 시퀀스(Sequences)와 Flow 시퀀스는 Iterable과 동일한 기능을 제공하지만 다른 접근 방식을 구현합니다. 바로 가능한 한 지연 실행(Lazy Evaluation) 한다는 것입니다. 시퀀스를 사용하면 실제 계산은 전체 처리 체인의 결과가 요청될 때만 발생합니다. 시퀀스는 각 요소에 대해 모든 처리 단계를 하나씩 순차적으로 수행합니다. 따라서 시퀀스를 사용하면 중간 단계의 결과를 만들지 않고 전체 컬렉션 처리 체인의 성능을 향상시킬 수 있습니다. 시퀀스와 중단 함수 아래와 같은 예시를 보겠습니다. fun simple(): Sequence = sequence { // sequence builder for (i in 1..3) { Thread.sle..
이 게시글의 내용은 아래의 유튜브를 보고 작성한 내용입니다. 유튜브의 22분부터 마지막까지의 내용을 다루고 있습니다. 코루틴의 Context? 코루틴의 Context에 말해보기에 앞서 Context에 대해 다시한번 말해보자면 안드로이드 애플리케이션의 실행 환경에 대한 전역 정보를 제공하는 클래스라고 할 수 있습니다. 그럼 코루틴의 Context은 바로 코루틴 환경에 대한 전역 정보를 제공하고 있다는 것을 우리는 알 수 있습니다. 코루틴에 Context가 생긴 이유 사실 초기의 코루틴에서는 Context가 없었습니다. 그런데 문제가 생겼습니다. 바로 코루틴이 실행될 Thread에 관련된 사항입니다. 작가 starline 출처 Freepik ❓ 질문을 하나 해보겠습니다. 아래와 같은 Continuation이..
이 게시글의 내용은 아래의 유튜브를 보고 작성한 내용입니다. 무언가를 잘 사용하려면 그 내부를 들여다 보는 것이 중요하다고 생각합니다. 코루틴은 안드로이드 코틀린 개발자라면 사용해야 하는 비동기 프로그래밍 을 지원하는 방식입니다. 그래서 이번 게시글에서 코루틴이 어떻게 비동기 프로그래밍을 지원하는지 알아보고자 합니다. 이제부터 간단한 함수를 가지고 놀아보겠습니다. 이 함수를 [Direct Style] 이라 하겠습니다. fun postItem(item: Item) { val token = requestToken() val post = createPost(token, item) processPost(post) } 위의 함수에선 requestToken() 함수로 token을 요청하고 이를 계속해서 사용해 다른..
Kotlin은 코드의 생산성과 가독성을 향상시키기 위해 설계된 정적 타입 언어입니다. 이 언어는 개발 프로세스를 단순화하는 여러 기능을 제공하며, 그 중에서도 sealed class와 enum class가 있습니다. 이 두 종류의 클래스는 서로 다른 목적을 가지며 다른 시나리오에서 사용될 수 있습니다. 이 글에서는 Kotlin에서 sealed class와 enum class의 차이점 및 코드의 디자인과 구현을 개선하는 데 어떻게 활용할 수 있는지 탐색해보겠습니다. sealed class와 enum class의 차이 아래는 발생할 수 있는 HTTP 오류를 sealed class와 enum class로 표현한 코드입니다. 두 개의 클래스 모두 2개의 HTTP 오류를 가지고 있으며 `code` 프로퍼티를 통해..
📚 범위 지정 함수란? Kotlin의 표준 라이브러리에는 개체의 컨텍스트 내에서 코드 블록을 실행하는 것이 목적인 여러 범위 지정 함수들이 있다. 람다 식이 있는 개체에서 이러한 함수를 호출하면 임시 범위가 형성되고 이런 범위에서는 이름 없이 객체에 액세스할 수 있다. 이러한 범위 함수의 종류로는 let, run, with, apply, also의 다섯 가지가 있다. 기본적으로 범위 함수들은 동일한 목적을 가지고 작업을 수행한다. 다른 점은 이 개체가 블록 내에서 사용 가능하게 되는 방식이 전체 표현식의 결과이다. 이런 이유로 하나의 범위 함수를 고르는 것은 힘든 일이다. 이제부터 범위 기능과 해당 규칙의 차이점에 대한 자세한 설명을 제공하겠다. 범위 함수 요약 위의 테이블은 범위 함수의 차이점들을 나타..
제네릭이란? 제네릭은 클래스, 인터페이스, 메서드에서 사용될 수 있으며, 타입 매개변수를 통해 일반적인 데이터 타입 대신 실제 타입을 지정할 수 있다. 이를 통해 코드를 보다 일반화할 수 있고, 재사용성을 높일 수 있다. T 일반적으로 사용되는 타입 매개변수 E 요소(Element)의 타입을 나타내는 매개변수. 주로 컬렉션(Collection)에서 사용 K 맵(Map)에서 키(Key)의 타입을 나타내는 매개변수 V 맵(Map)에서 값(Value)의 타입을 나타내는 매개변수 N 숫자(Number) 타입을 나타내는 매개변수 R 반환(Return) 타입을 나타내는 매개변수입 S, U, V 등 여러 개의 타입 매개변수가 필요한 경우, 추가적으로 사용될 수 있는 일반적인 알파벳 제네릭을 사용하지 않았을 경우 우리..