javascript
옵셔널 체이닝(Optional Operator)
momomoo
2024. 5. 22. 03:02
옵셔널 연산자(Optional Operator)는 JavaScript에서 값이 `null` 또는 `undefined`일 수 있는 경우 이를 안전하게 접근하거나 조작하기 위한 문법입니다. 대표적으로 옵셔널 체이닝(Optional Chaining)과 널 병합 연산자(Nullish Coalescing Operator)가 있습니다.
### 1. 옵셔널 체이닝(Optional Chaining)
옵셔널 체이닝(`?.`)은 객체의 프로퍼티에 접근할 때, 해당 프로퍼티가 존재하지 않거나 `undefined`일 경우 에러를 발생시키지 않고 `undefined`를 반환하는 연산자입니다.
#### 문법
```javascript
let value = obj?.prop;
let value = obj?.[expr];
let value = arr?.[index];
let value = func?.(args);
```
#### 사용 예시
```javascript
const user = {
name: 'Alice',
address: {
city: 'Wonderland'
}
};
console.log(user.address?.city); // 'Wonderland'
console.log(user.address?.postcode); // undefined (안전하게 접근 가능)
console.log(user.contact?.email); // undefined (에러 발생하지 않음)
```
### 2. 널 병합 연산자(Nullish Coalescing Operator)
널 병합 연산자(`??`)는 왼쪽 피연산자가 `null` 또는 `undefined`인 경우 오른쪽 피연산자를 반환하는 연산자입니다. 이는 기본값을 설정할 때 유용합니다.
#### 문법
```javascript
let value = a ?? b;
```
#### 사용 예시
```javascript
let username = null;
let defaultName = 'Guest';
let displayName = username ?? defaultName;
console.log(displayName); // 'Guest'
let input = '';
let defaultValue = 'N/A';
let result = input ?? defaultValue;
console.log(result); // '' (input이 null이나 undefined가 아니기 때문에 input 값을 그대로 사용)
```
### 예제: 옵셔널 연산자를 사용한 함수
```javascript
function getUserInfo(user) {
// 옵셔널 체이닝을 사용하여 안전하게 프로퍼티에 접근
const city = user?.address?.city ?? 'Unknown';
const email = user?.contact?.email ?? 'No email provided';
return `City: ${city}, Email: ${email}`;
}
const user1 = {
name: 'Alice',
address: {
city: 'Wonderland'
},
contact: {
email: 'alice@example.com'
}
};
const user2 = {
name: 'Bob'
};
console.log(getUserInfo(user1)); // "City: Wonderland, Email: alice@example.com"
console.log(getUserInfo(user2)); // "City: Unknown, Email: No email provided"
```
### 실전 예제: API 응답 처리
옵셔널 체이닝과 널 병합 연산자는 특히 API 응답을 처리할 때 유용합니다. API 응답 데이터는 예기치 않게 누락될 수 있기 때문에 안전하게 접근하는 것이 중요합니다.
```javascript
fetch('https://api.example.com/user/123')
.then(response => response.json())
.then(data => {
const username = data?.name ?? 'Anonymous';
const email = data?.contact?.email ?? 'No email available';
console.log(`Username: ${username}`);
console.log(`Email: ${email}`);
})
.catch(error => console.error('Error fetching user data:', error));
```
이처럼 옵셔널 연산자를 사용하면 코드가 더 안전하고 간결해지며, `null` 또는 `undefined` 값으로 인해 발생할 수 있는 오류를 효과적으로 방지할 수 있습니다.