기본 문법2 (?:, ?., as?, !!, lateinit)
엘비스 ?: 연산자
1
2
3
4
5
6
7
8
fun main(args: Array<String>){
var fishFood : Int? = null
fishFood = fishFood?.dec() ?: 0
println(fishFood)
}
1
2
3
4
5
6
7
8
9
10
11
fun main(args: Array<String>){
var yts: String? = null
fun elvis() {
val name: String = yts ?: "YTS"
val nameTwo: String = yts ?: return //함수자체를 return 시키도록 만들 수 도 있음
val nameThree: String = yts ?: throw NullPointerException()
}
}
엘비스 연산자는 널 값을 허용하지 않는 변수에 널 값이 들어갔을 때 null 값을 변환할 수 있는 결과를 만들어줌
안전한 호출 ?. 연산자
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Names {
var name: String? = null
}
class Safe {
fun safeGetName() {
val names: Names? = Names()
val name: String = names?.name ?: "No Name"
print(name)
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
fun main(args: Array<String>){
var fishFood = 6
if(fishFood != null)
fishFood = fishFood.dec()
println(fishFood)
var fishFood2 : Int? = 5
fishFood2 = fishFood2?.dec()
println(fishFood2)
}
위 처럼 if 문을 사용해 null 이 아니면 값을 줄이는 코드를 아래와 같이 ? 를 사용하여 한 줄로 줄일 수 있다.
널 값 보증 !! 연산자
1
2
3
4
5
fun nonNull() {
val animal: String = "호랑이"
val animalName: String = animal!! // animal은 절대 null값이 아니기 때문에 !!연산자로 보증
}
상황에 따라 Null이 아닌 값만 포함되는 경우가 생길 수 있다.
그럴 때 널 값이 안 들어온다는 보증을 해주는 !!연산자.
널 값이 들어오면 오류 발생
나중 초기화를 위한 lateinit 키워드
1
lateinit var name: String
클래스에서 변수를 만들 때에 상황에 따라 나중에 따로 초기화를 수행하는 경우가 생긴다.
그럴 때 사용되는 키워드가 lateinit 키워드이며, lateinit 키워드를 사용하면 초기화 없이 변수 설정이 가능해짐
안전한 자료형 변환 as? 연산자
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class As {
fun As() {
val animal: String = "호랑이"
val value: Int = animal as? Int ?: 0 //Int 로 변환 할 수 없으므로 0으로 초기화된다.
print(value)
}
}
fun main(array: Array<String>){
As().As()
}
as? 연산자는 자료형 변환에 대해 안전하게 변환 할 수 있도록 도와준다.