728x90
1. 기본 사용법
함수를 오버로드하는 경우, 같은 함수를 여러 개 구현하는 대신 default arguments를 사용할 수 있습니다.
// instead of:
fun play(toy: Toy){ ... }
fun play(){
play(SqueakyToy)
}
// use default arguments:
fun play(toy: Toy = SqueakyToy)
fun startPlaying() {
play(toy = Stick)
play() // toy = SqueakyToy
}
default argument는 생성자에도 적용됩니다.
class Doggo(
val name: String,
val rating: Int = 11
)
val goodDoggo = Doggo(name = "Tofu")
val veryGoodDoggo = Doggo(name = "Tofu", rating = 12)
2. 자바와 상호 운용성
자바에선 기본적으로 기본값에 대한 오버로드를 인식하지 못합니다. 컴파일러에게 오버로드 메서드를 생성하도록 하려면 Kotlin 함수에 @JvmOverloads 어노테이션을 사용하면 됩니다.
// kotlin
fun play(toy: Toy = SqueakyToy) {... }
// java
DoggoKt.play(DoggoKt.getSqueakyToy());
DoggoKt.play(); // 에러 발생
============================================
@JvmOverloads
fun play(toy: Toy = SqueakyToy) {… }
3. 상속과 Default argument
함수를 재정의하는 경우, 매개변수에 대한 default argument를 설정하면 에러가 발생합니다.
open class Doggo(
val name: String,
val rating: Int = 11
) {
open fun play(toy: Toy = SqueakyToy) {...}
}
class PlayfulDoggo(val playfulness: Int, name: String, rating: Int) : Doggo(name, rating) {
// error: An overriding function is not allowed to specify default values for its parameters
override fun play(toy: Toy = Stick) { }
}
여기까지 오버로드 메서드 구현 시 Default argument의 사용으로, boilerplate 코드를 줄이고, 매개변수에 대한 기본값을 설정하는 예제들에 대해서 알아봤습니다.
이 글에선 확인할 수 없지만, 아래 포스팅에서 default argument가 있는 함수 및 객체 생성자에 대해서 디컴파일을 통해 어떻게 동작하는지 확인할 수 있으니, 자세한 내용을 알고싶으시면, 읽어보시기 바랍니다.
https://medium.com/androiddevelopers/dont-argue-with-default-arguments-2245b2c752c
'Android | Kotlin 개발 관련 뉴스 & 기술' 카테고리의 다른 글
👋프로그래밍 표기법 : 1️⃣Camel Case, 2️⃣Pascal Case, 3️⃣Kebab Case, 4️⃣Snake Case (0) | 2022.03.25 |
---|---|
👋naming 시 활용할 수 있는 단어와 반의어 (0) | 2022.03.25 |
안드로이드 뉴스 : Jetpack Compose (0) | 2021.11.13 |
라이브러리 뉴스 : SplitButton (0) | 2021.11.08 |