-
[Kotlin] 연산자 오버로딩 사용 예시Kotlin/Kotlin 2022. 11. 25. 00:21728x90
개요
Effective kotlin에서는 연산자 오버로딩할때는 의미를 명확히 하라고 합니다.
이런 예제가 어떤것들이 있는지 알아보는 시간을 가지겠습니다.
BigInteger
BigInteger 클래스는 int, long으로 표현할 수 없는 매우 큰 수를 다루기 위해 등장한 클래스입니다.
BigInteger 클래스를 다룬다면 add 함수 호출보단 + 연산하는 것이 더 좋습니다.
val a = BigInteger("1") val b = BigInteger("2") println(a.add(b)) //자바에서는 이렇게 써야함 println(a+b) //자바에서는 Error 발생, 코틀린에서는 Error 발생x
Pair 활용
만약 두 좌표계를 더해야 하는 일이 있을 수 있습니다.
이런 경우에 연산자 오버로딩을 통해 손쉽게 해결할 수 있습니다.
fun main() { val firstPair = Pair(1, 2) val secondPair = Pair(3, 4) val response = firstPair + secondPair println("first: ${response.first} second: ${response.second}") // first: 4 second: 6 } operator fun Pair<Int, Int>.plus(other: Pair<Int, Int>) = Pair(first + other.first, second + other.second)
순서 연산자 compareTo
자바에서는 정렬, 최댓값, 최솟값 등을 비교할 때 Comparable 인터페이스를 구현해야 합니다.
코틀린도 같은 인터페이스를 지원하며 compareTo 메소드를 호출하는 관례를 지원합니다.
비교 연산자(<, >, <=, >=)는 compareTo 호출로 컴파일됩니다.
class Person ( val firstName: String, val lastName: String ): Comparable<Person> { override fun compareTo(other: Person): Int { return compareValuesBy(this, other, Person::lastName, Person::firstName) } }
코틀린 표준 라이브러리인 compareValuesBy 함수를 이용해 compareTo 함수를 간결하게 정의할 수 있습니다.
동등성 연산자 euals
코틀린의 == 연산자 호출은 equals 메소드 호출로 컴파일합니다.
!= 연산자를 사용하는 경우에도 equals로 컴파일됩니다.
Collection += 지원
fun main() { val a = mutableListOf("1","2") a += "3" println(a) //[1, 2, 3] }
참고자료
'Kotlin > Kotlin' 카테고리의 다른 글
Kotlin과 Java의 컴파일 순서 (0) 2023.11.11 [Kotlin] 상태패턴으로 배송상태를 변경해보자 (0) 2023.08.29 [Kotlin] Result란? (0) 2022.12.04 [Kotlin] @JvmStatic이란? (0) 2022.10.28 [Kotlin] Intellij 에서 코틀린 시작하기 (0) 2022.09.09