React Native나 React를 공부하다 보면 종종 등장하는 개념이 바로 Redux다. 처음 봤을 땐 생소할 수 있지만, Android 개발자 입장에서 접근하면 훨씬 쉽게 이해할 수 있다. 이 글에서는 Redux의 개념부터 구조, 그리고 Android의 MVVM 패턴과 비교하며 설명해보겠다.
✅ Redux란?
Redux는 앱의 상태(state)를 중앙에서 예측 가능하게 관리하는 라이브러리다.
컴포넌트마다 useState를 쓰다 보면 상태가 꼬이고 공유가 어려워진다. Redux는 이를 해결하기 위해 모든 상태를 하나의 중앙 저장소(Store)에 모으고, 상태 변경도 명확한 흐름을 통해서만 가능하도록 만든 구조다.
🔧 Redux 기본 구성 요소
Redux는 다음과 같은 4가지 핵심 개념으로 구성된다.
구성 요소역할
Store | 모든 상태(state)를 담는 중앙 저장소 |
State | 앱의 현재 상태 (읽기 전용) |
Action | 상태를 변경해달라고 요청하는 명령 객체 (type, payload 포함) |
Reducer | 현재 상태와 Action을 받아, 새로운 상태를 반환하는 함수 |
📱 Android 개발자 관점에서 Redux 이해하기
Android에서 흔히 쓰는 MVVM 구조와 비교해보면 Redux는 훨씬 익숙해진다.
Redux 구성 | Android MVVM 대응 요소 |
Store | ViewModel (또는 상태 저장소) |
State | LiveData / StateFlow 등 상태 데이터 |
Action | sealed class로 정의한 UI 이벤트 |
Reducer | ViewModel의 when(event) 로직 처리 |
Dispatch | viewModel.send(Event) 같은 동작 |
예시 비교
✅ Android ViewModel 예시
sealed class MemoEvent {
data class AddMemo(val content: String) : MemoEvent()
}
class MemoViewModel : ViewModel() {
private val _memos = MutableStateFlow<List<String>>(emptyList())
val memos: StateFlow<List<String>> = _memos
fun onEvent(event: MemoEvent) {
when (event) {
is MemoEvent.AddMemo -> {
_memos.value = listOf(event.content) + _memos.value
}
}
}
}
🔁 Redux 방식 예시
// Action
{ type: 'ADD_MEMO', payload: '새 메모' }
// Reducer
function memoReducer(state = [], action) {
switch (action.type) {
case 'ADD_MEMO':
return [action.payload, ...state];
default:
return state;
}
}
🤔 Redux는 언제 쓰는 게 좋을까?
- 전역 상태가 여러 컴포넌트에 걸쳐 필요할 때
- 상태 변경 로직이 복잡하고, 예측 가능한 흐름이 필요할 때
- 디버깅이 중요할 때 (Redux DevTools 활용)
- 비동기 흐름과 중첩된 상태 변화가 많을 때
✅ Context API와 비교
항목 | Redux | Context API |
설치 필요 | ✅ | ❌ (React 내장) |
복잡도 | 높음 | 낮음 |
성능 | 좋음 (부분 리렌더링 제어 가능) | 성능 이슈 있음 (전체 리렌더링) |
디버깅 도구 | Redux DevTools | 없음 |
사용 추천 | 중/대형 앱 | 소형 앱, 전역 테마 등 |
✨ 마무리: Redux는 상태 관리의 ViewModel이다!
Redux는 처음 보면 복잡하고 추상적으로 느껴지지만, Android에서 ViewModel + StateFlow + Event 구조에 익숙한 개발자라면 곧바로 이해할 수 있는 구조다. 핵심은 "상태는 중앙에서 관리하고, 변경은 Action을 통해서만 하자"는 것이다.
Redux는 단순한 상태 관리 툴이 아니라, 예측 가능한 상태 흐름을 만들기 위한 아키텍처에 가깝다.
React Native 앱을 구조화하고 싶을 때 Redux를 도입하면, 더 명확한 책임 분리와 상태 추적이 가능해진다.