Kotlin 에서의 함수는 fun 키워드를 사용합니다.
fun double(x: Int):Int { return 2 * x }
함수는 일반적으로 아래와 같이 부를 수 있습니다.
val result = double(2)
.(dot) 을 사용하여 멤버 함수를 부를 수도 있습니다.
Math().double()
Default Arguments
Parameter 의 전달은 name: type 과 같이 사용하며, default value 를 가질 수 있습니다. 인자가 전달되지 않으면 default value 가 값에 사용되며 불필요한 함수 오버로딩을 막을 수 있습니다.
checkCustomer("Gildong") 와 같이 필요한 인자만 사용하여 함수 호출이 가능합니다.
fun checkCustomer(name: String, phone: String = "NA", age: Int = 30){ ... } checkCustomer("Gildong") // The default value phone = "NA" age = 30 is used
오버라이딩은 상위 메소드와 동일한 인자를 가지게 되므로, default value 를 사용하지 않을 때는 오버라이딩을 하여 default value 를 선언하지 않아야 합니다.
open class A { open fun foo(i: Int = 10) {...} } class B: A(){ override fun foo(i: Int) {...} // no default value allowed }
Name Arguments
함수를 호출할 때 parameter 의 이름을 사용하는데, 이를 Name Argument 라고 부릅니다.
fun reformat(str: String, normalizeCase: Boolean = true, upperCaseFirstLetter: Boolean = true, divideByCamelHumps: Boolean = false, wordSeparator: Char ' ') { ... }
위와 같은 함수가 있을때 아래와 같이 호출 할 수 있습니다.(위에서 default value 에 대해 설명한 것을 참고하시면 됩니다.)
reformat(str)
default value 가 없다면 reformat(str, true, true, false, ' ') 라고 불러야 할 것입니다. Name Argument 는 좀더 읽기 쉽게 아래와 같이 표현할 수 있도록 해줍니다.
reformat(str, normalizeCase = true, upperCaseFirstLetter = true, divideByCamelHumps = false, wordSeparator = '_')
모든 parameter 를 전달하지 않고 아래와 같이 사용가능합니다.
reformat(str, wordSeparator = '_')
단, str 인자가 positional argument 라 부르는데, positional argument는 항상 Name argument 보다 앞에 있어야 합니다.
즉, f(1, y = 2)는 가능하지만 f(x = 1, 2) 는 불가능합니다.
Unit-returning Functions
함수에서 return 값이 불필요하다면 return type을 Unit 으로 선언할 수 있습니다. Unit 은 명시적으로 반환할 필요가 없습니다.
return Unit 이나 return 은 선택적으로 할 수 있습니다. 또한 Unit 은 생략 가능합니다.(반환값을 사용하지 않는다면 Unit 이 생략되어 있는것과 같습니다.)
fun printHello(name: String?): Unit { if (name != null) println("Hello ${name}") else println("Hi there") }
Single-Expression functions
함수가 한줄로 표현 가능하다면 괄호는 생략 가능합니다. 또한 반환값도 컴파일러에 의해 유추될 수 있다면 생략 가능합니다.
fun double(x: Int): Int = x * 2
fun double(x: Int) = x * 2
Variable number of arguments(Varargs)
함수의 매개 변수는 vararg modifier로 표시될 수 있습니다.
fun <T> asList(vararg ts: T): List<T> { val result = ArrayList<T>() for(t in ts) // ts is an Array result.add(t) return result } val list = asList(1, 2, 3)
asList 함수에서 T형의 vararg 매개 변수가 T의 배열로 표시됩니다. 하나의 매개 변수만 vararg로 표시 될 수 있습니다.
'Language > Kotlin' 카테고리의 다른 글
[Kotlin] Range 사용하기 (0) | 2018.01.25 |
---|---|
[Kotlin] if, when, for, while 제어문 사용하기 (0) | 2018.01.04 |
[Kotlin] Class 두번째 이야기 (0) | 2017.12.22 |
[Kotlin] Class 사용하기 (0) | 2017.12.15 |
안드로이드 공식 개발언어 Kotlin (0) | 2017.12.01 |