Develop 81

Jetpack Compose 환경에서 ExoPlayer 최적화

Jetpack Compose로 동영상 UI를 만들기 시작했을 때는 단순히 화면에 영상만 잘 나오면 된다고 생각했다. 그러나 구현을 조금씩 구체화할수록, 예상하지 못했던 문제들이 하나둘씩 고개를 들기 시작했다.특히 요즘 유행하는 세로형 숏폼 콘텐츠 앱을 만들다 보면 이 어려움을 누구나 실감할 것이다. 사용자는 화면을 끊김 없이 스크롤하고 싶어 하고, 개발자는 각 화면마다 ExoPlayer를 안정적으로 관리해야 한다. 동시에 메모리 누수 없이 플레이어를 재활용하는 과제까지 따라붙는다.결국 세 가지 조건이 충돌한다.스크롤은 매끄러워야 하고, 영상은 자연스럽게 재생돼야 하며, 앱은 절대 크래시가 나면 안 된다. 문제는 이 세 가지가 서로 얽혀 있다는 점이다. 하나를 잡으면 다른 하나가 삐걱거리는 식으로 개발자를..

Develop/Kotlin 2025.08.15

안드로이드에서 일회성 이벤트 처리, 어떻게 할 것인가?

안드로이드 개발을 하다 보면, UI에서 단 한 번만 실행되어야 하는 이벤트를 처리해야 하는 상황이 종종 발생한다.예를 들어, 사용자에게 Toast 메시지를 한 번만 띄우거나, 특정 조건이 충족되었을 때 화면 이동을 한 번만 수행해야 하는 경우가 그렇다.하지만 안드로이드의 생명주기(Lifecycle) 특성과 ViewModel, LiveData의 동작 방식 때문에, 이 단순해 보이는 요구조차 쉽게 구현하기 어렵다.이번 글에서는 안드로이드에서 일회성 이벤트를 처리하는 다양한 방법을 살펴보고, 각각의 장단점을 정리하려고 한다.또한 어떤 상황에서 어떤 방법이 적절한지 함께 고민해보자.1. LiveData일반적으로 LiveData는 데이터가 변경될 때, 활성화된 옵저버에게만 업데이트를 전달한다.하지만 옵저버가 비활..

Develop/Kotlin 2024.10.27

너는 왜 inline Composable이야?

개요Compose를 사용하다 보면, 어떤 Composable은 일반 함수로, 또 어떤 Composable은 inline 함수로 정의된 것을 확인할 수 있다.예를 들어 Box 컴포저블도 다음과 같이 두 가지 형태로 제공된다.@Composablefun Box(modifier: Modifier) { Layout(measurePolicy = EmptyBoxMeasurePolicy, modifier = modifier)}@Composableinline fun Box( modifier: Modifier = Modifier, contentAlignment: Alignment = Alignment.TopStart, propagateMinConstraints: Boolean = false, c..

Develop/Kotlin 2024.10.22

Data Binding 프로퍼티 실종 사건 수사 일지

사건의 발단 🕵️백그라운드 스레드에서 Room DB를 통해 Reservation(예약 정보)이라는 데이터를 받아오고, 해당 데이터를 UI에 렌더링하기 위해 데이터 바인딩을 사용했다. 이 과정에서 BindingAdapter를 활용하여 UI를 업데이트했다.그러나 10번에 3번 꼴로 데이터 바인딩 프로퍼티가 null인 경우가 발생하여 앱이 크래시되는 문제가 있었다. 이러한 문제는 바인딩 프로퍼티가 누락되어 발생한 것으로 보인다. (아마 7번은 운 좋게 데이터 바인딩이 성공된 것으로 보인다)코드는 다음과 같다.// presenter 코드override fun loadReservation(id: Long) { thread { reservationRepository.findReservation(..

Develop/Kotlin 2024.05.12

얼렁뚱땅 Kotlin inline 탐험일지 🧐

탐험 개요고차함수를 활용하기 위해 컬렉션 함수 내부 코드를 보던 중 inline을 발견!inline이 뭐지 코드 줄을 안으로 뭐 하는건가???.. 일단 코틀린에서 제공하는 고차함수 API에서 쓰이는 것으로 확인되니 장점이 있겠지??그래서 inline이 뭔데?코틀린 공식문서를 보면 다음과 같이 설명한다."고차함수를 사용하면, 부가적인 메모리 할당으로 인해 메모리 효율이 안 좋아지고, 함수 호출로 인한 런타임 오버헤드가 발생하게된다. 그러나 람다식을 inline으로 처리하면 이러한 종류의 오버헤드를 제거할 수 있다."런타임 오버헤드가 뭔데?런타임 오버헤드는 프로그램이 실행되는 동안 추가적으로 발생하는 비용이나 부담을 의미한다. 이는 프로그램이 실행되는 동안 발생하는 여러 가지 작업들에 대한 처리 시간이나 자..

Develop/Kotlin 2024.04.06

[kotlin] 코틀린 기본 문법

💡 코틀린이란? 코틀린은 intellj, pycharm 등 IDE 툴을 만든 젯브레인(jetbrains)에서 개발한 언어이다. 2011년에 발표되었고, 코틀린섬 이름으로부터 지어졌다. Google I/O 2017에서 안드로이드의 공식 언어로 채택되다. 더 자세한 내용은 다음 링크를 통해 알아보자. [kotlin] 코틀린이란 무엇인가? 💡 코틀린이란? 코틀린은 intellj, pycharm 등 IDE 툴을 만든 젯 브레인(jetbrains)에서 개발한 언어이다. 2011년에 발표되었고, 코틀린섬 이름으로부터 지어졌다. Google I/O 2017에서 안드로이드의 공식 언 fre2-dom.tistory.com 그럼 이번에는 코틀린의 기본적인 문법에 대해서 알아보자. 💡 기본 문법1 : val, var // ..

Develop/Kotlin 2022.12.06

[kotlin] 객체 지향 프로그래밍

💡 객체 지향 프로그래밍이란? 객체 지향 프로그래밍은 컴퓨터 프로그래밍의 패러다임중 하나로, 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고, 그 객체들 간의 유기적인 상호작용을 통해서 로직을 구성하는 프로그래밍 밥법이다. 위의 그림에서 보면 알 수 있듯이 절차지향은 프로그램 순서와 흐름이 중점이 되고, 객체지향은 객체가 중점이 된다. 즉, 절차지향 프로그래밍은 프로그램의 순서와 흐름을 먼저 세우고 필요한 자료구조와 함수들을 설계하는 방식이라면, 객체지향 프로그래밍은 자료구조와 이를 중심으로 한 모듈들을 먼저 설계한 다음에 이들의 실행 순서와 흐름을 짜는 방식인 것이다. 💡 객체 지향 프로그래밍의 장단점 장점 코드 재사용이 용이하다 ← 남이 만든 클래스를 가져와서 이용할 수 있..

Develop/Kotlin 2022.12.05

[kotlin] 코틀린이란 무엇인가?

💡 코틀린이란? 코틀린은 intellj, pycharm 등 IDE 툴을 만든 젯 브레인(jetbrains)에서 개발한 언어이다. 2011년에 발표되었고, 코틀린섬 이름으로부터 지어졌다. Google I/O 2017에서 안드로이드의 공식 언어로 채택되었다. 코틀린으로는 다음과 같은 것을 할 수 있다. Kotlin/JVM : 자바 가상 머신 상에서 동작하는 앱 Kotlin/JS : 자바 스크립트에 의해 DB부터 서버, 클라이언트까지 다루는 풀스택 웹 Kotlin/Native : 안드로이드와 iOS뿐만 아니라 임베디드 IOT 등 개발 즉, 앱과 웹, 서버, 임베디드 등 모든 곳에서 사용할 수 있는 만능 언어이다. 💡 코틀린의 주요 특징 코틀린의 핵심 특성을 좀 더 자세히 알아보자. 정적 타입 지정 언어 코틀린..

Develop/Kotlin 2022.12.02

[kotlin - Error] 코틀린 Android Error inflating class com.google.android.material.button.MaterialButton

Material Components for Android를 사용하던 도중 view 객체 생성에 문제가 발생하는 경우가 있었습니다. 출력된 에러 메시지이다. 해결 방법 이러한 문제가 발생하는 이유는 사용된 뷰에 머터리얼 테마가 있지만, 액티비티 테마의 상속된 테마는 머터리얼 테마가 아니기 때문이다. 일반적으로 styles.xml 파일에 각종 액티비티 테마가 정의되어 있다. 문제가 발생한 테마는 AppCompat 테마인 Theme.AppCompat.Light.NoActionBar 가 적용되어 있어 머터리얼 테마로의 변경이 필요하다. 안드로이드 매니페스트 파일(AndroidManifest.xml)을 열고 문제가 발생한 액티비티가 사용하는 테마를 다음과 같이 변경하자. Theme.MaterialComponent..

Develop/Kotlin 2022.05.09

[kotlin] 코틀린 Android MVVM Retrofit(BE 연결) 구현

이전까지 모두 Room을 통해 MVVM 패턴을 구현해보았는데 이번에는 외부 백엔드와 연결하여 MVVM 패턴을 구현해보도록 하자. Retrofit을 통해 BE와 연결 후 데이터를 가져오는 게시판 예제이다. 비동기 작업은 Corutine을 사용하였고 자세한 내용과 공부한 내용은 주석을 달아 놓았다. Retrofit에 대해 잘 모른다면 다음 링크를 통해 알아보고 온 후에 아래 내용을 보면 이해가 더욱 쉬울 것으로 예상한다. [kotlin] 코틀린 Android Retrofit 활용(기상청단기예보 오픈 API 사용) Retofit이란? 이번에는 Retofit 라이브러리를 이용하여 기상청 단기예보 오픈 API와 통신하는 방법에 대해서 알아보도록 하자. Retofit이란 모바일에서 HTTP API 통신을 할 때 사..

Develop/Kotlin 2022.05.01