본문으로 바로가기

함수 선언 문법

  • public 접근지시어는 생략 가능
  • fun : 함수를 의미함
  • max : 함수 이름
  • (a: Int, b: Int) 매개변수 목록 표기
  • : Int 반환타입 표기 (Unit - void는 생략가능)
    • 반환값이 하나일 경우 중괄호 생략 가능
    • 사용시 모든 조건의 결과가 Int를 반환하므로 반환 타입까지 생략 가능
    • 블럭{}을 사용할 경우 Unit 반환이 아니라면 반환 타입을 명시해 줘야한다.
  • 함수 선언 위치
    • 함수는 클래스 파일안에 있을 수도 있고 파일 최상단에 있을 수도 있음
    • 한 파일(.kt)에 여러 함수들이 존재 할 수 있음
fun max(a: Int, b: Int): Int {
    return if (a > b) a else b // expression
}
// 개선 
fun max(a: Int, b: Int) = if (a > b) a else b 

default parameter

  • 함수 호출시 파라미터를 넣어주지 않는 경우 메서드에서 지정한 기본값을 사용
  • Java의 오버로딩 메서드와 유사
fun repeat(
    str: String,
    num: Int = 3,  
    useNewLine: Boolean = true) { // 기본값 설정

    for(i in 1..num) {
        if (useNewLine) {
            println(str)
        } else {
            print(str)
        }
    }
}

fun main(){
    repeat("Hello World", 3, true) 
    repeat("Hello World")   // default parameter
} 

named argument

  • 함수 호출 시 매개변수 이름을 통해 직접 지정
  • 지정되지 않은 매개변수는 기본값을 사용
  • builder를 직접 만들지 않고 builder 의 장점을 가져갈 수 있다.
    • 동일 타입의 파라미터가 있을때 순서가 실수로 달라져도 컴파일단에서 오류를 잡을 수 없음
    • named argument 를 사용할 경우 이러한 실수를 방지할 수 있다.
  • Kotlin에서 Java함수를 사용할 때는 named argument 사용이 불가능하다.
    • Java가 메서드를 바이트코드로 변환할때 파라미터 이름을 보존하지 않기 때문.
fun main(){
    repeat("Hello World", 3, true)

        // named argument
    repeat("Hello World", useNewLine = false)
    printNameAndGender("Jihun Park","M")
    printNameAndGender(gender = "M", name="Jihun Park") // builder 처럼 사용 가능
}

fun printNameAndGender(name:String, gender: String){
    println(name)
    println(gender)
}

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

  • Kotlin : vararg 를 사용하여 가변인자 표기
    • 호출시 배열을 넣을 경우 spread 연산자 * 사용
  • Java : 타입… 으로 가변인자 표기
    • 호출시 배열을 직접 넣거나 콤마 사용
/* Kotlin */
val array = arrayOf("A","B","C")
printAll(*array)
printAll("A","B","C")

fun printAll(vararg strings:String){
    for (str in strings){
        print(str)
    }
}

/* java */
String[] strings = new String[]{"A","B","C"};
printAll(strings);
printAll("A","B","C");

public static void printAll(String... strings) {
    for (String string : strings) {
        System.out.println("string = " + string);
    }
}

Reference

 

자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide) - 인프런 | 강의

이 강의를 통해 Kotlin 언어의 특성과 배경, 문법과 동작 원리, 사용 용례, Java와 Kotlin을 함께 사용할 때에 주의할 점 등을 배울 수 있습니다., - 강의 소개 | 인프런...

www.inflearn.com