Chef.Yeon
Code Cook
Chef.Yeon
전체 방문자
오늘
어제
  • 분류 전체보기 (230)
    • 게임 개발 (1)
      • Unity (1)
    • Android (27)
      • Kotlin (19)
      • 우아한테크코스 5기 (4)
    • Language (11)
      • 파이썬 (3)
      • Java (7)
    • DB (2)
      • SQL (16)
    • Spring (25)
    • 코딩테스트 (56)
    • Git (1)
    • TIL (85)
    • DevOps (6)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • MariaDB
  • til
  • 내림차순
  • 안드로이드
  • 레포지토리
  • java
  • 프리코스
  • Docker
  • kibana
  • 에라토스테네스의 체
  • 문자열
  • 코틀린 인 액션
  • enum
  • 백준
  • 다이나믹 프로그래밍
  • ec2
  • 프로그래머스
  • spring
  • elasticsearch
  • SQL
  • 파이썬
  • webflux
  • 우아한테크코스
  • 코틀린
  • 코딩테스트
  • Android
  • Wil
  • grafana
  • kotlin
  • rsocket

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Chef.Yeon

Code Cook

Android/Kotlin

[코틀린 인 액션] 7장 정리: 연산자 오버로딩

2022. 12. 5. 19:09
728x90
7.1.1 이항 산술 연산자 오버로딩

   1. 연산자를 오버로딩하는 함수 앞에는 꼭 operator가 있어야 함

식 함수 이름
a * b times
a / b div
a % b mod(1.1부터 rem)
a + b plus
a - b minus

 

   2. operator 변경자를 추가해 plus 함수를 정의하면, + 기호로 덧셈이 가능

data class Point(val x: Int, val y: Int)

fun main(args: Array<String>) {
    val point = Point(1, 3)
    println(point.plus(point))
}

operator fun Point.plus(other: Point): Point {
    return Point(x + other.x, y + other.y)
}

 

7.1.3 단항 연산자 오버로딩

   1. 단항 연산자를 오버로딩하기 위해 사용하는 함수는 인자를 취하지 않음

식 함수 이름
+a unaryPlus
-a unaryMinus
!a not
++a, a++ inc
--a, a-- dec
data class Point(val x: Int, val y: Int)

fun main(args: Array<String>) {
    val point = Point(1, 3)
    println(-point)
}

operator fun Point.unaryMinus(): Point {
    return Point(-x, -y)
}

 

import java.math.BigDecimal

operator fun BigDecimal.inc() = this + BigDecimal.ONE

fun main(args: Array<String>) {
    var bd = BigDecimal.ZERO
    println(bd++)
    println(++bd)
}

 

7.3.1 인덱스로 원소에 접근: get과 set
data class Point(val x: Int, val y: Int)

fun main(args: Array<String>) {
    val point = Point(10, 20)
    println(point[1])
}

operator fun Point.get(index: Int): Int {
    return when(index) {
        0 -> x
        1 -> y
        else ->
            throw IndexOutOfBoundsException("Invalid coordinate $index")
    }
}

 

data class MutablePoint(var x: Int, var y: Int)

fun main(args: Array<String>) {
    val point = MutablePoint(10, 20)
    point[1] = 30
    println(point)
}

operator fun MutablePoint.set(index: Int, value: Int) {
    return when(index) {
        0 -> x = value
        1 -> y = value
        else ->
            throw IndexOutOfBoundsException("Invalid coordinate $index")
    }
}

 

 

728x90

'Android > Kotlin' 카테고리의 다른 글

[Kotlin] Delegate Pattern 사용하기  (0) 2022.12.14
[코틀린 인 액션] 8장 정리: 고차 함수  (0) 2022.12.13
[코틀린 인 액션] 6장 정리: null 다루는 방법  (0) 2022.11.30
[코틀린 인 액션] 5장 정리  (0) 2022.11.30
[코틀린 인 액션] 4장 정리  (0) 2022.11.29
    'Android/Kotlin' 카테고리의 다른 글
    • [Kotlin] Delegate Pattern 사용하기
    • [코틀린 인 액션] 8장 정리: 고차 함수
    • [코틀린 인 액션] 6장 정리: null 다루는 방법
    • [코틀린 인 액션] 5장 정리
    Chef.Yeon
    Chef.Yeon
    보기 좋고 깔끔한 코드를 요리하기 위해 노력하고 있습니다.

    티스토리툴바