반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 스터디
- 코틀린
- android
- php
- 정보처리기사
- 설치
- Eclipse
- Coroutine
- node.js
- Kotlin
- php개발
- node
- 변수
- ios
- 그림으로 배우는 서버구조
- Flutter
- 서버
- Flow
- 이클립스
- 플러터
- express
- kotlininaction
- php변수
- kotlin2.0
- SwiftUI
- 스나이퍼팩토리
- 조건문
- java
- script
- jquery
Archives
- Today
- Total
mygomii
[Kotlin] 9.1 산술 연산자를 오버로드해서 임의의 클래스에 대한 연산을 더 편리하게 만들기 본문
반응형
- 코틀린에서 관례를 사용하는 가장 단순한 예는 산술 연산자
9.1.1 plus, times, divide 등: 이항 산술 연산 오버로딩
data class Point(val x: Int, val y: Int) {
operator fun plus(other: Point): Point {
return Point(x + other.x, y + other.y)
}
}
fun main() {
val p1 = Point(10, 20)
val p2 = Point(30, 40)
println(p1 + p2) // 기호를 쓰면 plus 함수가 호출
// Point(x=40, y=60)
}
- plus 함수 앞에 operator 키워드를 붙여야 한다는 점
- 연산자를 오버로딩하는 함수 앞에는 반드시 operator 가 있어야함
- operator 키워드를 붙임으로 써 어떤 함수가 관례를 따르는 함수임을 명확히 할 수 있음
- 실수로 관례에서 사용하는 함수 이름을 사용하는 경우를 막아줌
- 함수 이름(plus, minus, times, div 등)과 operator 키워드를 맞추면, 표준 연산자(+, -, *, /)를 그대로 사용 가능
9.1.2 연산을 적용한 다음에 그 결과를 바로 대입: 복합 연산자 오버로딩
- plus 와 같은 연산자를 오버로딩하면 코틀린은 + 연산자뿐 아니라 그와 관련 있는 연산자인 += 도 자동으로 함께 지원 += , -= 등의 연산자는 복합 대입 연산자라고 부름
9.1.3 피연산자가 1개뿐인 연산자: 단한 연산자 오버로딩
- 단항 연산자를 오버로딩하는 절차도 이항 연산자와 마찬가지
- 미리 정해진 이름의 함수를 선언하면서 operator 로 표시하면 됨
data class Point(val x: Int, val y: Int) {
// -point
operator fun unaryMinus(): Point =
Point(-x, -y)
// ++point
operator fun inc(): Point =
Point(x + 1, y + 1)
// --point
operator fun dec(): Point =
Point(x - 1, y - 1)
}
fun main() {
val p = Point(3, 5)
val neg = -p
println(neg) // Point(x=-3, y=-5)
val p2 = p.inc() // 혹은 ++p
println(p2) // Point(x=4, y=6)
var p3 = p
p3++
println(p3) // Point(x=4, y=6)
val p4 = p3.dec() // 혹은 --p3
println(p4) // Point(x=3, y=5)
}
반응형
'Kotlin' 카테고리의 다른 글
[Kotlin] 9.3 컬렉션과 범위에 대해 쓸 수 있는 관례 (0) | 2025.05.15 |
---|---|
[Kotlin] 9.2 비교 연산자를 오버로딩해서 객체들 사이의 관계를 쉽게 검사 (0) | 2025.05.14 |
[Kotlin] 7.2 널이 될 수 있는 타입으로 널이 될 수 있는 변수 명시 (0) | 2025.05.07 |
[Kotlin] 7.1 NullPointerException을 피하고 값이 없는 경우 처리: 널 가능성 (0) | 2025.05.07 |
[Kotlin] 6.2 지연 계산 컬렉션 연산: 시퀀스 (0) | 2025.05.07 |