2026/01 (13)


Jetpack Compose 의 기본 개념 (1)

Jetpack Compose 의 기본 개념 (1)

안녕하세요! 안드로이드 개발 생태계가 '명령형'에서 '선언형'으로 완전히 탈바꿈했습니다. 단순히 도구가 바뀐 것이 아니라 UI를 대하는 철학 자체가 달라진 것인데요. 구글이 제시한 차세대 UI 빌드 도구, Jetpack Compose의 핵심을 파헤쳐 보겠습니다.1. 시장의 흐름: Compose는 이미 대세입니다.기술 도입을 고민하고 계신가요? 시장의 수치가 그 답을 말해주고 있습니다.압도적인 성장세: 2021년 정식 출시 이후, 3년 만에 안드로이드 개발 비중이 20%에서 70%로 급격히 상승했습니다.검증된 안정성: 구글 플레이스토어를 필두로 X(트위터), 에어비앤비 등 고도의 안정성을 요구하는 글로벌 서비스들이 이미 메인 UI 도구로 채택하여 운영 중입니다.커리어의 필수 조건: 이제 신규 프로젝트의 ..

[Android] QWER 포토 위젯 개발기 (Jetpack Compose & Glance)

[Android] QWER 포토 위젯 개발기 (Jetpack Compose & Glance)

함께 달리는 기쁨: QWER이 보여준 노력의 힘1. '함께 성장한다'는 믿음 처음 QWER을 마주했을 때 제 마음을 움직인 건 완벽한 무대보다 그 이면의 성장 과정이었습니다.각자의 위치에서 이미 성공을 맛보았던 멤버들이, 낯선 악기를 손에 쥐고 손끝에 굳은살이 박이도록 연습하는 과정을 가감 없이 공유하는 모습에서 저는 큰 전율을 느꼈습니다. 2. 왜 '위젯'이었는가? (Problem & Goal)팬들은 좋아하는 아티스트의 사진을 수집하고 소장하고 싶어 한다는건 누구나 아는 사실입니다. 하지만 갤러리에 잠들어 있는 수백 장의 사진에 대해서 접근성을 높이고 좀 더 가까이 갈 수 있는 방법이 없을까에 대해서 고민을 해봤습니다. "저장된 데이터로서의 사진이 아니라, 내 일상 속에 자연스럽게 스며든 아티스트의 모..

Flutter 입문(4): 상태 관리의 끝판왕, Riverpod 완벽 정리

Flutter 입문(4): 상태 관리의 끝판왕, Riverpod 완벽 정리

안녕하세요! 오늘은 Flutter 개발자들 사이에서 가장 사랑받는 상태 관리 라이브러리인 Riverpod에 대해 알아보겠습니다.Provider의 제작자가 만든 Riverpod은 기존 Provider의 단점(런타임 에러, 위젯 트리 의존성 등)을 완벽하게 보완하며, 현재 Flutter 생태계에서 사실상 표준으로 자리 잡고 있습니다.1. Riverpod이란?Riverpod은 Provider 의 철자를 재배열(Anagram)한 이름입니다. 이름에서 알 수 있듯이 Provider의 정신을 계승하면서도 훨씬 더 안전하고(Compile-safe), 유연하게 설계되었습니다.컴파일 타임 안전성: 잘못된 타입 접근으로 인한 런타임 에러를 방지합니다.위젯 트리 독립성: 위젯 트리 외부에서도 상태에 접근할 수 있어 로직 분..

[Jetpack Compose] 리스트를 효율적으로! LazyColumn 완벽 정리

[Jetpack Compose] 리스트를 효율적으로! LazyColumn 완벽 정리

안녕하세요! 오늘은 Jetpack Compose에서 데이터를 리스트 형태로 보여줄 때 필수적으로 사용하는 LazyColumn에 대해 알아보겠습니다.기존 안드로이드 개발(XML)에서 리스트를 만들려면 RecyclerView, Adapter, ViewHolder 등 설정해야 할 것이 정말 많았죠? Compose에서는 LazyColumn 하나로 이 모든 과정을 매우 직관적이고 간단하게 해결할 수 있습니다. 1. LazyColumn이란?LazyColumn은 화면에 보이는 아이템만 렌더링하는 컴포넌트입니다.만약 1,000개의 아이템이 있는 리스트를 한꺼번에 생성한다면 메모리 부하가 엄청나겠죠? LazyColumn은 사용자가 스크롤을 내려서 화면에 보여질 때만 해당 아이템을 생성하기 때문에 성능 면에서 매우 효율적..

[Jetpack Compose] remember와 MutableState 완벽 이해하기

[Jetpack Compose] remember와 MutableState 완벽 이해하기

안녕하세요! 화면의 상태 를 다룰 때 필수적으로 사용하는remember와 MutableState에 대해 알아보겠습니다.1. 왜 그냥 변수로는 안 될까요?전통적인 XML 방식과 달리, 컴포즈는 데이터가 변하면 함수를 다시 실행(Recomposition)하여 화면을 그립니다. 하지만 일반적인 변수를 선언하면 함수가 다시 호출될 때마다 값이 초기화되어 버립니다.@Composablefun Counter() { var count = 0 // 리콤포지션이 일어날 때마다 다시 0이 됩니다! Button(onClick = { count++ }) { Text("클릭 횟수: $count") }}함수가 재생성되면서 count를 다시 0으로 만들기 때문이죠. 이 문제를 해결하기 위해 필요..