코틀린에서 null 안전성을 어떻게 구현하나요?
_____A1: 코틀린의 null 안전성은 변수나 참조가 null 값을 가질 수 있는지 여부를 컴파일 시점에 명확히 구분하여, NullPointerException 발생 가능성을 줄이고 안전한 코드를 작성할 수 있도록 하는 기능입니다.
Q2: 코틀린에서 기본적으로 변수는 null을 가질 수 있나요?
A2: 아닙니다. 코틀린에서 기본적으로 선언된 변수는 null 값을 허용하지 않습니다. 예를 들어 `val name: String = "Kotlin"` 은 null을 담을 수 없고, `name = null` 할당 시 컴파일 오류가 발생합니다.
Q3: null을 허용하는 변수는 어떻게 선언하나요?
A3: 타입 뒤에 물음표(`?`)를 붙임으로써 해당 변수가 null 값을 가질 수 있음을 명시합니다. 예: `val name: String? = null`
Q4: null 허용 타입의 변수를 사용할 때 주의할 점은?
A4: null 허용 타입 변수는 직접 접근 시 컴파일 오류가 납니다. 따라서 null 안전 연산자(`?.`), 엘비스 연산자(`?:`), 또는 명시적 null 체크를 통해 안전하게 다뤄야 합니다.
Q5: null 안전 연산자(`?.`)란 무엇인가요?
A5: 변수나 객체가 null인지 확인하고, null이 아닐 경우에만 멤버 접근이나 함수 호출을 실행합니다. 예: `name?.length` 는 `name`이 null이면 null 반환, 아니면 길이 반환.
Q6: 엘비스 연산자(`?:`)는 어떻게 사용되나요?
A6: 좌측 피연산자가 null일 경우 우측 값을 반환하는 연산자입니다. 예: `val length = name?.length ?: 0` 은 `name`이 null이면 0, 아니면 길이를 반환합니다.
Q7: null이 아님을 보장하는 `!!` 연산자는 무엇인가요?
A7: 변수에 null이 절대 아니라고 컴파일러에 강제 지정하는 연산자로, 만약 실제로 null이면 런타임에 `NullPointerException`이 발생합니다. 사용에 주의가 필요합니다.
Q8: 스마트 캐스트(smart cast)란 무엇인가요?
A8: if문 등에서 null 검사 후, 컴파일러가 자동으로 변수를 non-null 타입으로 간주해 직접 변수에 접근할 수 있는 기능입니다. 예:
```kotlin
if (name != null) {
println(name.length) // 'name'은 자동으로 non-null 타입으로 인식됨
}
```
Q9: null 안전성을 지원하는 코틀린 표준 라이브러리 함수가 있나요?
A9: 네, `let`, `also`, `apply` 등 다양한 스코프 함수들과 함께 null 안전 연산자를 활용해 null을 간결하고 안전하게 처리할 수 있습니다. 예:
```kotlin
name?.let { println(it.length) }
```
Q10: 자바 코드를 호출할 때 null 안전을 어떻게 보장하나요?
A10: 코틀린은 자바 메서드의 null 가능성을 주석(`@Nullable`, `@NotNull`) 또는 내부 추론을 토대로 판단하지만, 확실하지 않은 경우 null 안전 연산자 등을 사용하여 조심해야 합니다.
---
이처럼 코틀린은 타입 시스템 수준에서 null과 비-null 타입을 구분하고, 다양한 문법적 도구를 제공해 NullPointerException 발생을 최소화하는 null 안전성을 구현합니다.
작성자:
정서영 [비회원]
| 작성일자: 1년 전
2024-09-09 09:47:11
조회수: 140 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 140 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.