코틀린에서는 함수에서 추출한 함수를 원 함수 내부에 중첩시킬 수 있다. 그렇게 하면 문법적인 부가 비용을 들이지 않고도 깔끔하게 코드를 조직할 수 있다.
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를 데이터베이스에 저장
}
'Kotlin' 카테고리의 다른 글
[Kotlin in Action] 4.2 뻔하지 않은 생성자와 프로퍼티를 갖는 클래스 선언 (0) | 2025.03.15 |
---|---|
[Kotlin in Action] 4.1 클래스 계층 정의 (0) | 2025.03.15 |
[Kotlin in Action] 3.5 문자열과 정규식 다루기 (0) | 2025.03.14 |
[Kotlin in Action] 3.4 컬렉션 처리: 가변 길이 인자, 중위 함수 호출, 라이브러리 지원 (0) | 2025.03.14 |
[Kotlin in Action] 3.3 메소드를 다른 클래스에 추가: 확장 함수와 확장 프로퍼티 (0) | 2025.03.14 |
댓글