mapOf() 메소드의 to가 Kotlin Keyword가 아니라고?

Jaychy·2021년 6월 22일
0

알아가는 것

목록 보기
4/11
post-thumbnail

Github 코틀린으로 개발하면서 궁금했던 점에 대해 고찰하는 곳.

개요

Map 자료구조를 만들기 위해서 흔히 사용하는 mapOf() 메소드에서는
매개변수로 Pair 가변인자를 받습니다.
그런데 실제로 사용할 때는 Pair 객체를 만드는 것이 아니라
보통 to 키워드를 이용해서 사용합니다.
하지만 여기서 사용되는 to 키워드는 키워드가 아니라 메소드입니다.

to가 어떻게 메소드이죠?

코틀린에서는 중위 호출 이라는 기능을 지원합니다.
이는 메소드의 매개변수가 하나일 경우 메소드 호출시 필요한
.(점)()(괄호)를 제거할 수 있는 기능입니다.
따라서 다음과 같이 사용이 가능합니다.

mapOf(1 to "apple", 2 to "banana", 3 to "melon")

이 중위 호출 기능은 infix라는 키워드를 통해 실현 가능합니다.
실제로 to() 메소드는 다음과 같이 구현되어 있습니다.

infix fun Any.to(other:Any) = Pair(this, other)

사용해보기

수신자와 매개변수가 모두 Int 타입일 때만 사용할 수 있으며,
두 숫자를 합쳐서 리턴하는 확장 함수를 만들어보겠습니다.

infix fun Int.plus(operand: Int) = this + operand

여기서 주의할 점은 매개변수가 반드시 하나만 있어야 한다는 것입니다.

결론

mapOf() 메소드를 사용할 때 사용했던 to 키워드는 키워드가 아니라
중위 호출을 한 확장 함수입니다.

profile
아름다운 코드를 꿈꾸는 백엔드 주니어 개발자입니다.

0개의 댓글