마이페이지에서 내 주문과 쿠폰을 조회한다고 해보겠습니다. 두 기능 모두 어떤 계정의 데이터를 조회할지 알아야 하므로 계정 정보를 전달합니다.loader.loadOrders(account)loader.loadCoupons(account)같은 계정을 사용하는 함수가 늘어나면 같은 인자도 반복해서 넘기게 됩니다. 그렇다고 계정 정보를 전역 변수로 옮기면, 함수가 어느 계정으로 조회하는지 확인하기 어려워지죠. Kotlin의 Context parameters는 함수가 필요한 값을 미리 선언하고, 호출하는 쪽에서 그 값을 제공하는 기능입니다. 호출마다 인자를 적는 대신, 여러 호출이 같은 값을 사용하도록 묶을 수 있습니다. 이번 글에서는 계정 정보를 전달하는 예제로 동작을 살펴보겠습니다. 익숙한 일반 인자와 확장 ..
공유받은 링크를 누르면 앱의 상품 상세 화면이 열립니다. 이 동작을 구현하려면 앱은 먼저 URL에서 어떤 상품을 보여줄지 알아내야 합니다. 예를 들어 https://shop.example.com/products/42를 받았다면 상품 42의 상세 화면으로 연결해야 하죠. 그런데 랜딩 되는 화면뿐만 아니라, 뒤로 갔을 때 어떤 화면을 보여줄지도 정해야 합니다. Navigation 3 1.2.0에는 이 작업을 돕는 딥 링크 API가 추가되었습니다. UriDeepLinkMatcher는 URL을 화면 키로 바꾸고, withBackStack은 그 화면 앞에 둘 경로를 구성합니다. 이번 글에서는 상품 링크 하나가 앱의 화면으로 연결되는 과정을 살펴보겠습니다. 예제는 Navigation 3 runtime·UI 1.2...
요즘 개발하면서 AI가 코드를 작성하는 일이 꽤 익숙해졌습니다. 아니요! 이제는 AI가 없으면 일을 할 수 없게 되었죠. 하핫...필요한 기능을 설명하면 코드가 나오고, 오류가 발생하면 다시 물어봅니다. 그런데 한편으로는 궁금합니다. 코드가 잘 나온다고 해서, 제가 AI를 잘 쓰고 있는 걸까요? 저는 주로 Claude를 사용하고 있습니다. 다른 AI도 써봐야 하는지, AI마다 어떤 차이가 있는지도 궁금하고요. 새로운 도구 소식이 계속 나오니 지금 사용하는 방식만으로 충분한지도 잘 모르겠습니다. 블로그의 첫 AI 글은 이 고민에서 시작해 보려고 합니다. 새로운 도구를 알아보기 전에, 지금 쓰는 AI에 개발 작업을 어떻게 맡기고 있는지부터 살펴볼게요.AI의 시대, 개발자의 역할AI에 코드를 물어보는 방식은 ..
목록에 중복된 항목이 있는지 확인할 때 distinctBy를 사용해 본 적 있으실 텐데요. 중복을 제거한 목록의 크기와 원래 크기를 비교하면 간단하게 확인할 수 있습니다. 그런데 우리가 필요한 값은 중복 여부인데, 코드에서는 중복을 제거한 목록까지 만들고 있습니다. 앞부분에서 중복을 발견해도 남은 항목을 계속 확인해야 하고요. Kotlin 2.4.20에는 이런 확인을 위한 allDistinct와 allDistinctBy가 추가되었습니다. 이번 글에서는 상품 목록을 검증하는 작은 예제로, 목록을 만드는 작업과 중복을 판단하는 작업이 어떻게 다른지 알아보려고 합니다.상품이 서로 다르면, 상품 번호도 다를까?상품을 등록하기 전에 같은 매장의 상품 번호가 겹치는지 확인한다고 해보겠습니다. 아래는 설명을 위한 실..
Compose에서 Flow를 수집할 때 collectAsStateWithLifecycle()을 많이 사용합니다. 화면의 Lifecycle에 맞춰 수집을 시작하고 중단해 주는 함수인데요. 그런데 이 함수를 사용했는데도 앱을 백그라운드로 보내면 API 요청이 계속 실행되는 경우가 있습니다. 수집을 멈춰 준다는데, 요청은 왜 멈추지 않을까요? 이번 글에서는 주기적으로 데이터를 가져오는 예제로 화면이 값을 받는 수명과 데이터를 만드는 작업의 수명을 나눠서 알아보려고 합니다.수집을 멈추면 요청도 멈출까? 우선 요청을 마친 뒤 1초를 기다렸다가 다음 숫자를 가져오는 간단한 Repository를 만들겠습니다. 실제 서버 대신 요청 횟수를 반환하는 실습용 코드입니다. class CounterRepository { ..
Google I/O 2025 'Add Predictive Back animations' 코드랩을 기반으로 작성되었습니다. What is predictive back?predictive back은 뒤로 가기 제스처를 진행하는 동안 이동할 화면을 미리 보여주는 기능입니다. 첨부된 자료처럼 손가락을 움직이는 정도에 따라 이전 화면이 서서히 나타나는 것을 볼 수 있습니다. 유저는 미리 보이는 화면을 보고 뒤로 가기를 완료할지 취소할지 판단할 수 있습니다. 앱 첫 화면에서는 홈 화면으로 나가게 된다는 것을 미리 알 수 있으니, 실수로 앱을 이탈하는 상황을 줄이는 데 유용할 것 같네요. How to add predictive back support코드랩에서는 먼저 홈 화면으로 돌아가는 predictive back..
Google I/O 2025 'Improve the user experience of an Android app' 코드랩을 기반으로 작성되었습니다. Make your app edge-to-edge on Android 15targetSdk를 35 이상으로 올리면 Android 15 이상 기기에서 edge-to-edge가 기본으로 적용됩니다. edge-to-edge는 앱 콘텐츠를 상태바와 시스템 내비게이션 바 뒤까지 확장해, 디스플레이 공간을 더 넓게 활용하는 방식입니다.Android 15에서는 테마의 windowOptOutEdgeToEdgeEnforcement로 적용을 일시적으로 해제할 수 있습니다. 다만 targetSdk 36 이상인 앱을 Android 16 이상 기기에서 실행하면 이 설정은 더 이상 적..
텍스트 하이퍼링크 기능을 Compose의 ClickableText로 구현하셨나요?2024년 9월 4일 출시된 Compose Foundation 1.7.0부터 텍스트 하이퍼링크를 쉽게 구현할 수 있는 LinkAnnotation을 안정적으로 사용할 수 있습니다. 같은 버전에서 ClickableText는 deprecated 되었고, Text 또는 BasicText에 LinkAnnotation이 담긴 AnnotatedString을 전달하는 방식이 권장됩니다. ClickableText는 이제 그만 LinkAnnotation을 알아보기 전에 ClickableText를 잠시 살펴보면 LinkAnnotation의 장점을 쉽게 알 수 있습니다. 하나의 문자열에 하이퍼링크가 두 개 이상 있다면, 클릭한 위치가 어느 링크에..
MessagingStyle 이번 글에서는 Android 알림 스타일 중 MessagingStyle에 이미지를 표시하는 방법을 알아보려고 합니다. MessagingStyle은 채팅처럼 대화형 데이터를 표시할 때 사용하는 알림 스타일입니다. 최근 회사에서 앱의 알림 스타일을 MessagingStyle로 변경하는 작업을 진행했는데요. 이미지를 표시하는 부분에서 어려움을 겪어서 이번 글에서 정리해 보려고 합니다. 기본 사용법 val person = Person.Builder() // (1) .setName("자비스") .setIcon(IconCompat.createWithBitmap(bitmap)) ... .build() ..
최근 'CLFigNotion' Figma 플러그인을 개발했습니다. 퇴근하고 게임만 하던 일상에서 벗어나, 하나의 목표를 가지고 개발하는 경험이 오랜만에 아주 설레고 좋았어요. 이 글을 쓰니 플러그인을 완성했던 늦은 밤이 떠오르네요. 회사 동료들에게 공유할 생각에 두근거리며 잠들었던 날이었죠. 오해가 없도록 미리 말씀드리면, 제가 이번에 개발한 플러그인은 이미 공개되고 많은 찬사를 받은 evan님의 FigNotion 플러그인의 아이디어를 매우 매우 참고해서 만든 프로젝트입니다. 왜? 개발을 결심한 계기저희 회사는 복잡한 기능 정책을 피그마와 노션에서 동시에 관리해야 하는 어려움이 있었습니다. 그러다 우연히 evan님의 FigNotion 플러그인을 알게 되었습니다. 짧은 기간 사용했지만 기획팀 동료분들이..
- Total
- Today
- Yesterday
- TEXT
- google io 2025
- android
- build
- ViewModel
- exception
- recyclerview
- deep link
- 기술질문
- MVP
- compose
- Gradle
- AOS
- CI/CD
- flow
- git
- Repository
- 안드로이드
- Coroutine
- Test
- WebView
- Java
- Unit Test
- View
- AI
- Kotlin
- Dependency
- github
- 백준
- singleton
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 |