-
44장 - 멤버 확장 함수의 사용을 피하라Kotlin/Effective Kotlin 요약 2023. 4. 7. 00:01
확장 함수를 멤버 함수로 정의
어떤 클래스에 대한 확장 함수를 정의할 때, 이를 멤버로 추가하는 것은 좋지 않습니다.
예를 들어 클래스 내부에 멤버로 정의할 수 있습니다.
class PhoneNumberIncorrect{ fun String.isPhoneNumber(): Boolean = length == 7 && all {it.isDigit()} } fun main() { println(PhoneNumberIncorrect().apply {"1234567890".isPhoneNumber()}) }
확장 함수의 가시성 제한
private fun String.isPhoneNumber(): Boolean = length == 7 && all {it.isDigit()} fun main() { println("1234567890".isPhoneNumber()) }
멤버 확장을 피해야 하는 이유
class PhoneNumberIncorrect{ fun String.isPhoneNumber(): Boolean = length ==7 } fun main() { val refX = PhoneNumberIncorrect::isPhoneNumber //컴파일 에러 val phoneNumber = PhoneNumberIncorrect() val result = phoneNumber::isPhoneNumber //컴파일 에러 }
레퍼런스를 지원하지 않음
class A{ val a= 10 } class B{ val a = 20 val b = 30 fun A.test() = a + b //40? 50? }
두 리시버 중 어떤 것이 선택될지 모호함
class A{ var a= 10 } class B{ var a = 20 val b = 30 fun A.update(){ a = 10 //A와 B중 어떤 것을 업데이트 할까요? } }
다른 클래스를 리시버로 받을 때 어떤 함수가 어떤 동작을 하는지 명확하지 않음
'Kotlin > Effective Kotlin 요약' 카테고리의 다른 글
46장 - 함수 타입 파라미터를 갖는 함수에 inline 한정자를 붙여라 (0) 2023.04.10 45장 - 불필요한 객체 생성을 피하라 (0) 2023.04.08 43장 - API의 필수적이지 않은 부분을 확장 함수로 추출하라 (0) 2023.04.06 42장 - compareTo 규약을 지켜라 (0) 2023.04.05 41장 - hashCode의 규약을 지켜라 (0) 2023.04.04