일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 안드로이이드 submodule
- 게임개발
- 안드로이드
- 서브모듈 pull
- 내 맘대로 정리한 안드로이드
- 유니티
- 목서버
- 쿼터뷰
- submodule sourcetree
- java
- Kotlin
- 카페오냥
- GIT
- 앱
- 서브모듈 sourcetree
- 티스토리
- DataBinding
- Android Studio
- firebase
- Android
- 2d게임
- 타이쿤
- 앱개발
- 안드로이드개발
- 개발
- github submodule
- gitlab submodule
- github
- 코틀린
- Unity
- Today
- Total
Uing? Uing!!
[내 맘대로 정리한 Kotlin] vararg(가변인자)로 파라미터 원하는 개수만큼 받기 본문
가변적인 파라미터 개수: vararg를 사용하지 않는다면
함수를 사용하다 보면 파라미터로 몇 개의 인자를 받게 될지 정확하게 정할 수 없는 경우가 있다.
또는, 처음에 설계했던 구조의 파라미터 개수만으로 원하는 조건을 만족시킬 수 없는 경우가 있다.
예를 들어 아래 코드는 "입력값: A"라는 문자열을 출력한다.
fun main(){
printData("입력값", "A")
}
fun printData(name: String, value: String){
val result = "$name: $value"
println(result)
}
그런데, printData함수를 printData("입력값", "A", "B")와 같이 입력해서 "입력값: AB"도 출력하고 싶어졌다면?
첫 번째 방법: 함수 오버라이딩하기
간단하게는 이렇게 오버라이딩을 할 수도 있겠다.
fun main(){
printData("입력값", "A")
printData("입력값", "A", "B")
}
fun printData(name: String, value: String){
val result = "$name: $value"
println(result)
}
fun printData(name: String, value1: String, value2: String){
val result = "$name: $value1$value2"
println(result)
}
두 번째 방법: 리스트로 바꾸어 받기
또는 입력 형태를 바꾸어서, 이렇게 리스트로 값을 입력해줄 수도 있을 것이다.
fun main(){
printData("입력값", listOf("A"))
printData("입력값", listOf("A","B"))
}
fun printData(name: String, valueList: List<String>){
var result = "$name: "
for (value in valueList) result += value
println(result)
}
하지만 이렇게 되면 printData함수를 이용하기 위해서 간단한 데이터도 리스트로 변환해 사용해야 한다.
이 외에도 다양한 이유로 입력된 파라미터의 개수를 가변적으로 사용하고 싶을 때가 있다.
이럴 때 사용할 수 있는 것이 vargargs(가변인자)이다.
vararg(가변인자)
vararg는 '내가 파라미터 값들을 받을 건데, 몇 개 받을지는 몰라'라는 의미를 갖는다.
가변적인 개수로 받을 파라미터 리스트의 이름 앞에 vararg라는 지시자를 붙여주기만 하면 활용할 수 있다.
위의 예시를 vararg를 사용해 다시 작성하면 아래와 같다.
fun main(){
printData("입력값", "A")
printData("입력값", "A", "B")
}
fun printData(name: String, vararg values: String){
var result = "$name: "
for (value in values) result += value
println(result)
}
이렇게 활용하면 첫 번째 방법과 비교했을 때에는 불필요한 오버라이딩이 발생하지 않는다는 점이 좋고,
두 번째 방법과 비교했을 때에는 리스트를 생성하지 않고 원하는 형식으로 함수를 이요할 수 있다는 점이 좋다.
다만 printData("입력값", "A", "B")를 실행할 때 결국 vararg는 "A"와 "B"를 묶어 하나의 Array로 만들어 사용한다.
따라서, 불필요하게 코드상에서 리스트를 만들어 넘겨야 하는 수고를 덜어 주는 지시자라고 생각하면 되겠다.
'Kotlin' 카테고리의 다른 글
[내 맘대로 정리한 Kotlin] @JvmOverloads: constructor를 일일이 상속받아 만들기 귀찮다면! (0) | 2021.03.30 |
---|---|
[내 맘대로 정리한 Kotlin] 확장 함수와 확장 프로퍼티: 직접 수정할 수 없는 클래스에 함수&프로퍼티 추가하기 (2) | 2020.12.13 |
[내 맘대로 정리한 Kotlin] let으로 null-check 하기 (0) | 2020.11.17 |
[내 맘대로 정리한 Kotlin] isEmpty와 isBlank의 차이점 (0) | 2020.09.30 |
[내 맘대로 정리한 Kotlin] lateinit과 by lazy의 차이점 (1) | 2020.09.30 |