BackEnd/Kotlin

8강. 코틀린에서 함수를 다루는 방법

hanseom 2024. 2. 21. 20:00
반응형
  1. 함수 선언 문법
  2. default parameter
  3. named argument
  4. 같은 타입의 여러 파라미터 받기 (가변인자)

 

함수 선언 문법

  다음은 두 정수를 받아 더 큰 정수를 반환하는 Java 코드입니다.

  public int max(int a, int b) {
    if (a > b) {
      return a;
    }
    return b;
  }

 

  Kotlin으로 작성하면 다음과 같습니다.

fun max(a: Int, b: Int): Int {
    return if (a > b) {
        a
    } else {
        b
    }
}
  • 접근 지시어, public은 생략 가능합니다.
  • fun: 함수를 의미하는 키워드입니다.
  • max: 함수 이름입니다.
  • (a: Int, b: Int): 함수의 파라미터는 파라미터명: 타입 입니다.
  • : Int: 함수의 반환 타입입니다. (Unit인 경우 생략 가능합니다.)

 

  함수가 하나의 결과값이면 block { } 대신 = 사용이 가능합니다.

fun max(a: Int, b: Int): Int =
    // if - else는 expression
    if (a > b) {
        a
    } else {
        b
    }

 

  위의 코드는 한 줄로 변경도 가능합니다.

fun max(a: Int, b: Int): Int = if (a > b) a else b

 

default parameter

  default parameter는 파라미터의 기본값을 지정할 때 사용합니다.

 

  다음은 주어진 문자열을 N번 출력하는 Java 코드 입니다.

  public void repeat(String str, int num, boolean useNewLine) {
    for (int i = 1; i <= num; i++) {
      if (useNewLine) {
        System.out.println(str);
      } else {
        System.out.print(str);
      }
    }
  }

 

  useNewLine 이나 num 의 기본 값을 주고 싶은 경우, Java에서는 다음과 같이 오버로딩으로 구현해야 합니다.

  public void repeat(String str, int num) {
    repeat(str, num, true);
  }

  public void repeat(String str) {
    repeat(str, 3, true);
  }

 

  Kotlin 에서는 다음과 같이 default parameter를 지정할 수 있습니다. 물론 Kotlin에도 Java와 동일하게 오버로딩 기능은 있습니다.

fun repeat(
    str: String,
    num: Int = 3,
    useNewLine: Boolean = true
) {
    for (i in 1..num) {
        if (useNewLine) {
            println(str)
        } else {
            print(str)
        }
    }
}

 

named argument

  named argument는 다음 코드와 같이, 파라미터의 이름을 지정하여 함수를 호출할 때 사용합니다. 파라미터가 많은 함수가 존재할 때 값을 넣어 줄 파라미터는 named argument를 사용하고, 지정되지 않은 파라미터는 기본 값을 사용합니다.

fun main() {
    repeat("hello", useNewLine = false)
}

 

  named argument는 builder의 장점을 가집니다. 단, Kotlin에서 Java 함수를 가져다 사용할 때는 named argument를 사용할 수 없습니다.

 

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

  다음은 문자열을 N개 받아 출력하는 Java 코드입니다.

  public static void main(String[] args) {
    String[] array = new String[]{"A", "B", "C"};
    printAll(array);

    printAll("A", "B", "C");
  }

  public static void printAll(String... strings) {
    for (String str : strings) {
      System.out.println(str);
    }
  }

 

  Kotlin으로 구현하면 다음과 같습니다.

fun main() {
    printAll("a", "b", "c")
    val array = arrayOf("A", "B", "C")
    printAll(*array)
}

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

 

  • Kotlin에서 가변인자 파라미터를 만들어 줄 때 ... 대신 vararg을 사용합니다. 
  • Kotlin에서 배열을 가변인자에 넣어줄 때는 별표(*)를 붙여줘야 합니다. 별표(*)는 spread 연산자로 배열 안에 있는 것들을 콤마(,)를 쓰는 것처럼 꺼내주는 역할을 합니다.

 

감사합니다.

반응형