용어집

용어집 (Glossary)

여기서는 Redux의 핵심 용어와 함께 타입 시그니처를 정리해요. 타입은 Flow 표기법으로 문서화돼요. Redux 문서를 읽다가 낯선 단어가 나오면 이 페이지를 곁에 두고 보면 편해요.

출처: Redux — Glossary

State

type State = any

State(또는 state tree)는 넓은 의미의 용어지만, Redux API에서는 보통 store가 관리하고 getState()가 반환하는 단일 상태 값을 가리켜요. Redux 애플리케이션의 전체 상태를 나타내며, 흔히 깊게 중첩된 객체예요.

관례상 최상위 상태는 객체 또는 Map 같은 키-값 컬렉션이지만, 기술적으로는 어떤 타입이든 될 수 있어요. 그래도 상태는 직렬화 가능하게 유지하는 게 좋아요. 쉽게 JSON으로 바꿀 수 없는 것은 넣지 마세요.

Action

type Action = Object

Action은 상태를 바꾸려는 의도를 나타내는 평범한 객체예요. store에 데이터를 넣는 유일한 방법이 액션이에요. UI 이벤트, 네트워크 콜백, WebSocket 같은 다른 출처에서 온 데이터든 결국 액션으로 dispatch 되어야 해요.

액션에는 수행 중인 액션의 종류를 나타내는 type 필드가 반드시 있어야 해요. type은 상수로 정의해서 다른 모듈에서 import할 수 있어요. type에는 Symbol보다 문자열을 쓰는 게 좋아요. 문자열이 직렬화 가능하기 때문이에요.

type 외에 액션 객체의 구조는 자유예요. Flux 표준 액션(FSA) 같은 흥미로운 규칙도 있으니 관심이 있다면 찾아보세요.

Reducer

type Reducer<S, A> = (state: S, action: A) => S

Reducer(또는 reducing function)는 누적된 상태와 액션을 받아 새 상태를 반환하는 순수 함수예요. (previousState, action) => newState 형태예요. 리듀서는 순수해야 하므로, 인자를 변경하지도 않고 사이드 이펙트(API 호출, 라우팅 전환 등)도 하지 않아야 해요. 같은 인자로 호출하면 항상 같은 결과를 반환해야 해요.

Dispatch

type BaseDispatch = (a: Action) => Action
type Dispatch = (a: Action | AsyncAction) => any

dispatch는 액션을 처리하는 함수예요. 유일하게 상태를 동기적으로 바꾸는 방법으로, 상위 리듀서를 호출해서 상태를 갱신해요.

Store

type Store = {
  dispatch: Dispatch,
  getState: () => State,
  subscribe: (listener: () => void) => () => void,
  replaceReducer: (reducer: Reducer) => void,
}

Store는 앱의 상태 트리 전체를 담는 객체예요. 상태를 바꾸는 유일한 방법은 store에 액션을 dispatch 하는 것이고, 상태의 일부를 바꾸는 방식(액션과 리듀서의 조합)을 정의해서 store를 만들 수 있어요.

Redux 앱에는 store가 하나뿐이에요. 상태의 일부를 어떻게 처리할지 나눠질 때는 리듀서를 조합(compose)해서 사용해요. store를 만들 때 앱의 액션을 잘 처리하도록 store에 리듀서를 전달해요.

더 알아보기