분류 전체보기
-
MediaSessionService - Foreground 음악 재생Android 2024. 5. 23. 23:47
오픈소스인 compose-sample의 Jetcaster는 Android, Wear, TV 등의 다중 플랫폼에 Compose로 음악 플레이어 UI를 구현하는 방법을 제공하고 있는 프로젝트입니다. 현재는 음악 플레이어에 대한 UI만 구현되어 있고, 기능이 구현되어 있지 않아서 이를 구현하여 기여하고 싶었습니다. 이후 여러 플랫폼에서 플레이어를 제어할 수 있는 MediaSession을 구현하기로 결정했습니다. 구조기능 구현에 앞서, Jetcaster는 다중 플랫폼을 지원하기에 프로젝트가 Multi-module 환경으로 되어있습니다.이로 인해 먼저 아래와 같은 구조로 설계를 진행하였습니다.Media Module백그라운드 재생을 설정하려면 별도의 Service 내에 Player와 MediaSession을 ..
-
Compose와 Hilt 의존성 주입Android 2024. 5. 8. 19:37
이 글을 아래 포스팅을 기반으로 필요한 내용만 골라서 작성하였습니다. 자세한 내용은 아래 포스팅을 참고해주세요. Dependency Injection in ComposeLearn how Hilt provides and scopes dependencies in a traditional Android app and Compose changes our approach.medium.com Composable은 클래스가 아닌 간단한 함수로 구성되어 있어, 클래스 기반 의존성 주입 패턴을 사용할 수 없습니다. Composable은 인스턴스화되지 않고 상태를 저장하지 않으며(Stateless), 주로 재사용 가능한 UI 로직을 제공합니다. 그러므로 Composable은 생성자 주입이나 멤버 주입을 사용할 수 없고, ..
-
Compose - Strong skipping modeAndroid 2024. 4. 26. 20:28
이 글은 아래 포스팅을 기반으로 필요한 내용만 골라 작성하였습니다. 자세한 내용은 아래 포스팅을 참고해 주세요. Jetpack Compose: Strong Skipping Mode ExplainedStrong skipping mode changes the rules for what composables can skip recomposition and should greatly reduce recomposition.medium.com ‘Strong skipping mode’는 ‘Compose Compiler 1.5.4’ 이상에서 실험적으로 추가된 기능 중 하나이며, Composable이 ReComposition을 건너뛸 수 있는 조건을 변경함으로써 unstable 파라미터를 가진 Composable의 Re..
-
[ Effective Kotlin ] Chapter 6 - Class design카테고리 없음 2024. 3. 14. 19:27
Item 36 : Prefer composition over inheritance 상속은 객체의 계층 구조가 'is-a' 관계를 갖도록 설계되었다. 단순히 코드를 재사용하기 위해 상속을 사용하는 경우에는 적절하지 않으며, 더 가벼운 방법인 'Composition'을 사용하는 것이 좋다. Simple behavior reuse 예를 들어, 프로그래스바 표시와 숨김을 처리하는 비슷한 로직이 있는 두 클래스가 있고, 이를 상속을 통해 공통된 로직을 추출하면 다음과 같을 것이다. abstract class LoaderWithProgress { fun load() { // show progress innerLoad() // hide progress } abstract fun innerLoad() } class P..
-
Effective Kotlin Chapter 5 - Object creationKotlin 2024. 3. 7. 21:12
Item 33 : Consider factory functions instead of constructors일반적으로 Kotlin에서 클라이언트에게 클래스 인스턴스를 제공하는 방법은 'primary constructor'를 제공하는 것이다.class MyLinkedList(val head: T, val tail: MyLinkedList?)val list = MyLinkedList(1, MyLinkedList(2, null)) 이 외에도 객체를 인스턴스화시키는 다양한 'creational 패턴'이 존재하며, 이런 패턴 대부분은 객체 생성을 함수가 대신하는 아이디어를 중심으로 돌아간다.fun myLinkedListOf(vararg element: T): MyLinkedList? { if (elemen..
-
[ Effective Kotlin ] Chapter 4 : Abstraction DesignKotlin 2024. 2. 29. 23:17
추상화는 프로그래밍 세계에서 매우 중요한 개념이며, OOP에서 추상화가 캡슐화와 상속과 함께 3대 핵심 개념 중 하나로 여겨진다. 함수형 프로그래밍에서는 프로그래밍 작업 전체를 추상화와 구성으로 보는 관점이 일반적이다. 추상화는 일반화 과정이나 결과로써, 특성을 제거하거나 아이디어를 객체로부터 멀어지게 하는 것이다. 즉, 추상화는 복잡성을 숨기는 단순화의 한 형태로, 프로그래밍에서 기본적인 예로 인터페이스를 들 수 있다. 인터페이스는 클래스의 일부 특성만을 나타내기에 클래스의 추상화로 볼 수 있다. 구체적으로는 메서드와 프로퍼티의 집합을 의미한다.Item 26 : Each function should be written in terms of a single level of abstraction잘 분리된 ..
-
Android Compose - Composable Component API GuidelineAndroid 2024. 2. 29. 20:40
다음의 글을 안드로이드 개발자 입장에서 생각하면서 번역했습니다. 본문과 다를 수 있습니다. API Guidelines for components in Jetpack ComposeAPI Guidelines for @Composable components in Jetpack Compose Last updated: July 19, 2023 Set of guidelines and recommendations for building scalable and user-friendly @Composable components. The requirement level of each of these guidelines is specified usandroid.googlesource.comBefore you create a..
-
Android Compose - API GuideLineAndroid 2024. 2. 28. 22:34
다음의 글을 안드로이드 개발자 입장에서 생각하면서 번역했습니다. 본문과 다를 수 있습니다. API Guidelines for Jetpack ComposeAPI Guidelines for Jetpack Compose Last updated: March 10, 2021 Who this document is for The Compose API guidelines outline the patterns, best practices and prescriptive style guidelines for writing idiomatic Jetpack Compose APIs. As Jetpack Compose code iandroid.googlesource.comKotlin StyleBaseline style guidel..