개발일지

Kotlin in A..Z (7) - 함수 본문

Kotlin (코틀린)

Kotlin in A..Z (7) - 함수

강태종 2020. 7. 11. 00:58

- 순수 함수의 정의

같은 인자에 대하여 항상 같은 결과를 '반환하면 부작용이 없는 함수'라고 부른다.

부작용이 없는 함수가 함수 외부의 어떤 상태도 변화시키지 않으면 '순수 함수'라고 부른다.


- 일급 객체의 특징

일급 객체는 함수의 인자로 전달할 수 있다.

일급 객체는 함수의 반환값에 사용할 수 있다.

일급 객체는 변수에 담을 수 있다.


- 고차 함수의 정의

다른 함수를 인자로 받을수 있는 함수

다른 함수를 리턴값으로 사용할 수 있는 함수


- 함수를 쓰는 이유

재사용성을 높여 코드의 중복을 없애기 위해

함수를 이용하여 코드의 가독성을 높일 수 있다.

모듈성을 높여 유지보수를 쉽게 할 수 있다.


- 함수 정의하기

fun Name(Parm1, Parm2): ReturnType {

  Body

}

 

fun키워드 이름(변수1, 변수2): 반환형 {

  함수 내용

}

위와 같은 형식이다.

 

코드

fun sum(x:Int, y:Int): Int {
    return x + y
}

fun main() {
    println(sum(2, 3))
}

 

결과

5

- 간단한 함수 정의

함수의 내용이 한줄이면 {}와 return을 생략하고 =연산자로 표현할 수 있다.

 

코드

fun sum(x: Int, y:Int): Int = x + y

fun main() {
    println(sum(2, 3))
}

 

결과

5

함수의 반환형을 유추할 수 있으면 반환형을 생략할 수 있다.

 

코드

fun sum(x: Int, y:Int) = x + y

fun main() {
    println(sum(2, 3))
}

 

결과

5

-함수의 반환형

함수의 반환형이 없으면 생략할 수 있다.

 

코드

fun printSum(x:Int, y:Int) {
    println(x + y)
}

fun main() {
    printSum(2, 3)
}

 

결과

5

주의할 점

함수의 반환형을 명시하지 않거나 return문을 생략하면 반환하는 값이 없는거 같지만 실제로는 Unit이라는 특별한 객체를 반환한다.


- 디폴트 매개변수

Java에는 디폴트 매개변수가 없지만 Kotlin에는 있다.

 

코드

fun sum(x:Int = 0, y:Int = 0) = x + y

fun main() {
    println(sum()) // x와 y에 0이 대입
    println(sum(5)) // x에 0, y에 0이 대입
    println(sum(5, 10)) // x에 5, y에 10이 대입
}

 

결과

0
5
15

- 매개변수 이름과 함께 호출하기

매개변수가 많이 있으면 어떤 인자를 어떤 매개변수에 전달하는지 헷갈리는 경우가 있다. 이를 방지하기 위해 매개변수의 이름과 함께 호출할 수 있다.

 

코드

fun cal(x:Int, y:Int, z:Int) = x + y*y + z*z*z

fun main() {
    println(cal(x = 1, y = 2, z = 3)) // x에 1, y에 2, z에 3 이라고 명시적으로 적어준다.
}

 

결과

32

- 가변인자 사용하기

매개변수 왼쪽에 vararg 키워드를 적으면 된다.

변수의 갯 수가 정해지지 않을 경우 가변인자를 사용한다.

 

코드

fun sum(vararg args: Int): Int {
    var result: Int = 0
    for(value in args) {
        result += value
    }

    return result
}

fun main() {
    println(sum(1, 2, 3, 4, 5))
}

 

결과

15

- 중간에 종료하기

함수 중간에 return문을 사용하여 함수를 종료할 수 있다.

 

코드

fun test() {
    println("test1")
    return
    println("test2")
}

fun main() {
    test()
}

 

결과

test1
Comments