Kotlin

[Kotlin] 함수 기초 (선언, 반환, default value, compact functions)

노소래 2021. 8. 3. 14:59

- 기본 함수선언

틀은 다음과 같다.

fun 함수이름(인자): 반환형 { 바디 }

 

- 리턴값이 없는 함수

자바에서 리턴타입이 void 이면 void를 적어주었다면 코틀린은 그냥 : 반환형을 생략하면 된다.

fun 함수이름(인자) { 바디 }

이런 함수는 kotlin.Unit 을 반환한다고 생각하면 된다. 코틀린에서 값이 없다는 뜻이다. 

 

- main() 함수는 실행의 entry point 이다.

command line arguments 가 string 의 배열로 전달된다.

fun main(args: Array<String>) {
    println("Hello World")
}

1.3 버전 이후로는 main 함수에 파라미터를 쓰지 않아도 된다. 

IntelliJ 에서 커맨드라인을 주는 방법은 Run > Edit Configuration 에서 원하는 파일을 선택해서 Program arguments 에 인자를 전달하면 된다.

 

- parameter 에 default value 을 설정 및 parameter 이름 지정

함수를 선언할 때 parameter 에 default value 을 설정할 수 있다. 그러면 함수를 호출할 때 해당 argument 를 전달하면 전달한 값이 쓰이고 전달하지 않으면 default value 가 쓰인다. 

이 기능은 overloading 을 줄여줄 수 있어서 유용한 기능이다.

default value 는 parameter 에서 뒤쪽으로 빼는 것이 좋다. parameter 이름을 지정하면 괜찮지만 그렇지 않다면 혼란스러울 수 있기 때문이다.

당연히 default value 를 사용하지 않은 parameter 는 상응하는 argument 를 전달해야만 한다.

fun swim(speed: String = "fast") {
   println("swimming $speed")
}

fun main () {
    swim()   // uses default speed
    swim("slow")   // positional argument
    swim(speed="turtle-like")   // named parameter
}

아래와 같이 default value 에 함수로 값을 전달할 수도 있다. 그래도 런타임에 함수를 호출할 때마다 함께 default value 를 구하게 되니 너무 많은 연산을 요구하는 동작은 하지 않게 주의한다.

fun shouldChangeWater (day: String, temperature: Int = 22, dirty: Int = getDirtySensorReading()): Boolean {

 

- compact functions or single-expression functions

하나의 결과를 반환하는 expression 을  가진 함수라면 {} 과 return 을 없애고 = 으로 반환해줄 수 있다.

fun isTooHot(temperature: Int) = temperature > 30

fun isDirty(dirty: Int) = dirty > 30

fun isSunday(day: String) = day == "Sunday"