1. 디폴트 인수 (Default Arguments)

  • 다양한 입력 조합을 처리하는 방법
    • Java : 메서드 오버로딩
    • Kotlin : 파라미터 기본 값.
// 디폴트 인수를 적용한 설계
fun formatPersonDisplay(
    name: String? = "Unknown",
    surname: String? = "User",
    age: Int? = 0
): String = "$name $surname ($age)"

2. 명명된 매개변수 (Named Parameters)

  • 파라미터가 증가할수록 각 인자의 의미 파악 어려움.
  • Kotlin 에서는
    • 호출에서 파라미터 이름을 명시 가능 가독성안정성 향상.
// 순서를 바꾸어도 이름이 명시되어 있어 안전함
println(formatPersonDisplay(age = 25, name = "Rati", surname = "Go"))
  • 인자 순서 오입력과 같은 Human error 감소.
  • 다만, Java 로 작성된 메서드의 경우, 해당 기능 사용 불가능할 수 있음.

3. 가변 인자 (vararg 매개변수)

  • 함수가 임의의 개수의 인자를 받아야 할 때 vararg 사용
  • 내부적으로는 배열로 처리
  • but 호출부에서는 콤마로 구분된 나열형 데이터를 그대로 전달 가능
fun printAllNames(vararg names: String) {
    for (name in names) {
        print("$name ")
    }
}
 
fun main() {
    printAllNames("Rati", "John", "Doe") // 가변 인자 활용
    
    val nameArray = arrayOf("Alice", "Bob")
    // 스프레드 연산자(*)를 사용하여 배열의 요소를 펼쳐서 전달
    printAllNames(*nameArray) 
}
  • 스프레드 연산자(*)
    • 이미 존재하는 배열을 vararg 파라미터로 넘길 때 사용
    • 배열의 얕은 복사가 일어나며 각 요소가 개별 인자로 풀려서 전달
  • 위치 제약
    • vararg 의 위치 관례 : 함수 파라미터 마지막에 위치
      • 명명된 매개변수 덕분에 중간에 위치해도 호출이 가능하나, 권장되지는 않음.