[Kotlin] Kotlin OOP (3) - 연산자 오버로딩, 위임

yuseon Lim·2021년 4월 19일
0

Kotlin

목록 보기
8/11
post-thumbnail
post-custom-banner

연산자 오버로딩

  • 이항 산술 연산자 +, -, *, /, % 오버로딩 가능
    • 오버로딩 할 때 연산자 이름 plus, minus, times, div, rem
  • 단항연산자
    • unaryPlus, unaryMinus, not, inc, dec
  • 비교연산자
    • equals, compareTo

예제출처: 허준영교수님 github

data class Complex(val real: Double, val img: Double) {
    operator fun plus(other: Complex): Complex
        = Complex(real + other.real, img + other.img)
    override fun toString(): String = "$real+${img}i"
}

operator fun Complex.minus(other: Complex): Complex
    = Complex(real - other.real, img - other.img)

fun main() {
    val c1 = Complex(1.0, 1.0)
    val c2 = Complex(2.0, 2.0)
    val c3 = c1 + c2
    println(c3) // 3.0 + 3.0i
    println(c3 == Complex(3.0, 3.0)) // true
}

위임

  • 상속과 유사하지만 다르다.
    • 상속은 강한 결합, 위임은 약한 결합
    • 상속 불가여도 위임은 가능
    • 위임할 클래스와 동일한 인터페이스 구현해야함
  • 위임 패턴은 위임(상속)할 객체를 멤버로 만들고 특정 메소드 호출시 위임 객체의 메소드 포워드(호출)하는 방식으로 만듦
    • 위임 객체의 메소드 각각에 대해 메소드를 새로 만들어서 포워드
  • by 키워드로 위임 지원

예제출처: 허준영교수님 github

interface Base {
    fun print()
    fun printHello()
}

class BaseImpl(val x: Int) : Base {
    override fun print() { print(x) }
    override fun printHello() { println("Hello")}
}

class Derived(val b: Base) : Base by b {
    override fun print() {
        b.print()
        println("ok")
    }
}

// fun main() { // kts에서 작성
val b = BaseImpl(10)
val d = Derived(b)
d.print() // 10ok
d.printHello() // Hello // Derived 에서 구현하지 않았으나 b의 것을 사용
// }

참고자료

profile
🔥https://devyuseon.github.io/ 로 이사중 입니다!!!!!🔥
post-custom-banner

0개의 댓글