디폴트 파라미터 사용
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);
- 이런식으로 컴파일시 생성된다고 한다.
- 컴파일된 코드를 까보려고했는데, 디컴파일러에서 다 보여주진 않아서 실패..
장점
- 명시적으로 오버로딩된 메서드가 적어짐
- 필요한 인자만 명시해서 함수 호출가능
- 함수 호출에 간결해진다
Uploaded by N2T
'코틀린 > 코틀린인액션' 카테고리의 다른 글
[코틀린인액션] 코틀린에서의 예외? (0) | 2023.11.29 |
---|---|
[코틀린인액션] 코틀린에서 컬렉션 만들기 (0) | 2023.11.29 |
[코틀린인액션] 확장함수 (0) | 2023.11.29 |
[코틀린인액션]`in` 의 사용 (0) | 2023.11.29 |
[코틀린인액션] 맵 과 리스트 이터레이션 (0) | 2023.11.26 |