TypeScript에서는 비슷하게 생겼지만 전혀 다른 의미를 가진 문법들이 많이 존재합니다.
그중에서도 ?, ?., ??, ||는 자주 혼동되기 쉬운 문법이에요.
이번 포스팅에서는 이 네 가지 문법의 차이점과 실제 예제를 중심으로 완벽하게 정리해드립니다!
🟢 1. 옵셔널 파라미터 ?
👉 함수나 인터페이스에서 "선택적으로" 값을 받을 때 사용
function greet(name?: string) {
console.log(`안녕하세요, ${name || '게스트'}님!`)
}
- name을 전달하지 않아도 호출 가능
- 타입은 string | undefined
인터페이스 예시
interface User {
id: number
nickname?: string // 있어도 되고 없어도 되는 값
}
🔵 2. 옵셔널 체이닝 ?.
👉 객체 속성에 접근할 때 중간 값이 null 또는 undefined여도 안전하게 접근
const user: User = { id: 1 }
const nickname = user.nickname?.toUpperCase()
- user.nickname이 없으면 undefined 반환, 에러 발생 X
🟣 3. null 병합 연산자 ??
👉 null이나 undefined일 때만 기본값을 설정
const nickname = user.nickname ?? '게스트'
- user.nickname이 null 또는 undefined일 때만 '게스트'로 대체
- falsy한 값(예: 빈 문자열 '', 0)은 유지
🔴 4. OR 연산자 ||
👉 falsy한 값 전체를 판단 기준으로 기본값을 설정
const nickname = user.nickname || '게스트'
- user.nickname이 '', 0, false, null, undefined 중 하나라도 기본값 적용
- 원하지 않게 기본값이 적용될 수 있음
⚖️ ?? vs || 차이 비교
항목 | ?? (Null 병합 연산자) | || (OR 연산자) |
판단 기준 | null 또는 undefined | 모든 falsy 값 ('', 0, false 등 포함) |
안전성 | 필요한 값 유지 | 의도치 않게 덮어쓸 가능성 있음 |
예시 | input ?? '기본값' | `input |
✅ 예제 비교
const value1 = '' || '기본값' // 👉 '기본값'
const value2 = '' ?? '기본값' // 👉 ''
✅ 요약 비교표
문법 | 용도 | 예시 |
? | 함수나 속성의 값이 선택적일 때 | function greet(name?: string) |
?. | 객체 접근을 안전하게 하기 위해 | user?.profile?.nickname |
?? | 값이 null 또는 undefined일 때만 기본값 설정 | input ?? '기본값' |
마무리
이 네 가지 문법은 TypeScript와 현대 JavaScript에서 안전하고 깔끔한 코드 작성의 핵심 도구입니다.
각 문법이 어떻게 다른지 이해하고, 상황에 맞게 정확하게 사용하는 것이 중요합니다.
⚠️ 특히 ||와 ??의 차이는 실무에서 의외로 많은 버그를 만들어내는 포인트 입니다.
'FrontEND > vue' 카테고리의 다른 글
TypeScript에서 안전하게 API 응답 객체 처리 및 Axios + DTO 구조로 타입 안정성 높이기 (0) | 2025.04.29 |
---|---|
TypeScript에서 객체를 안전하게 초기화하는 방법 (0) | 2025.04.28 |
TypeScript 옵셔널 체이닝(Optional Chaining)을 사용하는 이유와 사용 방법 (0) | 2025.04.26 |
Pinia 상태 모듈화 – 도메인 별로 관리하는 효율적인 상태 구조 만들기 (0) | 2025.04.25 |
Pinia + Axios로 API 상태관리 연동하기 (0) | 2025.04.24 |