[코틀린인액션] 코틀린에서의 디폴트 파라미터 자바에서도 사용해보기

디폴트 파라미터 사용

  • joinToString 함수에서 디폴트 값을 가지는 파라미터 선언이 가능함
    fun <T> joinToString(
        collection: Collection<T>,
        separator: String = ", ",
        prefix: String = "",
        postfix: String = ""
    ): String {
        val result = StringBuilder(prefix)
        for ((index, element) in collection.withIndex()) {
            if (index > 0) result.append(separator)
            result.append(element)
        }
        result.append(postfix)
        return result.toString()
    }
    • 이런식으로
    arrayListOf(1, 2, 3).joinToString("; ")
    • 모든 파라미터를 제공하지 않더라도 사용이 가능해진다.
    • 하지만 자바에서는 디폴트 파라미터는 직접적으로 사용할 수 없다고 합니다.
    • 한번 사용해 보겟슴다
    public class Java {
        public static void main(String[] args) {
            MainKt.joinToString(List.of("Kotlin", "Java", "Scala"), ",");
        }
    }
    • 결과
    • 디폴트 파라미터를 직접적으로 사용할 수 없긴하다.
      • 이는 JDK 6 와의 호환을 위하여 별도로 설정된 정책이라고 한다.
  • 하지만 @JvmOverloads 를 사용하면 코틀린 컴파일러가 자동으로 여러 오버로딩된 자바 메서드를 생성한다고 한다.
    String joinToString(Collection<T> collection, String separator, String prefix, String postfix);
    String joinToString(Collection<T> collection, String separator, String prefix);
    String joinToString(Collection<T> collection, String separator);
    String joinToString(Collection<T> collection);
    • 이런식으로 컴파일시 생성된다고 한다.
    • 컴파일된 코드를 까보려고했는데, 디컴파일러에서 다 보여주진 않아서 실패..

장점

  1. 명시적으로 오버로딩된 메서드가 적어짐
  1. 필요한 인자만 명시해서 함수 호출가능
  1. 함수 호출에 간결해진다

Uploaded by N2T