채널을 이용한 일회성 이벤트
탐색 및 토스트 이벤트를 안전하게 전달합니다.
채널을 이용한 일회성 이벤트은(는) CoddyKit의 무료 Jetpack Compose Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Jetpack Compose Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Jetpack Compose Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
상태는 이벤트가 아닙니다
탐색하거나 토스트를 표시하는 것처럼 정확히 한 번만 발생해야 하는 작업이 있습니다. 이러한 작업을 상태로 모델링하면 화면이 회전할 때마다 다시 재생됩니다.
재생 문제
스낵바 메시지를 StateFlow에 저장하면 구성 변경 시 메시지를 다시 읽어 예상치 않게 메시지가 다시 표시됩니다.
Channel 알아보기
Channel은 각 값이 정확히 하나의 수신자에게 전달된 뒤 소비되고 다시 재생되지 않는 핫 파이프입니다.
private val _events = Channel<UiEvent>()Send와 Emit 비교
send라는 일시 중단 호출을 사용해 Channel에 값을 넣습니다. 이벤트는 수신할 준비가 된 대상이 생길 때까지 버퍼에서 기다립니다.
_events.send(UiEvent.NavigateBack)플로로 노출하기
receiveAsFlow를 사용해 채널을 UI용 플로로 변환하면 정확히 하나의 수집기가 각 이벤트를 소비할 수 있습니다.
val events = _events.receiveAsFlow()한 번 소비되면 영원히 사라집니다
수집기가 Channel에서 이벤트를 가져가면 이벤트는 사라집니다. 이후 화면이 회전해도 다시 읽을 수 없으므로 실수로 재생되지 않습니다.
이벤트를 타입으로 모델링하기
탐색이나 메시지 표시처럼 한 번만 실행되는 모든 작업을 명확하고 빠짐없이 표현할 수 있도록 봉인된 UiEvent 타입을 정의하세요.
sealed interface UiEvent {
data class ShowToast(val msg: String) : UiEvent
}Compose에서 이벤트 수집하기
LaunchedEffect 내부에서 이벤트 플로를 수집하면 화면의 수명 주기에 연결되고 각 이벤트 처리기가 한 번씩 실행됩니다.
LaunchedEffect(Unit) {
events.collect { handle(it) }
}버퍼 정책 선택하기
기본 Channel은 수신자가 없으면 송신자를 일시 중지합니다. 버퍼를 지정하면 송신 작업이 로직을 차단하지 않게 할 수 있습니다.
Channel<UiEvent>(Channel.BUFFERED)SharedFlow라는 대안
replay가 0인 SharedFlow도 이벤트를 전달할 수 있지만, Channel은 활성 수집기가 없어도 한 번만 전달되도록 보장합니다.
상태와 이벤트를 분리하기
깔끔한 패턴은 다음과 같습니다. 화면 상태에는 하나의 StateFlow를 사용하고, 한 번만 실행되는 이벤트에는 하나의 Channel을 사용합니다. 이제 둘을 혼동할 일이 없습니다.
빠른 확인
한 번만 실행되는 작업에 무엇이 적합한지 판단해 보세요.
복습: 한 번만 실행되는 이벤트
훌륭합니다! Channel은 탐색이나 토스트처럼 한 번만 실행되는 이벤트를 정확히 한 번 전달하여, 재생 가능한 화면 상태와 분리해 줍니다. 🎯
AI 튜터와 함께 Kotlin을(를) 배우세요 — 무료
브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.
- 코스
- 30
- 레슨
- 120
자주 묻는 질문
“채널을 이용한 일회성 이벤트” 강의는 무료인가요?
네 — “채널을 이용한 일회성 이벤트” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Jetpack Compose Academy 강의 전체를 잠금 해제할 수 있습니다. Jetpack Compose Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“채널을 이용한 일회성 이벤트”에서 뭘 배우나요?
탐색 및 토스트 이벤트를 안전하게 전달합니다. 브라우저에서 직접 실행하는 실습 코드로 Jetpack Compose Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Jetpack Compose Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Jetpack Compose Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“채널을 이용한 일회성 이벤트” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Jetpack Compose Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Jetpack Compose Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- StateFlow와 SharedFlow 비교
- Flow 매핑 및 결합
- stateIn과 WhileSubscribed
- 채널을 이용한 일회성 이벤트