불가능한 상태를 표현할 수 없게: 타입으로 만드는 안전한 코드
·
Typescript
프로그래밍에서 상태를 다루다 보면, 발생해서는 안 되는 상태가 종종 생깁니다. 이런 상태는 버그로 이어지기 쉬우며, 대부분 런타임에서야 문제를 발견하게 됩니다. 이 글에서는 불가능한 상태가 런타임에 나타나는 것을 아예 설계 단계에서 방지하는 방법, 즉 타입으로 안전성을 확보하는 접근을 소개하겠습니다. 1. 불가능한 상태란 무엇인가?불가능한 상태란, 시스템이 정상적으로 동작한다면 절대 나타나서는 안 되는 모순된 상태를 의미합니다.결제 완료 && 배송 대기중 → 가능한 상태결제 미완료 && 배송 중 → 불가능한 상태두 번째 경우는 실제 비즈니스 규칙상 절대 일어나선 안 되지만, 코드 구조가 안전하지 않다면 이런 상태가 런타임에서 발생할 수 있습니다. 2. 왜 불가능한 상태를 표현할 수 없게 해야 할까?불가..
useState 소스 코드 분석 - 2. dispatch 생성
·
React js/react 소스 코드 분석
1. useState의 초기 렌더링: Dispatch가 어떻게 생성될까?function mountState( initialState: (() => S) | S,): [S, Dispatch>] { const hook = mountStateImpl(initialState); const queue = hook.queue; const dispatch: Dispatch> = (dispatchSetState.bind( null, currentlyRenderingFiber, queue, ): any); queue.dispatch = dispatch; return [hook.memoizedState, dispatch];} dispatch 함수는 초기 렌더 시점에 단 한 번 생성된다.dis..
useState 소스코드 분석 - 1. state 생성
·
React js/react 소스 코드 분석
React 19.3.0의 useState 구현을 보면 다음과 같다export function useState( initialState: (() => S) | S,): [S, Dispatch>] { const dispatcher = resolveDispatcher(); return dispatcher.useState(initialState);}resolveDispatcher()가 반환하는 dispatcher 객체의 useState 메서드를 호출할 뿐이다. resolveDispatcher가 반환하는 값function resolveDispatcher() { const dispatcher = ReactSharedInternals.H; return ((dispatcher: any): Dispatcher)..