중복 제거의 중요성
- DRY(Don't Repeat Yourself) 원칙을 따르는 것이 중요
코틀린의 로컬 함수
- 함수 내부에 로컬 함수를 중첩시켜 코드를 깔끔하게 조직
로컬 함수를 사용해 코드 중복 줄이는 법
class User(val id: Int, val name: String, val address: String)
fun saveUser(user: User) {
fun validate(value: String, fieldName: String) {
if (value.isEmpty()) {
throw IllegalArgumentException("Can't save user ${user.id}: empty $fieldName")
}
}
validate(user.name, "Name")
validate(user.address, "Address")
// user를 데이터베이스에 저장한다.
}
- 로컬 함수는 바깥 함수의 모든 파라미터와 변수에 접근이 가능함.
- 코드중복 해결!
검증 로직을 확장 함수로 추출하기
fun main() {
saveUsers(User(1, "123", "address"), User(2, "", "address"))
}
class User(val id: Int, val name: String, val address: String)
fun User.validateBeforeSave() {
println("validateBeforeSave");
fun validate(value: String, fieldName: String) {
if (value.isEmpty()) {
throw IllegalArgumentException("Can't save user $id: empty $fieldName")
}
}
validate(name, "Name")
validate(address, "Address")
}
//가변인자로 변경
fun saveUsers(vararg users: User) {
for (user in users) {
user.validateBeforeSave()
}
}
validateBeforeSave
validateBeforeSave
Exception in thread "main" java.lang.IllegalArgumentException: Can't save user 2: empty Name
- 확장 함수는 클래스의 멤버처럼 수신 객체를 지정하지 않고, 공개된 멤버 프로퍼티나 메서드에 접근할 수 있게 해준다.
- 클래스를 간결하게 유지하고 필요한 기능을 추가할 수 있다.
로컬 확장 함수
중첩된 함수의 깊이가 깊어지면 코드를 읽기 어려워질 수 있으므로, 일반적으로 한 단계의 중첩만을 권장합니다.
Uploaded by N2T
'코틀린 > 코틀린인액션' 카테고리의 다른 글
[KOTLIN] 봉인된 클래스(sealed class) : 클래스 계층의 확장 제한 (0) | 2024.02.19 |
---|---|
[KOTLIN] 클래스 계층 정의 (0) | 2024.02.09 |
[KOTLIN] 컬렉션의 처리 (0) | 2024.02.09 |
[KOTLIN] 문자열과 정규 (0) | 2024.02.09 |
[KOTLIN] 함수 정의와 호출 (0) | 2024.02.08 |