Kotlin Pairμ Triple
π₯ λ€μ΄κ°λ©°
κ·Έλμ μ½νλ¦°μ μ¬μ©νλ©΄μ Pairλ₯Ό λ§μ΄ μ¬μ©ν΄μλ€. μ΅κ·Ό λ Pairλ₯Ό μ¬μ©νλ €λ€κ° λ€λ₯Έ μ¬λλ€λ λ§μ΄ μ¬μ©νλμ§ κΆκΈνμκΈ° λλ¬Έμ΄λ€. κ·Έλ¬λ μ€ μ£Όλͺ©ν λ§ν κΈμ μ°Ύμλ€. Prefer Data Classes Over PairsλΌλ κΈμΈλ° ν΄λ¦°μ½λ κ΄μ μμ μ½νλ¦°μ Pairμ Tripleμ λν΄ μμ±ν κΈμ΄μλ€. κ½€ μ’μ λ΄μ©μ΄λΌ μμ§ μκΈ°μν΄ κΈ°λ‘ν΄λλ € νλ€.
π¨ μ§μν΄μΌλ ν΄λμ€: Pair, Triple
βDonβt ever, for any reason, use a Pair or Triple, for any reason, ever, no matter what, no matter where, or who you are with, or where you are going, or where youβve been. Ever, for any reason. Whatsoever.β
β Michael Scott
β Matt Robertson
μ΄λ€ μ΄μ λ‘λ μ΄λ€ μ΄μ λ‘λ , μ΄λ€ μ΄μ λ‘λ , μ΄λμλ , λꡬμ ν¨κ» μλ , μ΄λλ‘ κ°λ , μ΄λμ κ°λPair
λTriple
μ μ¬μ©νμ§ λ§μΈμ. μ΄λ€ μ΄μ λ‘λ νμ. μ΄μ¨λ .
μμ
ν΄λΉ κΈμ λ°λ₯΄λ©΄ Pair
μ Tripe
μ lazy data classesλΌ νλ€. lazy
λ μ’μ μ’
λ₯κ° μλλ€. μλμ μ¬ν μμ μ½λλ₯Ό 보μ.
1
fun getCoffee(): Pair<Roast, Size>
μ΄λ° μ½λκ° μλ€κ³ κ°μ νμ λ μ¬μ©λλ€λ©΄ μλμ κ°μ΄ μ¬μ©λ κ²μ΄λ€.
1
2
val coffee = getCoffee()
print(βA ${coffee.second}, ${coffee.first} roast coffee.")
μ΄ μν©μμ βν¬λ¦Όμ μν 곡κ°μ λ¨κ²¨λκΈ°βλΌλ μꡬμ¬νμ΄ λ€μ΄μμ λ Pair
λ₯Ό μ¬μ©νλ μ½λλΌλ©΄ μλμ κ°μ΄ μμ λ κ²μ΄λ€.
1
2
3
4
5
6
fun getCoffee(): Triple<Roast, Size, Boolean>
...
val coffee = getCoffee()
print("A ${coffee.second}, ${coffee.first} roast coffee with ${if (coffee.third) "" else "no "}room for cream.")
μ΄λ μ μ§λ³΄μμ κ΄μ μμ μ΅μ
μ μ νμ΄λ€. λ€λ₯Έ κ°λ°μκ° μ μ½λλ₯Ό μμ ν΄μΌ νλ€λ©΄, μ μ½λκ° νλ μΌμ΄ 무μμΈμ§ νμ
νκΈ° μν΄ getCoffee()
κ° μλ νμΌκΉμ§ λ€μ΄μμΌ νλ€!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
data class Coffee(
val roast: Roast,
val size: Size,
val leaveRoom: Boolean
)
...
fun getCoffee(): Coffee
...
val coffee = getCoffee()
print("A ${coffee.size}, ${coffee.roast} roast coffee with ${if (coffee.leaveRoom) "" else "no "}room for cream.")
Pair
μ Triple
μ μ¬μ©νλ λμ data classλ₯Ό λ§λ€μ΄ μ λ¬νλ©΄ μ μ§λ³΄μμ νμ₯μ μ’μ μ½λλ₯Ό μμ±ν μ μλ€. μλμ κ²½μ°λΌλ©΄
1
val ounces = coffee.second.ounces - if (coffee.third) 2 else 0
coffee.third
κ° λ¬΄μμΈμ§ μ μ μμμ§λ§
1
val ounces = coffee.size.ounces - if (coffee.leaveRoom) 2 else 0
νμ¬λ νλμ μμλ³Ό μ μλ€.
ν΄λ¦° μ½λ
λ§μ§λ§μΌλ‘ ν΄λΉ κΈμμ ν΄λ¦° μ½λμ λν λ΄μ©μ μ μΌλ©° Pair
μ Triple
μ μ¬μ©νλ νμκ° μν°ν¨ν΄μμ κ°μ‘°νκ³ μλ€.
Pairs and Triples are anti-patterns that should be avoided in preference for data classes.
λ€λ₯Έ μ΄λ€μ΄ μ½μ κ²μ μκ°νμ¬ λ΄κ° μκ°λΌλ λ§μΈλλ‘ κ°λ°ν΄μΌ νλ€. κΉ¨λνκ³ , μ μ§λ³΄μμ μ©μ΄ν μ½λλ₯Ό μμ±ν΄μΌνλ©°, μ°κΈ°μ λ μ΄λ €μμ§λλΌλ νλμ νμ λλ μ½λλ₯Ό μμ±νμλ λ΄μ©μ μ μΌλ©° Pairsλ₯Ό μ¬μ©νμ§ λ§ κ²μ νλ² λ κ°μ‘°νλ€.
μ΄ κΈμ κ·Έλμ λ΄κ° μμ±ν μ½λμ λν΄ κ³ λ―Όν΄λ³΄κ² λ§λ λ€. λ°λλΌμΈμ΄ λ€κ°μ€λ©΄ ꡬνμ κΈκΈν΄μ Έ μΌλ¨ ꡬνλΆν° λλ΄μλ μκ°μΌλ‘ κ°λ°μ νκ² λμλλ°, μ΄λ λ§€μ° μ’μ§ μμ μ΅κ΄μ΄λ€. μ΄λ κ² μμ±νλ μ½λλ 리ν©ν λ§λ μ½μ§ μλ€. κ°λ°μ ν λλ§λ€ λ΄κ° μ’μ μ½λλ₯Ό μμ±νκ³ μλμ§, μ’μ μ€κ³λ₯Ό νκ³ μλμ§ νμ κ³ λ―Όνμ§λ§ νμ λΆμ‘±ν κ² κ°λ€.