본문 바로가기
Kotlin

[Kotlin in Action] 3.6 코드 다듬기: 로컬 함수와 확장

by Nhahan 2025. 3. 14.

코틀린에서는 함수에서 추출한 함수를 원 함수 내부에 중첩시킬 수 있다. 그렇게 하면 문법적인 부가 비용을 들이지 않고도 깔끔하게 코드를 조직할 수 있다.

 

class User(val id: Int, val name: String, val address: String)
 
fun saveUser(user: User) {
    if (user.name.isEmpty()) {
        throw IllegalArgumentException(
            "Can't save user ${user.id}: Empty Name"
        )
    }
 
    if (user.address.isEmpty()) {
        throw IllegalArgumentException(
            "Can't save user ${user.id}: Empty Address"   // 필드 검증이 중복된다.
        )
    }
 
    // user를 데이터베이스에 저장
}

위의 중복 코드를 로컬 함수로 분리하면 중복을 없애는 동시에 코드 구조를 깔끔하게 유지할 수 있다.

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, user.name, "Name")
    validate(user, user.address, "Address") // 로컬 함수를 호출해서 각 필드를 검증한다.
  
    // user를 데이터베이스에 저장
}

 

댓글