본문 바로가기
Back-End (web)

[Kotlin] Default argument (디폴트 매개변수)

by 햄과함께 2019. 1. 6.
320x100

문자열 a, b를 입력받아 두 문자열을 합치는 함수로 예를 들어보자.

만약 a, b를 입력하지 않는 경우 각각 "a", "b" 문자열로 대체된다고 하자.


1
2
3
4
5
6
7
8
9
10
11
12
// java
String getString(String a, String b){
    return a+b;
}
    
String getString(String a){
    return getString(a + "b");
}
    
String getString(){
    return getString("a" + "b");
}
cs

JAVA에서는 default argument 를 지원하지 않아서 오버로딩 시 위와 같이 함수를 다 만들어줘야 한다.


1
2
/* kotlin */
fun getString(a:String = "a", b:String = "b") = a.plus(b) // same "a + b"
cs

Kotlin에서는 default argument를 지원하므로 위와 같이 함수 하나로 요구사항을 충족시킬 수 있다.


1
2
3
4
5
fun getString(a:String = "a", b:String = "b") = a.plus(b) // same "a + b"
fun main(args: Array<String>) {
    println(getString("change A"))
    // result : "change Ab"
}
cs

만든 함수를 사용할 때는 위와 같이 사용하면 된다.

만약 매개변수를 하나 넣었다면 a문자열은 입력한 매개변수 문자열로 입력되고 입력받지 않은 문자열 b는 "b"가 된다.


1
2
3
4
5
6
fun getString(a:String = "a", b:String = "b") = a.plus(b) // same "a + b"
fun main(args: Array<String>) {
    println(getString("a","change B"))
    // result : "achange B"
}
cs

디폴트 매개변수는 매개변수의 순서에 영향을 받는다.

즉, 위와 같이 매개변수의 b만 다른 문자열로 입력을 주고 싶은 경우에도 a 매개변수를 입력해줘야 한다.


1
2
3
4
5
fun getString(a:String = "a", b:String = "b") = a.plus(b) // same "a + b"
fun main(args: Array<String>) {
    println(getString(b = "change B"))
    // result : "achange B"
}
cs

kotlin에서는 이를 효율적으로 처리할 수 있게 호출 시 매개변수에 이름을 붙일 수 있다. (3번째 줄)

따라서 사용할 수 있으므로 생성자를 만들때에도 생성자 빌더 없이 Optional 매개변수를 쉽게 세팅할 수 있다.

320x100

댓글