Retrofit 라이브러리에서 intercepter를 사용하여 로깅, 인증, 헤더 조작, 오류 처리 등의 기능을 구현할 수 있다. 클라이언트에 응답을 전달하기 전에 말 그대로 '가로채서' 처리를 하기 때문에 클라이언트 내부 코드에서 응답을 처리하는 것보다 더 견고하고 높은 보안 수준을 가질 수 있다.
2017년에 처음 소개된 AAC의 하나로 데이터가 변경될 때 observer에 알리는 lifecycle-aware data holder이다.
Configuration change에 대응할 때, 간편하면서 lifecycle 관리가 되는 방식이 필요할 때, 데이터베이스나 네트워크 응답 등 비정기적인 데이터 업데이트가 필요할 때 사용된다. 그러나 복잡하고 동시성이 필요한 작업에는 알맞지 않고 내장 에러 핸들러가 제공되지 않는다는 단점이 있다.
2020년에 Kotlin.coroutine 라이브러리의 일부로 소개되었다. Flow를 기반으로 하는 lifecycle-aware data holder이다.
복잡하고 동시성이 필요한 작업, reactive한 기능이 필요할 때 사용하면 좋고 내장 에러 처리를 지원한다. 그러나 coroutine과 flow에 대한 이해가 필요하다.
요즘은 코루틴도 많이 쓰이고 특히 컴포즈를 사용하는 프로젝트에서는 거의 stateFlow를 사용하는 것 같다.
| Enum | Sealed Class |
|---|---|
| 계층적 구조 | 평면적 구조 |
| 동적이고 사용자 정의 가능 | 유연성 부족 |
| 선언적 표현식 처리 | 컴파일 타임 암시적 처리 |
| 상속 가능 | 상속 불가 |
+ Sealed class vs Sealed interface
생성자에 매개변수가 필요한 경우가 아니라면 서버 응답 래퍼 클래스 등에는 sealed interface를 더 쓰는 것 같다.