Kotlin Lecture 002 - Functions | 일곱번째 손님
development

기본 파라미터 값 과 정의된 인수 (Default Parameter Values and Named Arguments)

fun printMessage(message: String): Unit {                               // 1
    println(message)
}

fun printMessageWithPrefix(message: String, prefix: String = "Info") {  // 2
    println("[$prefix] $message")
}

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

fun multiply(x: Int, y: Int) = x * y                                    // 4

fun main() {
    printMessage("Hello")                                               // 5                    
    printMessageWithPrefix("Hello", "Log")                              // 6
    printMessageWithPrefix("Hello")                                     // 7
    printMessageWithPrefix(prefix = "Log", message = "Hello")           // 8
    println(sum(1, 2))                                                  // 9
}

  1. 파라미터로 String을 가진 함수이며 리턴값은 Unit 입니다. (Java 에서 Void와 비슷합니다)
  2. 함수의 2번째 파라미터는 기본값 “Info”를 가지고 있습니다. 리턴값은 생략되어 Unit과 동일합니다.
  3. 함수의 리턴값은 Int (Integer) 입니다.
  4. Expression 함수로 리턴값은 Int 입니다.
  5. 인수 “Hello”를 함께 1번 함수를 호출했습니다.
  6. 2번 함수의 파라미터를 테스트 합니다.
  7. 2번 함수의 두번째 파라미터에 기본값이 존재하므로 두번째 파라미터를 생략했습니다.
  8. 두개의 파라미터 모두에 값을 변경했습니다.
  9. 3번 함수의 덧셈 결과를 요청했습니다.

삽입함수 (Infix Functions)

fun main() {

    infix fun Int.times(str: String) = str.repeat(this)        // 1
    println(2 times "Bye ")                                    // 2

    val pair = "Ferrari" to "Katrina"                          // 3
    println(pair)

    infix fun String.onto(other: String) = Pair(this, other)   // 4
    val myPair = "McLaren" onto "Lucas"
    println(myPair)

    val sophia = Person("Sophia")
    val claudia = Person("Claudia")
    sophia likes claudia                                       // 5
    println(sophia.likedPeople.get(0).name)                    // 7
}

class Person(val name: String) {
    val likedPeople = mutableListOf<Person>()
    infix fun likes(other: Person) { likedPeople.add(other) }  // 6
}

1.

  1. 삽입함수를 호출한다.
  2. Pair 함수를 생성한다.
  3. Pair 함수를 활용하는 삽입함수를 생성한다.
  4. Person 클래스에 정의된 내용대로 likesPeople을 추가한다.
  5. likes를 호출하면 likedPeople에 그 내역을 추가한다.
  6. 저장된 Person을 확인한다.

연산자 함수 (Operator Functions)

이미 있는 연산자를 새로 정의하여 업그레이드 시킬 수 있다.

operator fun Int.times(str: String) = str.repeat(this)       // 1
println(2 * "Bye ")                                          // 2

operator fun String.get(range: IntRange) = substring(range)  // 3
val str = "Always forgive your enemies; nothing annoys them so much."
println(str[0..14])
  1. Int형에 String의 repeat함수를 적용하여 반복시킨다.
  2. times와 동일하게 * 를 매칭시켜 사용한다.
  3. substring에 쉽게 접근 할 수 있게 연산자를 변경하였다.
  4. get() 연산자는 []로 대체할 수 있다.

가변인자(vararg) 와 함께 사용하는 함수 (Functions with vararg Parameters)

Java에서는 … 를 사용하여 가변인자를 표기했지만 Kotlin에서는 ..를 연산자에서 사용하고 있어서 vararg를 사용한다. 변수이름에 vararg라고 선언하고 사용하면 된다.

fun printAll(vararg messages: String) {                            // 1
    for (m in messages) println(m)
}
printAll("Hello", "Hallo", "Salut", "Hola", "你好")                 // 2

fun printAllWithPrefix(vararg messages: String, prefix: String) {  // 3
    for (m in messages) println(prefix + m)
}
printAllWithPrefix(
    "Hello", "Hallo", "Salut", "Hola", "你好",
    prefix = "Greeting: "                                          // 4
)
  1. vararg로 값을 받으면 내부에 그대로 전달한다.
  2. String 가변인자를 받아서 프린트 한다.
  3. 두개의 파라미터중에 하나에 가변인자를 사용하여 출력한다.
  4. prefix에는 고정된 값을, messages에는 가변인자를 입력하였다.

https://play.kotlinlang.org/byExample/01_introduction/02_Functions