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
'Back-End (web)' 카테고리의 다른 글
[kotlin] Smart cast to 'Type' is impossible, because 'xxx' is a mutable property that could have been changed by this time. (0) | 2019.01.19 |
---|---|
[TEST] spock test example (0) | 2019.01.11 |
[Spock][Error] CannotCreateMockException (0) | 2019.01.03 |
[Kotlin] List, MutableList (0) | 2018.12.31 |
window gradle 설치 (0) | 2018.11.05 |
댓글