[이펙티브 코틀린] Item12. 연산자 오버로드를 할 때는 의미에 맞게 사용하라
·
Kotlin/이펙티브 코틀린
연산자 오버로딩은 굉장히 강력한 기능이지만, 위험할 수 있습니다. 예를 들어 팩토리얼을 구하는 함수를 생각해 봅시다. fun Int.factorial(): Int = (1..this).product() fun Iterable.product(): Int = fold(1) { acc, i -> acc * i } 이 함수는 Int로 정의되어 있으므로, 편리하게 사용할 수 있습니다. print(10 * 6.factorial()) // 7200 팩토리얼은 ! 기호를 사용해 표기합니다. 다음과 같이 연산자 오버로딩을 활용하면, 만들어낼 수 있습니다. operator fun Int.not() = factorial() print(10 * !6) // 7200 하지만 함수의 이름이 not이므로 논리연산에 맞게 사용해야지..