Android 앱/Kotlin Language

kotlin 코틀린 - 함수 function

arvigoes 2020. 2. 28. 23:09

함수 function

함수는 특정한 동작을 하거나 원하는 결과값을 연산하는데 사용하는 기능입니다.

지금까지 작업하는데 사용했던 main() 도 함수 이고, println() 또한 함수 입니다.

 

간단한 곱셈함수(mul) 를 만들어 보겠습니다.

함수를 선언하기 위해서는 변수를 선언할때 사용한 var, val 처럼 함수(function) 을 의미하는 키워드 fun 을 사용해야 합니다.

fun mul(numA:Int, numB:Int): Int {
    return numA * numB
}

fun main() {
    println(mul(3, 5))
}

결과를 한번 확인해 보도록 하겠습니다.

main에서 호출도 잘 되네요

결과

함수를 만들어 봤으니 이제 함수를 선언할때 사용한 코드를 한번 자세히 보도록 하겠습니다.

함수 선언 구성

fun 키워드가 제일 처음 오고 그다음 함수 이름이 옵니다. 그다음 함수 실행시 입력으로 받을 변수 리스트가 선언 됩니다. 입력이 필요없다면 없어도 됩니다. 그리고 실행결과를 반환 해야 한다면 반환형을 적어 줍니다.

그리고 중괄호 { } 를 통해 함수의 시작과 끝을 나타냅니다.

간단한 여러 함수들을 만들어 보시길 바랍니다.

함수는 프로그래밍의 기본으로 많은 곳에 사용하게 될 것입니다.

 

지금까지 사용해 본 함수는 총 3가지 (main, println, mul) 이 3가지의 함수에는 차이점이 있습니다.

println 은 우리가 함수로 만든적도 없는데 사용 할 수 있습니다.

화면에 출력을 해 주는 함수로 시스템에서 제공하는 함수 입니다.

많은 언어딜이 이런 기본함수 등을 제공 하고 있습니다.

모든 함수를 직접제작해야 한다면 프로그램 하나 만들기가 어마어마하게 힘들테니까요

 

그리고 main함수는 한 어플리케이션 한개만 존재 할 수 있고, 꼭 존재 해야 합니다.

물론 다른 함수도 같은이름, 같은 파라미터로는 한개의 함수만 존재 할 수 있습니다.

그러나 main 처럼 꼭 있어야 하는 함수는 없습니다. (상황에 따라 만들어야 하는경우는 있지만요)

main 함수를 entry point 라 부르며 프로그램의 진입점이라고 합니다.

프로그램이 수행될때 여기서부터 시작이 된다고 프로그래머와 OS( 또는 VM) 과 미리 약속이 되어 있는 규약 입니다.

main 에도 몇가지 형태가 있는데 이는 나중에 다뤄 보도록 하겠습니다.

지금은 main 함수는 꼭 있어야 한다만 알고 가는것이 중요합니다.

 

3번째 사용자 정의 함수 mul.

필요에 따라 만들어서 사용하는 함수 입니다.

위에서 말한것처럼 같은 이름의 함수를 만들면 에러가 발생합니다.

같은이름 에 파라미터가 다른경우를 overload 라 부르는데 이는 루트 파일에서는 불가능하니 지금단계에서는 

이름 중복만 신경써서 함수를 만들면 됩니다.

 

단일 표현식 함수 (single-expression function)

fun mul(numA:Int, numB:Int): Int {
    return numA * numB
}

fun multi(numA:Int, numB:Int) = numA * numB

fun main() {
    println(mul(3, 5))
    println(multi(3, 6))
}

기존에 만든 함수를 단일 표현식 으로 변경해 보았습니다.

간단한 함수의 경우 단일 표현식이 훨씬 간단해 보이네요. 반환값도 추론을 통해 자동으로 결정이 되어 편하네요

 

코틀린은 객체지향 뿐만 아니라 함수형 프로그래밍 패러다임 까지 품고 있어서 괭장히 다이나믹한 언어 입니다.

함수를 mul 처럼 절차지향형 언어의 함수로 본다면 함수형 프로그래밍에서 혼란이 많이 격을 수 있습니다.

multi 함수처럼 자료형이 결정된 별수라는 개념으로 접근 하는 것이 좀더 혼란을 막고 함수형 언어의 이해에 도움이 될 것입니다.