문제

Imagine you have several overloads of 'foo()' in Java:

public String foo(String name, int number, boolean toUpperCase) {
    return (toUpperCase ? name.toUpperCase() : name) + number;
}
public String foo(String name, int number) {
    return foo(name, number, false);
}
public String foo(String name, boolean toUpperCase) {
    return foo(name, 42, toUpperCase);
}
public String foo(String name) {
    return foo(name, 42);
}

You can replace all these Java overloads with one function in Kotlin. Change the declaration of the foo function in a way that makes the code using foo compile. Use default and named arguments.

fun foo(name: String, number: Int = 42, toUpperCase: Boolean = false) =
        (if (toUpperCase) name.uppercase() else name) + number

fun useFoo() = listOf(
        foo("a"),
        foo("b", number = 1),
        foo("c", toUpperCase = true),
        foo(name = "d", number = 2, toUpperCase = true)
)

풀이

자바와 달리 코틀린은 함수에 기본형 매개변수를 넣어줄 수 있다.

자바는 매개변수를 각각 다르게 주고싶은경우 오버로딩을 해서 메소드를 재정의 해줘야 하지만,

코틀린은 기본 인자를 지원하기 때문에 메소드 하나만 정의하더라도 기본값을 설정해 준다면 1개의 메소드를 가지고 여러개의 메소드로 이용할 수 있다.

profile
개발하는 다람쥐

0개의 댓글