반응형
null
코틀린의 가장큰 변화이자 Swift와 많이 유사한 null에 대한 제어이다. ( Swift에서는 옵셔널이라고 불림 )
기본적으로 코틀린은 null을 허용하지 않는다. 따라서 모든 변수와 상수는 선언과 동시에 초기화를 해주어야 한다.
하지만 null값이 필요할 때도 있기 때문에 이를 이해하여 null을 사용할 수 있도록 했다.
val a : String // 에러 발생. 초기화 안함
val a : String = null // 에러 발생. null값을 넣어줄 수 없음.
val a : String? = null // 정상. ?를 이용하면 null을 허용한다는 의미가 됨.
기본적으로 int, long, double 같은 자료형은 null이 들어갈 수 없으나 클래스형 변수는 null이 가능하다.
lateinit
lateinit은 선언 후 바로 초기화하지 않을 경우에 사용한다.
lateinit var a : String // 정상
println(a) // 에러. 초기화 안함.
a = "hihi"
println(a) // hihi
lateinit은 아래 조건을 만족할 때만 사용할 수 있다.
- var 변수에서만 사용가능
- null값으로 초기화할 수 없음.
- 초기화 전에는 변수를 사용할 수 없음
- Int, Long, Double, Float에서는 사용할 수 없음
lazy
lazy는 값을 변경할 수 없는 val를 늦은 초기화할 수 있다.
val a : String by lazy {
"hihi"
}
println(a); // 초기화코드 실행 + println 실행
println(a); // println만 실행
앱이 시작될 때 연산을 분산하여 앱 실행을 조금이라도 빠르게 할 때 사용된다.
lazy는 아래와 같은 조건이 만족할 때 사용할 수 있다.
- val에서만 사용 가능
null이 아닌것을 보증함.
변수뒤에 !!를 붙여주면 이 값이 null이 아니라는 것을 보증하는 기호이다.
자주 사용하면 좋지 않을것 같은 느낌적인 느낌 ( 항상 강제적으로 하는 연산자, 기호는 불안하다.ㅋㅋㅋ )
val name : String? = "뚠님"
val name2 : String = name // 에러. null일수도 있는 String?이기 때문에 name값에 null이 있을 수도 있기 때문
val name3 : String? = name // 정상
val name4 : String = name!! // null이 아님을 보증했기 때문에 가능. 만약 name이 null이면 런타임 에러 발생
null인지 확인하고 호출
?.를 이용하면 null인지 확인하고 null이 아니면 사용한다.
val a : String? = null
var upperCase = if(str !=null) str else null // null
//윗줄하고 같은 코드. 하지만 간결하다.
upperCase = a?.toUpperCase // ?.는 a가 null이 아니면 이라는 의미로, null이 아닐경우 대문자로 변환해서 넣는다.
?:를 사용하면 null일 경우에 대한 응답을 할 수 있다.
val a : String? = null
var upperCase = if(str !=null) str else null // null
upperCase = a?.toUpperCase ?: "초기화 ㄱㄱ" // null이 아니면 a를 대문자로, null이면 "초기화 ㄱㄱ"를 넣어준다.
반응형
'Develop > Android' 카테고리의 다른 글
Kotlin ) 코틀린 기초 Part#7 - 람다식, SAM (0) | 2019.06.13 |
---|---|
Kotlin ) 코틀린 기초 Part#6 - 컬렉션 (0) | 2019.06.13 |
Kotlin ) 코틀린 기초 Part#4 - 인터페이스 ( interface ) (0) | 2019.06.12 |
Kotlin ) 코틀린 기초 Part#3 - 클래스 ( CLASS ) (0) | 2019.06.12 |
Kotlin ) 코틀린 기초 Part#2 - 배열 ( Array ), 제어문 ( if, for, when ) (0) | 2019.06.12 |