[Kotlin] Default Argument, Named Argument

문승연·2023년 11월 1일
0

Kotlin 기본

목록 보기
9/11

시작하기에 앞서

그 동안 취준한다고 알고리즘 공부, 자소서, 그리고 팀 단위 사이드 프로젝트에 집중하다보니 블로그 작성에 소홀했다...

깊이 반성하면서 앞으로는 안드로이드 관련 내용 뿐만 아니라 알고리즘 공부 관련 내용이나 사이드 프로젝트하면서 느낀 점들도 조금씩 올려보고자 한다.

Default Argument란?

우리가 프로그래밍을 하다 보면 특정 변수들을 넘겨주기 위해서 클래스나 메소드를 생성하고 활용해야하는 경우가 있다.

하지만 모든 상황에서 개발자가 일일이 변수를 할당해서 넘겨주는 것은 상당히 비효율적이고 귀찮은 작업이다.

코틀린에서는 Default Argument를 설계해서 이러한 귀찮음을 방지할 수 있다.

fun main(args: Array<String>) {
	foo('x', 2)
}

fun foo(letter: Char = 'a', number: Int = 15) {
	repeat(number) { print(letter) }
}
// answer
xx

foo 함수는 letternumber 라는 2개의 인자를 받아 작동하는 함수이다. 위 예시에서는 letternumber 에 각각 'x', 2 라는 값을 넘겨주었다.

하지만 만약 두 개의 값 중 하나라도 넘겨주지 않는다면? 혹은 둘 다 넘겨주지 않는다면? 필요한 인자가 넘어오지 않았으니 오류가 발생할까?

답은 그렇지 않다.

fun main(args: Array<String>) {
	foo()
}
// answer
aaaaaaaaaaaaaaa

아무 인자도 넘겨주지 않고 foo() 를 호출하면 aaaaaaaaaaaaaaa 라는 값을 출력한다. 그 이유는 Default Argument로 letternumber에 기본값을 지정해놨기 때문이다.

따라서 letter에 아무런 값도 넘어오지 않으면 letter = 'a'가 되고 마찬가지로 number에 아무런 값도 넘어오지 않으면 number = 15가 되는 것이다.

Named Argument란?

Default Argument에 대해서는 어렵지 않게 이해했다. 그렇다면 Named Argument란 무엇일까?

먼저 아래와 같은 예시에 대해서 생각해보자.

fun displayBorder(character: Char = '=', length: Int = 15) {
    for (i in 1..length) {
        print(character)
    }
}

fun main(args: Array<String>) {
    displayBorder(5)
}

displayBorder 함수는 character, length 라는 2개의 인자를 필요로 하고 각각 Default Argument가 설정되어있다. 그렇다면 displayBorder(5) 를 호출하면 자동으로 character 값은 '='으로 인지하고 함수가 실행될까?

답은 그렇지 않다. 해당 함수 호출은 에러를 발생시킨다.

그 이유는 displayBorder의 첫번째 인자가 character 이기 때문에 컴파일러에서 우리가 character 인자에 5라는 Int형 변수를 넘겨줬다고 판단하기 때문이다.

이런 문제를 해결하기 위해서는 5라는 변수를 characeter가 아닌 length라는 인자로 넘긴 것이라고 컴파일러에게 알려줘야한다.

이 역할을 수행하기 위해 나온 개념이 바로 Named Argument이다.

fun displayBorder(character: Char = '=', length: Int = 15) {
    for (i in 1..length) {
        print(character)
    }
}

fun main(args: Array<String>) {
    displayBorder(length = 5)
}
// answer
=====

main에서 호출한 displayBorder 함수에서 length = 5 라고 정확히 명시해주었기 때문에 컴파일러에서 length 에는 5를 받고 자동으로 character 에는 Default 값인 '='를 사용해서 함수를 수행한다.

출처)
1. Kotlin Default and Named Arguments

profile
"비몽(Bemong)"이라는 앱을 개발 및 운영 중인 안드로이드 개발자입니다.

0개의 댓글