TypeScript 함수형

순수 함수와 불변성이 줄이는 상태 추적 비용

같은 입력은 같은 출력을 만들고 외부 상태를 바꾸지 않는다는 계약이 테스트와 리팩터링의 기준이 된다.

01

입력 고정

함수 결과가 매개변수와 명시된 의존성만으로 결정되도록 만든다.

deterministic
02

복사 후 변경

배열과 객체를 직접 바꾸지 않고 spread, map, filter로 새 구조를 만든다.

immutable update
03

부수효과 분리

API 호출, 로그, 저장소 변경은 순수 계산 바깥 경계로 밀어낸다.

effect 경계
04

검증 단순화

입력과 출력만 비교하면 테스트가 내부 구현에 덜 묶인다.

easy test
테스트
순수 함수는 mock 없이 입력-출력 표로 검증된다. 날짜, 랜덤, 전역 설정은 매개변수로 주입한다.
fixture friendly
상태
불변 업데이트는 이전 상태와 다음 상태 비교를 쉽게 만든다. React 상태 변경과 reducer에서 특히 중요하다.
referential change
성능
불변성이 항상 빠르지는 않으므로 큰 데이터는 구조 공유를 고려한다. 읽기 쉬움과 복사 비용 사이 균형이 필요하다.
measure large data

순수성 점검

외부 쓰기 함수 안에서 전역 객체나 입력 객체를 직접 변경하지 않는다.
시간 의존 Date.now와 Math.random은 호출부에서 값으로 넘긴다.
참조 변경 상태 업데이트가 같은 참조를 재사용하지 않는지 확인한다.

불변 업데이트

const next = users.map((u) =>
  u.id === id ? { ...u, active: true } : u
);