Language/kotlin

함수 다루기

kimjingyu 2023. 5. 18. 15:16
728x90

함수 선언 문법

  • 함수 구조
    • [접근 지시어] [함수를 의미하는 키워드] [함수 이름] [함수의 매개변수] [함수의 반환 타입]
      • 접근 지시어: public은 생략 가능
      • 함수를 의미하는 키워드: fun
      • 함수의 매개변수: [매개변수명: 타입]
  • 함수가 하나의 결과값이면 block 대신 = 사용이 가능하다.
    • 이를 한줄로 변경이 가능하다.
    • = 을 사용하는 경우에는 반환 타입 생략이 가능하다.
  • block { } 을 사용하는 경우에는 반환 타입이 Unit이 아니면, 명시적으로 작성해줘야 한다.
// 1. 함수 선언 문법 - 두 정수를 받아서 더 큰 정수를 반환
fun max(a: Int, b: Int) = if (a > b) a else b
  • 함수의 위치
    • 클래스 안
    • 파일 최상단
    • 한 파일 안에 여러 함수들이 있을 수 있음

default parameter

  • 자바의 오버로딩 기능
  • 밖에서 파라미터를 넣어주지 않으면 기본값을 사용한다.
// 2. 주어진 문자열을 N번 출력 - 오버로딩 -> default parameter
fun repeat(str: String, num: Int = 3, useNewLine: Boolean = true) {
    for (i in 1..num) {
        if (useNewLine) {
            println(str)
        } else {
            print(str)
        }
    }
}

named argument (parameter)

  • repeat를 호출할 때, num은 3을 그대로쓰고, useNewLine은 false를 쓰고싶을 때
  • 매개변수 이름을 통해서 직접 지정한다.
  • 지정되지 않은 매개변수는 기본값을 사용한다.
    • builder를 직접 만들지 않고 builder의 장점을 가지게 된다.
repeat("안녕하세요", useNewLine = false)
// 안녕하세요안녕하세요안녕하세요
  • 코틀린에서 자바 함수를 가져다 사용할 때는 named argument를 사용할 수 없다.
val java = Lec08Main()
java.repeat("안녕하세요")

같은 타입의 여러 파라미터 받기 (가변인자)

  • 사용시
    • 배열을 직접 넣거나, comma를 이용하여 여러 파라미터를 넣어준다.
    • 배열을 바로 넣는 대신, 스프레드 연산자를 붙여주어야 한다.
// 4. 같은 타입의 여러 파라미터 받기 (가변인자)
    val arr = arrayOf("A", "B", "C")
    java.printAll(*arr)
    java.printAll("A", "B", "C")

    printAll(*arr)
    printAll("A", "B", "C")
  • 선언시
    • 자바의 ...을 타입 뒤에 쓰는 대신에 제일 앞에 vararg를 적어준다.
// 4. 가변인자
fun printAll(vararg strings: String) {
    for (str in strings) {
        println(str)
    }
}
728x90