Koltin : Pair, Triple, Data Class - Multi Return Function
다수의 반환 값을 가지는 메서드 또는 함수를 만드는 방법을 만들기 위한 Pair, Triple, Data Class 활용법
에 대해 정리합니다.
Pair 와 Triple
일반적으로 함수(Function)은 1개의 결과값 또는 객체만 리턴합니다. 코틀린에서는 2개 또는 3개의 결과를 리턴할 수 있습니다. 이 때 사용되는 것이 Pair와 Triple 클래스 입니다.
Pair와 Triple는 코틀린에서 쉽게 2개, 3개의 변수를 저장하기 위해 제공되는 일종의 데이터 클래스입니다. Pair와, Triple는 Tuples.kt에 아래와 같이 선언 되어 있습니다. 아래 코드에서 보는 것과 같이 Pair, Triple모두 data Class의 형태이고, toString() 메서드를 지원합니다. 공통적으로 toList() 함수를 사용해 Pair, Triple 객체를 배열로 변환이 가능합니다.
public data class Pair<out A, out B>(
public val first: A,
public val second: B
) : Serializable {
/**
* Returns string representation of the [Pair] including its [first] and [second] values.
*/
public override fun toString(): String = "($first, $second)"
}
/**
* Creates a tuple of type [Pair] from this and [that].
*
* This can be useful for creating [Map] literals with less noise, for example:
* @sample samples.collections.Maps.Instantiation.mapFromPairs
*/
public infix fun <A, B> A.to(that: B): Pair<A, B> = Pair(this, that)
/**
* Converts this pair into a list.
* @sample samples.misc.Tuples.pairToList
*/
public fun <T> Pair<T, T>.toList(): List<T> = listOf(first, second)
public data class Triple<out A, out B, out C>(
public val first: A,
public val second: B,
public val third: C
) : Serializable {
/**
* Returns string representation of the [Triple] including its [first], [second] and [third] values.
*/
public override fun toString(): String = "($first, $second, $third)"
}
/**
* Converts this triple into a list.
* @sample samples.misc.Tuples.tripleToList
*/
public fun <T> Triple<T, T, T>.toList(): List<T> = listOf(first, second, third)
즉, 아래 코드와 같이 Pair 또는 Triple 클래스를 사용 할 수 있습니다. 아래 코드는 Pair에 저장되는 데이터를 String, Int 자료형 데이터를 사용했지만 클래스가 사용될 수도 있습니다. Pair 객체를 읽기 위해 first, second 또는 component1(), component2() 함수가 사용될 수 있습니다.
fun main() {
// Pair 객체 만들기
val pair = Pair("Hello", 123)
// Pair 객체 출력하기
println("pair : $pair")
println("pair.toString() : ${pair.toString()}")
println("pair.first : ${pair.first}") // 첫 번째 값을 출력
println("pair.component1() : ${pair.component1()}\n") // 첫 번째 값을 출력
// 리스트로 변환
val list = pair.toList()
println("list : $list\n")
// 개별 변수에 저장
var (string, number) = Pair("Hello", 123)
println("string : $string")
println("number : $number")
}
위 코드의 결과 값은 아래와 같습니다.
pair : (Hello, 123)
pair.toString() : (Hello, 123)
pair.first : Hello
pair.component1() : Hello
list : [Hello, 123]
string : Hello
number : 123
Pair를 사용한 반환값 2개 함수 만들기
2개의 값을 반환하는 함수, 메서드를 만드는 경우 Return되는 타입만 명시적으로 정의하면 됩니다.
fun main() {
var (first, second) = pairSquare(10,100)
println("first : $first")
println("second : $second")
}
fun pairSquare(first: Int, second: Int): Pair<Int, Int>{
return Pair(first*first, second*second)
}
Triple를 사용한 반환값 3개 함수 만들기
Triple은 Pair와 사용법이 동일합니다.
fun main() {
var (first, second, third) = tripleSquare(1,2,3)
println("first : $first")
println("second : $second")
println("third : $third")
}
fun tripleSquare(first : Int, second : Int, third : Int) : Triple<Int, Int, Int>{
return Triple(first*first, second*second, third*third)
}
4개 이상의 반환 값 : DataClass 활용
4개 이상의 반환 값을 가지는 함수를 만들기 위해 Data Class를 사용 할 수 있습니다. 위에서 설명한 Pair 와 Triple도 Data Class 이기 떄문에 사용법은 동일합니다. 17번 라인의 ... 부분에 원하는 데이터를 불러오거나 가공하는 코드를 넣으면 됩니다.
data class Person(val name : String, val gender : String, var old : Int, var grade : Int)
fun main() {
var person = getStudentInfo()
println(person)
}
fun getStudentInfo(): Person{
var name : String
var gender : String
var old : Int
var grade : Int
........
return Person(name, gender, old, grade)
}
※ 4개 이상의 반환 값을 가지는 함수를 만들기 위해 꼭 Data Class를 사용하지 않고, 배열로 반환하는 등의 방법을 사용할 수 도 있습니다.
끝까지 읽어 주셔서 감사합니다.^^
'Programming > Android App(Kotlin)' 카테고리의 다른 글
안드로이드 코틀린 : LocalBroadcast로 프래그먼트에서 볼륨 업/다운 키 이벤트 사용 (0) | 2021.04.28 |
---|---|
안드로이드 코틀린 : 액티비티에서 볼륨 업/다운 키 이벤트 등록 - onKeyDown() 콜백 함수 (0) | 2021.04.27 |
안드로이드 코틀린 : 여러 개의 버튼 리스너 한 번에 처리하기 View.OnClickListener (0) | 2021.04.19 |
안드로이드 코틀린 : 일반 클래스에서 Fragment의 메서드 사용하기 (0) | 2021.04.17 |
안드로이드 코틀린 : JetPack Navigation로 Fragment 전환 및 데이터 전송 기본 사용법 (0) | 2021.04.13 |