안드로이드 개발자의 창고
[17일차 Kotlin] Null 안전성을 위한 형변환(Null Casting) 본문
출처 : 안드로이드 앱스쿨 2기 윤재성 강사님 수업 PPT
📖 Null 타입의 형변환
- null 값이 담긴 객체에 대해 보다 안전한 형 변환 방법을 제공하고 있다.
- null 을 허용하는 변수가 null 값이 들어있지 않다는 것을 보장해 주면 null 을 허용하지 않는 타입으로 스마트 캐스팅이 발생한다.
if문 사용
- if 문을 통해 null 허용 변수에 null 값이 아닌 객체의 주소 값이 들어 있음을 검사해 주면 if 문 내부에서는 null을 허용하지 않는 변수로 변환되어 사용할 수 있다.
- if 문이 종료되면 다시 null 허용 변수가 된다.
- 이 때 비교 연산자 보다는 is 연산자를 추천한다.
- 비교 연산자로 검사할 경우 타입이 Any 인 경우 컴파일 오류가 발생한다.
📖 예제 코드
fun main() {
testMethod1("안녕하세요")
testMethod1(null)
}
fun testMethod1(str:String?){
println(str!!.length) <<< 오류 발생
println(str?.length)
if(str is String){
println(str.length)
}
if(str != null){
println(str.length)
}
}
✔️ 코드 해석
- println(str!!.length)
- !! 연산자는 null 을 허용하지 않는 변수로 변화하는 작업을 수행한다.
- 따라서 null 이 들어있다면 오류가 발생한다.
- println(str?.length)
- ? 연산자는 참조변수에 null 이 들어가 있을 경우 프로퍼티를 사용하면 null 이 반환되고 메서드를 호출하면 메서드 호출을 무시한다.
- 해당 코드에서는 null을 전달했을 때 null이 반환된다.
- if(str is String){ ... }
- 스마트 캐스팅(null 을 허용하지 않는 String 타입)
- ? 와 동일하게 참조변수에 null 이 들어가 있는 경우 프로퍼티를 사용하면 null 이 반환되고 메서드를 호출하면 메서드 호출을 무시한다.
- 해당 코드는 if문에서 null인지 확인하므로 null을 전달했을 때는 아무 것도 출력되지 않는다.
- if(str != null){ ... }
- 참조변수에 null 이 들어가 있으면 if 문이 거짓이기 때문에 아무것도 수행하지 않는다.
- 허나 null이 아닌 객체의 id가 들어가 있다면 null을 허용하지 않는 변수로 스마트 캐스팅이 발생한다.
'Computer > Kotlin' 카테고리의 다른 글
[17일차 Kotlin] Sealed Class (0) | 2023.05.20 |
---|---|
[17일차 kotlin] 열거형 클래스(Enum Class) (0) | 2023.05.20 |
[17일차 Kotlin] Casting(캐스팅) (0) | 2023.05.20 |
[16일차 Kotlin] Null 처리(!! 연산자, ?: 연산자, ?. 연산자) (0) | 2023.05.20 |
[16일차 Kotlin] 중첩 클래스 (0) | 2023.05.19 |