안전한 체이닝

옵셔널 체이닝은 Maybe의 단락 평가에 가깝다

?.와 ??는 nullish 값을 만나면 접근을 멈추고 기본값으로 복구하지만, Option/Maybe처럼 map/flatMap 계약 전체를 제공하지는 않는다.

01

중첩 접근

user.address.city처럼 깊은 접근은 중간 값이 없으면 런타임 오류가 난다.

Cannot read properties
02

단락 평가

user?.address?.city는 nullish를 만나면 남은 접근을 실행하지 않고 undefined가 된다.

safe read
03

기본값 복구

??는 빈 문자열이나 0은 유지하고 null/undefined에만 fallback을 적용한다.

||와 구분
04

Maybe 조합

Option.map/flatMap은 값 있음/없음 컨텍스트를 유지하며 변환을 연결한다.

구문 설탕 이상
user?.name
읽기 전용 안전 접근 짧고 실용적이지만 값 없음의 이유나 오류 종류는 표현하지 않는다.
결과: T | undefined
a ?? b
nullish 기본값 0, false, ""를 유효 값으로 보존해야 할 때 ||보다 안전하다.
fallback 범위 확인
Option<T>
값 없음도 타입 계약 Some/None을 명시하면 map, flatMap, unwrap 단계가 코드 리뷰에 드러난다.
라이브러리/직접 구현 필요
Promise<T>
비동기 컨텍스트 유지 then 체인은 resolve/reject 상태를 감싼 채 다음 연산으로 넘긴다.
오류 채널 별도

옵셔널 체이닝으로 값 없음 처리하기

단순 조회 깊은 객체 읽기와 기본값이면 ?.와 ?? 조합으로 충분하다.
도메인 규칙 값 없음 자체가 의미를 가지면 Option/Result 타입으로 이유를 드러낸다.
타입 좁히기 optional 결과를 바로 사용하지 말고 분기 뒤 T로 좁혀서 후속 연산을 수행한다.