App노자
[Kotlin] 연산자 오버로딩 본문
1. 연산자 오버로딩이란?
fun main() {
val a = 5
val b = 10
print(a.plus(b))
// public operator fun plus(other: Int): Int
}
연산자를 사용하면 관련된 멤버 메서드를 호출하는 것과 같다
a + b는 a.plus(b)라는 함수가 내부적으로 호출되는 것이다
연산자 오버로딩이란 클래스의 다형성 중 하나로 사용자의 필요에 의해 플러스와 같은 연산자에 여러 가지 다른 동작을 부여 하는 커스터마이징의 개념이다
코틀린 표준 라이브러리에 있는 Primitives.kt 파일이다
확인해 보면 operator키워드로 다양한 자료형들이 오버로딩되어 있는 것을 확인할 수 있다
https://github.com/JetBrains/kotlin/blob/master/core/builtins/native/kotlin/Primitives.kt
GitHub - JetBrains/kotlin: The Kotlin Programming Language.
The Kotlin Programming Language. . Contribute to JetBrains/kotlin development by creating an account on GitHub.
github.com
class Point(var x: Int = 0, var y: Int = 10) {
// plus 함수의 연산자 오버로딩
operator fun plus(p: Point) : Point {
return Point(x + p.x, y + p.y)
}
operator fun dec() = Point(--x, --y)
}
fun main() {
val p1 = Point(3, -8)
val p2 = Point(2, 9)
var point = Point()
point = p1 + p2
println("point = (${point.x}, ${point.y})")
}
Point 클래스를 만들고 + 연산자를 오버로딩했다
operator키워드를 이용해 다양하게 활용이 가능하다
2. 호출 연산자
class Manager {
operator fun invoke(value: String) {
println(value)
}
}
fun main() {
val manager = Manager()
// 원래는 manager.invoke("...")형태로 호출되며 invoke가 생략되었다.
manager("Do something for me!")
// 람다식 함수에는 invoke가 기본 정의된다.
val sum = { x: Int, y: Int -> x + y }
sum.invoke(3, 10)
sum(3, 10) // 위와 동일한 결과
}
호출 연산자는 함수 호출을 돕는 데 사용 된다
특정 객체에 인수를 넣어 처리하기 위해 operator키워드를 이용해 다양하게 활용이 가능하다
3. 단일 연산자
enum class Day(var num: Int) {
Monday(1), Tuesday(2), Wednesday(3), Thursday(4),
Friday(5), Saturday(6), Sunday(7)
}
fun main() {
val day = Day.Monday
when(day.num) {
1,2,3,4,5, -> println("weekDay")
6,7 -> println("weekend")
}
}
4. 범위 연산자
enum class Day(var num: Int) {
Monday(1), Tuesday(2), Wednesday(3), Thursday(4),
Friday(5), Saturday(6), Sunday(7)
}
fun main() {
val day = Day.Monday
when(day.num) {
1,2,3,4,5, -> println("weekDay")
6,7 -> println("weekend")
}
}
5. 기타 연산자
인덱스 접근 연산자
public operator fun get(index: Int): Int
public operator fun set(index: Int, value: Int): Unit
인덱스 접근 연산자는 게터와 세터를 다루기 위해 대괄호 연산자를 제공한다 인덱스 표기법을 통해 값을 읽고 쓰기가 가능하다
'Android > Kotlin' 카테고리의 다른 글
[Kotlin] 제네릭(Generic) (0) | 2023.06.18 |
---|---|
[Kotlin] 클래스와 클래스의 관계 (0) | 2023.05.29 |
[Kotlin] 열거형 클래스와 기타 클래스 (0) | 2023.05.27 |
[Kotlin] 데이터 클래스와 이너 클래스 (0) | 2023.05.16 |
[Kotlin] 추상 클래스와 인터페이스 (0) | 2023.05.03 |