Kotlin ‐ 이름 있는 인수 사용을 고려하라[Effective Kotlin Item 17] - thought-corner/Backend-PlayGround GitHub Wiki

이름 있는 인수 사용을 고려하라

  • 코드를 읽을 때 인수 의미가 명확하지 않은 경우가 있다.
// ❌ Bad
val text = (1..10).joinToString("|")
  • "|"는 잘 모르는 사람이라면 구분자 혹은 접두사로도 생각할 수 있다.
  • 이처럼 값의 의미가 불분명한 인수를 읽기 쉽고 명확하게 하는 가장 좋은 방법은 이름 있는 인수(named argument)를 사용하는 것이다.
// ⭕ Good
val text = (1..10).joinToString(separator = "|")
  • 이름 있는 인수를 사용하는 것이 더 신뢰할 수 있는 방법이다.
  • 변수의 이름은 개발자의 의도를 나타내지만 정확성을 보장하진 않는다.
  • 개발자가 실수로 변수를 잘못된 위치에 두거나 혹은 매개변수의 순서가 바뀌면 이름 있는 인수는 그런 상황 속에서 보호해 주지만 변수의 이름은 보호해 주지 못한다.
  • 그렇기 때문에 해당 값에 대해 이름이 잘 지정된 변수가 있는 경우에도 이름 있는 인수를 사용하는 것이 합리적이다.

이름 있는 인수(named argument)는 언제 사용하는 것이 좋은가?

  • 이름 있는 인수를 사용하면 코드가 길어지지만 두 가지 중요한 이점이 있다.
    • 어떤 값이 예상되는지를 이름으로 알 수 있다.
    • 순서에 영향을 받지 않으므로 더 안전하다.
  • 인수의 이름은 해당 함수를 사용하는 개발자뿐만 아니라 함수가 어떻게 사용되었는가 이해하고자 하는 다른 사람들에게도 중요하다.
// ❌ Bad
sleep(100)
// ⭕ Good
sleep(timeMillis = 100)
  • 디폴트 인수가 있는 매개변수는 거의 항상 이름을 붙여 사용해야 한다.
  • 디폴트 인수가 있는 선택적 매개변수는 필수 매개변수보다 더 자주 변경된다.
  • 따라서 선택적 매개변수는 이름 있는 인수를 사용하는 것이 좋다.
// ❌ Bad
sendEmail("[email protected]", "", "", false, "", "[email protected]")
// ⭕ Good
sendEmail(to = "[email protected]", bcc = "[email protected]")
  • 매개변수 타입이 서로 다른 경우에는 일반적으로 인수를 잘못된 위치에 놓는 것을 걱정할 필요가 없다.
  • 그러나 일부 매개변수의 타입이 같은 경우 잘못된 위치에 변수를 배정할 수 있다. 이런 경우 이름 있는 인수를 사용해 명확히 하는 것이 좋다.
// ⭕ Good
sendEmail(to = "[email protected]", bcc = "[email protected]")