Kotlin 서버 코딩: '!!'와 '?' 널 안정성 연산자 사용법



# Kotlin 서버 환경에서 '!!' vs '?' 연산자 사용 가이드

Kotlin에서 '!!'와 '?' 연산자는 널(null) 안정성을 위해 자주 사용됩니다. 서버 환경에서는 특히 안정적인 코드가 중요하기 때문에, '!!'와 '?'를 상황에 맞게 올바르게 사용하는 것이 필수적입니다.

이 글에서는 두 연산자의 차이와 서버 환경에서 안전한 코드 작성을 위한 사용 가이드를 예시와 함께 정리합니다.

---

## '!!' 연산자: 널 강제 해제

- '!!' 연산자는 **널이 아님을 확신**할 때 사용하는 연산자로, 객체가 `null`일 경우 `NullPointerException`을 발생시킵니다. 
- 잘못 사용하면 서버의 예기치 않은 종료를 유발할 수 있기 때문에 서버 환경에서는 주의가 필요합니다.

### '!!'예제

```
fun processData(data: String?) {
    val length = data!!.length // data가 null이면 예외 발생
    println("Data length: $length")
}

fun main() {
    processData("Hello") // 정상 작동
    processData(null) // NullPointerException 발생
}
```

위 예제에서 data가 null인 경우 NullPointerException이 발생하며 서버가 중단될 위험이 있습니다.

## 서버에서 !! 사용 시 주의사항
- nullable 값의 null 가능성을 충분히 확인 후 사용해야 합니다.
- 서버와 같이 예기치 않은 데이터가 유입될 수 있는 환경에서는 !! 사용을 최소화하는 것이 좋습니다.

## ? 연산자: 안전 호출 (Safe Call)
- ? 연산자는 안전 호출 연산자로, 객체가 null일 수 있을 때 예외를 방지합니다. 
- 객체가 null이면 해당 호출을 건너뛰고 null을 반환합니다. 
- 이를 통해 서버가 예기치 않은 상황에서 중단되지 않도록 안정성을 제공합니다.

? 예제
```
fun processData(data: String?) {
    val length = data?.length ?: 0 // data가 null일 경우 length는 0
    println("Data length: $length")
}

fun main() {
    processData("Hello") // 출력: Data length: 5
    processData(null) // 출력: Data length: 0
}
```

위 예제에서 data가 null인 경우에도 예외가 발생하지 않고 안전하게 0을 반환하여 안정적인 코드 실행이 가능합니다.

### 서버에서 ? 사용 시 장점
- 예외 발생을 방지하여 서버 중단을 막을 수 있습니다.
- nullable 값이 존재할 가능성이 있는 경우라면 ? 연산자를 사용해 널 안정성을 확보하는 것이 권장됩니다.


## 서버 환경에서의 안정성: 언제 !!와 ?를 사용할까?
- nullable 값이 발생할 가능성이 높은 경우에는 ? 연산자를 사용하여 안전하게 처리하는 것이 좋습니다.
- null이 절대 발생하지 않는 확실한 값에만 !!를 사용하세요. 하지만 서버에서는 예외가 발생할 가능성이 항상 존재하므로 !!의 사용은 최소화하는 것이 좋습니다.

## 결론
- 서버 환경에서 안정성을 보장하려면 !!보다는 ?를 사용하는 것이 권장됩니다. 
- 예기치 않은 널 값으로 인해 서버가 중단되는 것을 방지하고, 안전한 코드 작성을 위해 ? 연산자를 적절히 활용하세요.

### 요약
- !!: 널이 아님을 확신할 때만 사용 (예외 발생 시 서버 중단 위험 있음)
- ?: 널 가능성을 처리하여 안전하게 호출 (서버 안정성을 높임)



추가로 읽으면 좋을 것

댓글

이 블로그의 인기 게시물

윤석열 계엄령 선포! 방산주 대폭발? 관련주 투자 전략 완벽 분석

대통령 퇴진운동 관련주: 방송·통신·촛불수혜주 완벽 분석

키움 OPEN API MFC 개발 (1)