연산자 오버로딩에 관하여 재밌는 글

Yerin·2023년 4월 24일

코틀린

목록 보기
9/11
post-thumbnail

사건의 발단

써니가 카톡을 봐달라고 한다. (멘델이 테코톡 준비로 부재중이라 내가 나섰다 ^^)


사건


띠용.. 난 지금까지 ++inc() 호출이라고 생각했었는데..

fun main() {
    var ticketCount = TicketCount(3)
    val actual = ++ticketCount
    println(actual)
}
fun main() {
    val ticketCount = TicketCount(3)
    val actual = ticketCount.inc()
    println(actual)
}

위의 두 코드가 모두 오류가 발생하지 않는다. ..ㅇ_ㅇ
그래서 처음엔 ++가 다른걸 호출하나 했는데..
inc()가 본인에게 값을 대입하지 않으니까 val 키워드를 써두 되는건가..? 라는 생각이 들었다.


그리고 hashCode 값까지 비교해본 우리의 인선씨... (ㅋㅋㅋ)

공식문서를 찾아보니

++ 연산 시 a 에 inc()의 연산결과를 집어 넣어서 반환해주는 건 당연하다고 느껴지는데
operator fun이라는 키워드가 붙었음에도 불구하고 ++로 계산이 안되는게.. 당연하다고 느껴지면서도 신기방기뿡뿡방기..


결론

동일하다고 생각한 것이 동일하지 않을 수도 있다는 것..!
이름을 가진 함수 호출은 ㄹㅇ 함수 호출이고 ++와 같은 것은 내부적으로 한번 더 처리해주는 것이라는 것 ~

어떻게 보면 당연한거 같기두 하구... ㅎ
나만 신기했으면 죄송합니다 ^_ㅜ

그래도 책읽기 싫은데 재밌는 거리를 던져준 써니에게 감사 !

profile
𝙸 𝚐𝚘𝚝𝚝𝚊 𝚕𝚒𝚟𝚎 𝚖𝚢 𝚕𝚒𝚏𝚎 𝙽𝙾𝚆, 𝙽𝙾𝚃 𝚕𝚊𝚝𝚎𝚛 !

0개의 댓글