클로스트 이야기

[Kotlin] 함수와 Nullable 본문

개발이야기/Kotlin

[Kotlin] 함수와 Nullable

클로스트 2021. 12. 22. 02:03

오늘은 Kotlin 언어의 함수와 nullable 에 대해 알아 보겠습니다.

함수는 여타 다른 언어들과 크게 다르지 않고 모양만 약간 다릅니다.

함수

package com.example.myapplication

fun main() {
    sayHello() // Hello~
    println(addNumber(5,3)) // 8
    println(avgNumber(3.2,5.3)) // 4.25
}

fun sayHello(){
    println("Hello~")
}

fun addNumber(a: Int, b: Int): Int{
    return (a+b)
}

fun avgNumber(a: Double, b: Double): Double {
    return  (a + b)/2
}

위와 같이 선언하고 실행합니다. 다른 언어와 차이점은 리턴 타입을 오른쪽에 적는다는 것 정도입니다. 파라미터 타입을 정해 주고 리턴 타입도 정해주면 정해준 타입대로 리턴하여야 하고, 리턴타입이 void라면 생략하면 됩니다.

Nullable

코틀린에서는 기본적으로 변수를 선언하면 초기화를 해야 합니다. 이렇게 되면 기본적으로 해당 변수의 타입은 non-null 타입입니다. null을 저장하고 싶다면 nullable 변수로 선언해야 합니다.

var name: String = "alice" // Regular initialization means non-null by default
name = null // compilation error

var nullableName: String? = "bob" // can be set to null
nullableName = null // ok
print(nullableName) // null

nullable 변수로 선언하면 null 이 할당 가능해집니다. 여기서 String 전용 메소드를 실행하게 되면 에러가 나게 되고 이는 null이 될수 있기 때문입니다. 에러가 안나게 하려면 ? 를 추가해주면 되고 에러는 사라지게 됩니다.

    var nullableName: String? = "Chris"
    nullableName = null // Works
    // nullableName.length // error
    println(nullableName?.length) // null

safe call

null이 아닐때만 실행하는걸 보장하기 위한 오퍼레이터입니. let과 함께 쓰고 null이 아니면 it으로 해당 메소드를 호출합니다.

    val nullableName: String? = null
    nullableName?.let { println(it.toLowerCase()) }
    nullableName?.let { println(it.length) }

elvis operator

자바스크립트의 || 패턴과 비슷하고, 플러터의 ?? 와 비슷한 문법입니다. 해당변수가 null 일때 세팅될 값을 세팅합니다.

    val nullableName: String? = null
    // val nameLen: Int = if (nullableName != null) nullableName.length else -1
    val nameLen = nullableName?.length ?: -1
    println(nameLen) // -1

위를 보면 if 문으로 null을 체크하여 하는 구식방식은 주석처리 되어있고, elvis 연산자를 이용하여 쓰면 단축하여 그 아래 처럼 쓸 수 있습니다.

!! operator

!! 연산자는 nullable 타입을 non-null 타입으로 변환 시킵니다. 그리고 null 이라면 NullPointException 을 던지게 됩니다. 따라서 이연산자를 쓸때는 null 이 아니라는 확신이 있을때 쓰면 됩니다.

    val nullableName: String? = null
    nullableName!!.toLowerCase() // NullPointerException

'개발이야기 > Kotlin' 카테고리의 다른 글

[Kotlin] 조건문과 반복문  (0) 2021.12.19
[Kotlin] 연산자 와 When 표현식  (0) 2021.12.11
[Kotlin] 자료형 과 변수  (0) 2021.11.30
Comments