fun isPasswordValid(text: String) {
if (text.length < 7) return false
}
const val MIN_PASSWORD_LENGTH = 7
fun isPasswordValid(text: String) {
if (text.length < MIN_PASSWORD_LENGTH) return false
}
안드로이드 앱 개발 중 토스트 메시지를 자주 출력해야 되는 상황이 발생했다고 하자.
Toast.makeText(this, message, Toast.LENGTH_LONG).show()
위처럼 매번 작성하는 것을 아래와 같이 확장 함수로 만들어 간결하게 사용할 수 있다.
fun Context.toast(
message: String,
duration: Int = Toast.LENGTH_SHORT
) {
Toast.makeText(this, message, duration).show()
}
// 사용 예
context.toast(message)
만약 토스트가 아닌 스낵바로 출력해야 한다면?
fun Context.snackbar(
message: String,
duration: Int = Toast.LENGTH_LONG
) {
// ...
}
메시지 출력 방법이 이후에 바뀔 수 있다는 것을 알고 있는 상태라면, 추상화하면 된다.
fun Context.showMessage(
message: String,
duration: MessageLength = MessageLength.LONG
) {
// 토스트 구현을 내부로 숨김
val toastDuration = when(duration) {
SHORT -> Toast.LENGTH_SHORT
LONG -> Toast.LENGTH_LONG
}
Toast.makeText(this, message, toastDuration).show()
}
enum class MessageLength { SHORT, LONG }
뭐가 좋아진걸까?
fun Context.showMessage(message: String, duration: MessageLength = MessageLength.LONG) {
val snackbarDuration = when(duration) {
SHORT -> Snackbar.LENGTH_SHORT
LONG -> Snackbar.LENGTH_LONG
}
Snackbar.make(view, message, snackbarDuration).show()
}