Kotlin Koans - Introduction / Named arguments

이준영·2020년 12월 8일
0

Kotlin Koans

목록 보기
3/9
post-thumbnail

문제

fun joinOptions(options: Collection<String>) =
        options.joinToString(TODO())

Make the function joinOptions() return the list in a JSON format (e.g., "[a, b, c]") by specifying only two arguments.

Default and named arguments help to minimize the number of overloads and improve the readability of the function invocation. The library function joinToString is declared with default values for parameters:

fun joinToString(
    separator: String = ", ",
    prefix: String = "",
    postfix: String = "",
    /* ... */
): String

It can be called on a collection of Strings.

풀이

fun joinOptions(options: Collection<String>) =
        options.joinToString(prefix = "[", postfix = "]")

이번 문제는 문자열 컬렉션을 전달받아 JSON 형식의 문자열로 변환하도록 joinOption() 함수를 작성하는 것이었습니다. 주어진 라이브러리 함수인 joinToString() 함수를 사용하면 쉽게 해결할 수 있습니다.

JSON 형식은 요소간의 separator가 ", " 문자이고 prefix가 "[" 문자, postfix가 "]" 문자입니다.

주어진 라이브러리 함수인 joinToString() 함수는 컬렉션의 요소를 문자열로 연결해주는 함수입니다. 이 함수의 separator의 기본값은 동일하게 ", " 문자이지만 prefix와 postfix는 다른 문자로 기본값이 설정되어 있기 때문에 JSON 형식에 맞는 값을 인자로 넘겨줘야 합니다.

Kotlin은 파라미터의 기본값을 설정할 수 있도록 지원합니다. 인자들 중 앞에 나오는 인자의 값을 기본값으로 사용하기 위해 건너뛰고 뒤에 다른 인자들의 값을 넘겨주고 싶다면 인자의 이름을 명시해서 값을 넘겨줘야 합니다.

따라서 joinToString(prefix = "[", postfix = "]") 와 같이 함수에 인자를 전달하면 됩니다.

학습 내용

Function Usage

Default arguments

함수의 매개변수는 기본값을 가질 수 있는데, 이는 해당 인자를 건너뛸 때 사용할 수 있습니다. 그리고 기본값은 타입 뒤에 = 을 사용하여 정의할 수 있습니다.

fun read(
    b: Array<Byte>, 
    off: Int = 0, 
    len: Int = b.size,
) { /*...*/ }

만약 기본값이 있는 매개변수가 기본값이 없는 매개변수보다 앞에 위치한다면, 기본값은 named arguments를 사용하여 함수를 호출할 때만 사용할 수 있습니다.

fun foo(
    bar: Int = 0, 
    baz: Int,
) { /*...*/ }

foo(baz = 1) // The default value bar = 0 is used

Named arguments

fun reformat(
    str: String,
    normalizeCase: Boolean = true,
    upperCaseFirstLetter: Boolean = true,
    divideByCamelHumps: Boolean = false,
    wordSeparator: Char = ' ',
) {
/*...*/
}

기본값을 사용할 인자는 건너뛸 수 있습니다.

reformat('This is a long String!')

기본값을 사용할 인자는 건너뛸 수 있는데, 만약 하나의 인자를 건너뛴 이후에 인자의 값을 할당하려면 반드시 인자의 이름을 지정해야 합니다.

reformat('This is a short String!', upperCaseFirstLetter = false, wordSeparator = '_')

정리하며

Kotlin은 Java와 다르게 매개변수의 기본값을 설정할 수 있습니다. 이는 함수의 오버로딩 횟수를 줄이는 데 큰 도움이 됩니다. 기본값이 설정된 인자는 건너뛸 수 있지만, 만약 건너뛴 후 다른 인자의 값을 지정할 경우에는 인자의 이름을 지정하고 값을 전달해야 합니다.

Kotlin에 대한 추가적인 내용은 추후 Kotlin Reference를 정리하면서 좀 더 상세히 알아보도록 하겠습니다.

참고 자료

Kotlin Referenece - Functions and Lambdas / Functions

profile
growing up 🐥

0개의 댓글