본문 바로가기
  • 개발하는 곰돌이
Programming Language/Kotlin & Java

[Kotlin] 기본 매개변수(Default parameter)와 명명된 인자(Named Arguments)

by 개발하는 곰돌이 2022. 12. 27.

기본 매개변수(Default Parameter)

Kotlin 기본 문법 1 : 개요 및 변수와 함수

Default Parameter는 이전에 함수에 대해 정리할 때 짧게 정리한 적이 있다. Kotlin에서는 함수의 파라미터에 기본값을 지정하여 함수 호출 시 기본값이 지정된 파라미터를 생략하면 해당 기본값을 사용하게 만들 수 있다. 이러한 Default Parameter는 함수의 불필요한 오버로딩을 줄일 수 있다는 장점이 있다. 예를 들어 두 정수의 합을 계산하는 함수가 있다. 이 때, isAbsolute라는 파라미터를 추가하여 true를 전달하면 두 정수의 합의 절대값을 반환하게 만들고 싶을 경우에 Java에서는 다음과 같이 함수를 오버로딩해서 구현해야 했다.

// Java
public int add(int a, int b, boolean isAbsolute) {
    if (isAbsolute) {
        return Math.abs(a + b);
    } else {
        return a + b;
    }
}

public int add(int a, int b) {
    return add(a, b, false);
}

이러한 경우엔 거의 같은 동작을 수행하는 함수를 작성할 때 그만큼 여러개의 메소드를 작성해야하기 때문에 코드가 길어지는 단점이 있다. 하지만 Kotlin에서는 Default Parameter를 이용하여 위와 같은 함수를 아래와 같이 하나로 만들 수 있다.

fun add(a: Int, b: Int, isAbsolute: Boolean = false) = if (isAbsolute) abs(a + b) else a + b

이렇게 Default Parameter를 이용하면 불필요한 오버로딩을 없애 코드의 길이를 줄일 수 있다는 장점이 있다.


명명된 인자(Named Arguments)

Default Parameter가 여러개 지정된 함수가 있을 때 특정 파라미터에만 값을 전달해야할 경우가 있을 수 있다. 기본적으로 파라미터는 앞에서 차례대로 입력해야하지만 Kotlin에서는 전달할 파라미터를 명시적으로 지정할 수 있다. 예를 들어 다음과 같이 \(x^y\)을 계산하는데 \(x\)의 디폴트값이 2인 함수가 있는 경우가 있다.

fun pow(x: Int = 2, y: Int): Int {
    var result = x
    for (i in 1 until y) {
        result *= x
    }
    
    return result
}

이 함수를 호출할 때 \(x\)에 2라는 디폴트값이 지정되어 있다고 파라미터를 하나만 전달하면 다음과 같이 에러가 발생한다.

분명히 \(x\)에는 기본값 2가 있어서 \(y\)에 10을 전달하려고 했는데, 10이 \(x\)에 전달되고 \(y\)에는 아무런 값이 전달되지 않은 것이다. 이런 경우에 Named Arguments를 사용할 수 있다. Named Arguments를 사용하면 전달하고자 하는 파라미터를 명시하여 값을 전달하면 해당 파라미터에 값이 전달되어 함수가 정상적으로 작동하게 된다.

이러한 Named Arguments는 클래스의 생성자를 호출할 때 빌더 패턴처럼 사용할 수도 있다.

 

Kotlin과 Java를 병용하는 프로젝트에서 주의할 점은 Kotlin에서 Java 함수를 호출할 때는 Named Arguments를 사용할 수 없다는 점이다.

댓글