728x90
반응형
산술 연산자 오버로딩
이항 산술 연산 오버로딩 (+, -, *, /)
- 함수 앞에 operator 키워드를 붙이면 연산자 오버로딩이 가능하다.
data class Point(val x: Int, val y: Int) {
operator fun plus(other: Point): Point) { // plus 이름의 연산자 함수를 정의
return Point(x + other.x, y + other.y)
}
}
val p1 = Point(10, 20)
val p2 = Point(30, 40)
println(p1 + p2)
>> Point(x = 40, y = 60)
>> p1 + p2 는 p1.plus(p2)로 컴파일 된다.
- 미리 정해둔 연산자만 오버로딩 가능
식 함수 a * b times a / b div a % b rem a + b plus a - b minus
복합 대입 연산자 오버로딩 (+=, -= ..._)
- +=, -= 등 복합 대입(compound assignment)연산자 지원
- 객체에 대한 참조를 다른 참조로 바꾸기 보다는 원래 객체의 내부 상태를 변경하게 만들고 싶을 때 사용한다.
- plusAssign, minusAssign, timesAssign ..
// 리스트에 객체를 복합 대입 연산자 오버로딩을 사용하여 추가한다.
val numbers = ArrayList<Int>()
numbers += 42
prinln(numbers[0])
>>> 42
operator fun <T>MutableCollection<T>.plusAssign(element: T) {
this.add(element)
}
주의
- plus와 plusAssign 연산은 동시에 정의하지 말자
- 변경 불가능하다면 plus와 같이 새로운 값을 반환하는 연산만 추가
- 빌더와 같이 변경 가능한 클래스를 설계한다면 plusAssign이나 그와 비슷한 연산만을 제공
단항 연산자 오버로딩 (+a, -a, ...)
operator fun Point.unaryMinus(): Point {
return Point(-x, -y)
}
식 | 함수 이름 |
---|---|
+a | unaryPlus |
-a | unaryMinus |
!a | not |
++a, a++ | inc |
—a, a— | dec |
비교 연산자 오버로딩
- 코틀린은
==
연산자 호출을equals 메서드
호출로 컴파일 한다. - 식별자 비교(identity equals)는
===
연산자를 사용한다. <
,>
,<=
,>=
는 Comparable인터페이스 안에 있는compareTo 메서드
로 컴파일 된다.- p1 < p2 : p1.compareTo(p2) < 0
class Person(
val firstName: String, val lastName: String
): Comparable<Person> {
override fun compareTo(other: Person): Int {
return compareValueBy(this, other,
Person::lastName, Person::firstName)
}
}
val p1 = Person("Alice", "Smith")
val p2 = Person("Bob", "Johnson")
p1 < p2
>> false
728x90
반응형
'프로그래밍 노트 > Kotlin' 카테고리의 다른 글
[Kotlin] 구조 분해 선언 활용하기 (0) | 2023.07.07 |
---|---|
[Kotlin] 컬렉션과 범위에서 사용할 수 있는 관례 정리 (0) | 2023.06.29 |
[Kotlin] 코틀린 데이터 타입 (0) | 2023.03.27 |
[kotlin] 코틀린 타입 시스템 (0) | 2023.03.25 |
[Kotlin] 널이 될 수 있는 타입, 안전한 호출 연산자(?.) (0) | 2020.12.15 |